SlideShare une entreprise Scribd logo
1  sur  40
Hamidou Bah
@gdgratoma
@altgras
https://github.com/hams94
https://www.linkedin.com/in/hamidou-bah-80910011b/
https://twitter.com/yalagueya
https://www.youtube.com/channel/UCNcn0E8QLeyVTdmwgM6
Vlfw
Qu’est ce que Flutter ?
•Flutter est un Framework de développement
d’applications mobiles
•Ce Framework est proposé en Open Source par
Google
•Il propose un moyen unifié de développer des
applications Android et iOS à partir d’un code
commun
•Il permet également de simplifier la gestion
des compatibilités entre versions d’OS différentes.
C’est quoi Firebase ?
Firebase est essentiellement une
plate-forme de développement
d'applications mobiles et Web
utilisée pour aider à créer des
applications de haute qualité
Quelques produits de Firebase
Mais C’est quoi le ML Kit ?
ML Kit est une collection de
puissantes API d'apprentissage
automatique mises à la
disposition du public par Google
à IO 18 sous la marque
Firebase. .
Quelques Puissantes API de ML Kit
Reconnaissance optique de caractères
C’est une api qui permet de
détecter du texte dans les
images et l'extraire
Détection des visages
C’est une api qui permet de
détecter les visages et les
repères faciaux à l'aide de la
fonctionnalité Contours de
visage
Détection d'objets et suivi
C’est une api qui permet de
détecter, suivre et classer des
objets dans des images
statiques ou en direct de
l'appareil photo
Ajout de libellés à des images
C’est une api qui permet
d’identifier des objets, des lieux,
des activités, des espèces
animales, des produits et plus
encore
Auto ML Vision Edge
C’est une api qui vous permet
d’entraîner et publiez vos
propres modèles de
classification d'images.
Lecture de codes-barres
C’est une api qui vous permet d’
analyser et traitez des codes-
barres
Reconnaissance de points de repère
Identifiez les points de repère
populaires dans une image
Traduction sur l'appareil
Traduire du texte d'une langue à
une autre
Réponse suggérée
Générez des réponses par SMS
en fonction des messages
précédents
Intégration du ML Kit de Firebase à une application Flutter
Exemple: Détection de visages
Plan de travail
● Obtenir une image et la convertir en un format pouvant être compris
par notre ML Kit
● Envoyez l'image au détecteur et lui demander de scanner l'image
pour rechercher des visages possibles.
● Récupérer les visages trouvés et les transmettre au CustomPainter.
● Autorisez le CustomPainter à obtenir les coordonnées des faces,
puis les utiliser pour dessiner des effets.
Mise en Œuvre
Etape 1: Projet Firebase et dépendances
Créer un projet flutter
Créer un projet Firebase et ajouter une application au projet (voir la documentation )
Ajouter les dépendances image_picker et firebase_ml_vision
Ajouter également la dépendance du modèle de visage dans le fichier build.gradle niveau
application: implementation ‘com.google.firebase:firebase-ml-vision-face-model:19.0.0’
Etape 2: Récupération de l’image
final imageFile = await
ImagePicker.pickImage(source:ImageSource.gallery);
seState((){
isLoading = true;
});
Etape 3: Traitement de l’image
final data = await file.readAsBytes();
await decodeImageFromList(data).then( (value) =>
setState(() {
_image = value;
isLoading = false;
}), );
Etape 4: Détection des visages
final faceDetector = FirebaseVision.instance.faceDetector();
List<Face> faces = await faceDetector.processImage(image);
Etape 5: Le CustomPainter
class FacePainter extends CustomPainter {
final ui.Image image;
final List<Face> faces;
final List<Rect> rects = [];
FacePainter(this.image, this.faces)
{
for (var i = 0; i < faces.length; i++)
{ rects.add(faces[i].boundingBox); }
}
@override void paint(ui.Canvas canvas, ui.Size size) {
final Paint paint = Paint()
..style = PaintingStyle.stroke
..strokeWidth = 15.0
..color = Colors.yellow;
canvas.drawImage(image, Offset.zero, Paint());
for (var i = 0; i < faces.length; i++) {
canvas.drawRect(rects[i], paint);
}
}
@override bool shouldRepaint(FacePainter oldDelegate) {
return image != oldDelegate.image || faces != oldDelegate.faces;
}
}
class FacePainter extends CustomPainter {
final ui.Image image;
final List<Face> faces;
final List<Rect> rects = [];
FacePainter(this.image, this.faces)
{
for (var i = 0; i < faces.length; i++)
{ rects.add(faces[i].boundingBox); }
}
@override void paint(ui.Canvas canvas, ui.Size size) {
final Paint paint = Paint()
..style = PaintingStyle.stroke
..strokeWidth = 15.0
..color = Colors.yellow;
canvas.drawImage(image, Offset.zero, Paint());
for (var i = 0; i < faces.length; i++) {
canvas.drawRect(rects[i], paint);
}
}
@override bool shouldRepaint(FacePainter oldDelegate) {
return image != oldDelegate.image || faces != oldDelegate.faces;
}
}
class FacePainter extends CustomPainter {
final ui.Image image;
final List<Face> faces;
final List<Rect> rects = [];
FacePainter(this.image, this.faces)
{
for (var i = 0; i < faces.length; i++)
{ rects.add(faces[i].boundingBox); }
}
@override void paint(ui.Canvas canvas, ui.Size size) {
final Paint paint = Paint()
..style = PaintingStyle.stroke
..strokeWidth = 15.0
..color = Colors.yellow;
canvas.drawImage(image, Offset.zero, Paint());
for (var i = 0; i < faces.length; i++) {
canvas.drawRect(rects[i], paint);
}
}
@override bool shouldRepaint(FacePainter oldDelegate) {
return image != oldDelegate.image || faces != oldDelegate.faces;
}
}
class FacePainter extends CustomPainter {
final ui.Image image;
final List<Face> faces;
final List<Rect> rects = [];
FacePainter(this.image, this.faces)
{
for (var i = 0; i < faces.length; i++)
{ rects.add(faces[i].boundingBox); }
}
@override void paint(ui.Canvas canvas, ui.Size size) {
final Paint paint = Paint()
..style = PaintingStyle.stroke
..strokeWidth = 15.0
..color = Colors.yellow;
canvas.drawImage(image, Offset.zero, Paint());
for (var i = 0; i < faces.length; i++) {
canvas.drawRect(rects[i], paint);
}
}
@override bool shouldRepaint(FacePainter oldDelegate) {
return image != oldDelegate.image || faces != oldDelegate.faces;
}
}
class FacePainter extends CustomPainter {
final ui.Image image;
final List<Face> faces;
final List<Rect> rects = [];
FacePainter(this.image, this.faces)
{
for (var i = 0; i < faces.length; i++)
{ rects.add(faces[i].boundingBox); }
}
@override void paint(ui.Canvas canvas, ui.Size size) {
final Paint paint = Paint()
..style = PaintingStyle.stroke
..strokeWidth = 15.0
..color = Colors.yellow;
canvas.drawImage(image, Offset.zero, Paint());
for (var i = 0; i < faces.length; i++) {
canvas.drawRect(rects[i], paint);
}
}
@override bool shouldRepaint(FacePainter oldDelegate) {
return image != oldDelegate.image || faces != oldDelegate.faces;
}
}
Etape 6: Le UI
@override
Widget build(BuildContext context) {
return Scaffold(
body: isLoading
? Center(child: CircularProgressIndicator())
: (_imageFile == null)
? Center(child: Text(‘Aucune image sélectionné'))
: Center(
child: FittedBox(
child: SizedBox(
width: _image.width.toDouble(),
height: _image.height.toDouble(),
child: CustomPaint(
painter: FacePainter(_image, _faces),
),
),
),
),
floatingActionButton: FloatingActionButton(
onPressed: _getImageAndDetectFaces,
tooltip: ‘Sélect. Image',
child: Icon(Icons.add_a_photo),
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: isLoading
? Center(child: CircularProgressIndicator())
: (_imageFile == null)
? Center(child: Text(‘Aucune image sélectionné'))
: Center(
child: FittedBox(
child: SizedBox(
width: _image.width.toDouble(),
height: _image.height.toDouble(),
child: CustomPaint(
painter: FacePainter(_image, _faces),
),
),
),
),
floatingActionButton: FloatingActionButton(
onPressed: _getImageAndDetectFaces,
tooltip: ‘Sélect. Image',
child: Icon(Icons.add_a_photo),
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: isLoading
? Center(child: CircularProgressIndicator())
: (_imageFile == null)
? Center(child: Text(‘Aucune image sélectionné'))
: Center(
child: FittedBox(
child: SizedBox(
width: _image.width.toDouble(),
height: _image.height.toDouble(),
child: CustomPaint(
painter: FacePainter(_image, _faces),
),
),
),
),
floatingActionButton: FloatingActionButton(
onPressed: _getImageAndDetectFaces,
tooltip: ‘Sélect. Image',
child: Icon(Icons.add_a_photo),
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: isLoading
? Center(child: CircularProgressIndicator())
: (_imageFile == null)
? Center(child: Text(‘Aucune image sélectionné'))
: Center(
child: FittedBox(
child: SizedBox(
width: _image.width.toDouble(),
height: _image.height.toDouble(),
child: CustomPaint(
painter: FacePainter(_image, _faces),
),
),
),
),
floatingActionButton: FloatingActionButton(
onPressed: _getImageAndDetectFaces,
tooltip: ‘Sélect. Image',
child: Icon(Icons.add_a_photo),
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: isLoading
? Center(child: CircularProgressIndicator())
: (_imageFile == null)
? Center(child: Text(‘Aucune image sélectionné'))
: Center(
child: FittedBox(
child: SizedBox(
width: _image.width.toDouble(),
height: _image.height.toDouble(),
child: CustomPaint(
painter: FacePainter(_image, _faces),
),
),
),
),
floatingActionButton: FloatingActionButton(
onPressed: _getImageAndDetectFaces,
tooltip: ‘Sélect. Image',
child: Icon(Icons.add_a_photo),
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: isLoading
? Center(child: CircularProgressIndicator())
: (_imageFile == null)
? Center(child: Text(‘Aucune image sélectionné'))
: Center(
child: FittedBox(
child: SizedBox(
width: _image.width.toDouble(),
height: _image.height.toDouble(),
child: CustomPaint(
painter: FacePainter(_image, _faces),
),
),
),
),
floatingActionButton: FloatingActionButton(
onPressed: _getImageAndDetectFaces,
tooltip: ‘Sélect. Image',
child: Icon(Icons.add_a_photo),
),
);
}
PRATIQUE
MERCI BEAUCOUP
POUR VOTRE
ATTENTION

Contenu connexe

Tendances

Rapport de projet de fin d’étude
Rapport  de projet de fin d’étudeRapport  de projet de fin d’étude
Rapport de projet de fin d’étudeOumaimaOuedherfi
 
Projet Fin D'étude Application Mobile
Projet Fin D'étude Application MobileProjet Fin D'étude Application Mobile
Projet Fin D'étude Application MobileRim ENNOUR
 
Rapport de Stage PFE - Développement d'un Projet ALTEN MAROC Concernant le Sy...
Rapport de Stage PFE - Développement d'un Projet ALTEN MAROC Concernant le Sy...Rapport de Stage PFE - Développement d'un Projet ALTEN MAROC Concernant le Sy...
Rapport de Stage PFE - Développement d'un Projet ALTEN MAROC Concernant le Sy...tayebbousfiha1
 
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...Riadh K.
 
Reconnaissance faciale
Reconnaissance facialeReconnaissance faciale
Reconnaissance facialeAymen Fodda
 
PFE mastère/ Prédiction des émotions pour EEG générées par CVAE et avec LSTM ...
PFE mastère/ Prédiction des émotions pour EEG générées par CVAE et avec LSTM ...PFE mastère/ Prédiction des émotions pour EEG générées par CVAE et avec LSTM ...
PFE mastère/ Prédiction des émotions pour EEG générées par CVAE et avec LSTM ...BouzidiAmir
 
Rapport du Projet de Fin d'année Génie informatique ENSA AGADIR
Rapport du Projet de Fin d'année Génie informatique ENSA AGADIRRapport du Projet de Fin d'année Génie informatique ENSA AGADIR
Rapport du Projet de Fin d'année Génie informatique ENSA AGADIRAHMEDAKHACHKHOUCH
 
Conception et développement d’un Système de réservation en ligne
Conception et développement d’un Système de réservation en ligneConception et développement d’un Système de réservation en ligne
Conception et développement d’un Système de réservation en ligneAydi Nébil
 
E-commerce Use case NFE102
E-commerce Use case NFE102E-commerce Use case NFE102
E-commerce Use case NFE102MRamo2s
 
Pour Écrire un Bon Rapport en Informatique
Pour Écrire un Bon Rapport en InformatiquePour Écrire un Bon Rapport en Informatique
Pour Écrire un Bon Rapport en InformatiqueLilia Sfaxi
 
Présentation du stage echatibi sofian
Présentation du stage echatibi sofianPrésentation du stage echatibi sofian
Présentation du stage echatibi sofianSofiane Echatibi
 
Projet réalisé par ameny Khedhira & Arij Mekki
Projet réalisé par  ameny Khedhira & Arij MekkiProjet réalisé par  ameny Khedhira & Arij Mekki
Projet réalisé par ameny Khedhira & Arij MekkiAmeny Khedhira
 
Tp1 - WS avec JAXWS
Tp1 - WS avec JAXWSTp1 - WS avec JAXWS
Tp1 - WS avec JAXWSLilia Sfaxi
 
Traitement des images avec matlab
Traitement des images avec matlabTraitement des images avec matlab
Traitement des images avec matlabomar bllaouhamou
 
Pfe conception et réalisation d'une application de gestion des processus d'ac...
Pfe conception et réalisation d'une application de gestion des processus d'ac...Pfe conception et réalisation d'une application de gestion des processus d'ac...
Pfe conception et réalisation d'une application de gestion des processus d'ac...Ahmed Makni
 
Rapport (Mémoire de Master) de stage PFE pour l’obtention du Diplôme Nationa...
Rapport (Mémoire de Master) de stage PFE pour  l’obtention du Diplôme Nationa...Rapport (Mémoire de Master) de stage PFE pour  l’obtention du Diplôme Nationa...
Rapport (Mémoire de Master) de stage PFE pour l’obtention du Diplôme Nationa...Mohamed Amine Mahmoudi
 

Tendances (20)

Rapport de projet de fin d’étude
Rapport  de projet de fin d’étudeRapport  de projet de fin d’étude
Rapport de projet de fin d’étude
 
Projet Fin D'étude Application Mobile
Projet Fin D'étude Application MobileProjet Fin D'étude Application Mobile
Projet Fin D'étude Application Mobile
 
Rapport de Stage PFE - Développement d'un Projet ALTEN MAROC Concernant le Sy...
Rapport de Stage PFE - Développement d'un Projet ALTEN MAROC Concernant le Sy...Rapport de Stage PFE - Développement d'un Projet ALTEN MAROC Concernant le Sy...
Rapport de Stage PFE - Développement d'un Projet ALTEN MAROC Concernant le Sy...
 
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
 
iRecruite
iRecruiteiRecruite
iRecruite
 
Reconnaissance faciale
Reconnaissance facialeReconnaissance faciale
Reconnaissance faciale
 
PFE mastère/ Prédiction des émotions pour EEG générées par CVAE et avec LSTM ...
PFE mastère/ Prédiction des émotions pour EEG générées par CVAE et avec LSTM ...PFE mastère/ Prédiction des émotions pour EEG générées par CVAE et avec LSTM ...
PFE mastère/ Prédiction des émotions pour EEG générées par CVAE et avec LSTM ...
 
Rapport du Projet de Fin d'année Génie informatique ENSA AGADIR
Rapport du Projet de Fin d'année Génie informatique ENSA AGADIRRapport du Projet de Fin d'année Génie informatique ENSA AGADIR
Rapport du Projet de Fin d'année Génie informatique ENSA AGADIR
 
Conception et développement d’un Système de réservation en ligne
Conception et développement d’un Système de réservation en ligneConception et développement d’un Système de réservation en ligne
Conception et développement d’un Système de réservation en ligne
 
E-commerce Use case NFE102
E-commerce Use case NFE102E-commerce Use case NFE102
E-commerce Use case NFE102
 
Pour Écrire un Bon Rapport en Informatique
Pour Écrire un Bon Rapport en InformatiquePour Écrire un Bon Rapport en Informatique
Pour Écrire un Bon Rapport en Informatique
 
Présentation du stage echatibi sofian
Présentation du stage echatibi sofianPrésentation du stage echatibi sofian
Présentation du stage echatibi sofian
 
Prez PFE
Prez PFEPrez PFE
Prez PFE
 
Projet réalisé par ameny Khedhira & Arij Mekki
Projet réalisé par  ameny Khedhira & Arij MekkiProjet réalisé par  ameny Khedhira & Arij Mekki
Projet réalisé par ameny Khedhira & Arij Mekki
 
Tp1 - WS avec JAXWS
Tp1 - WS avec JAXWSTp1 - WS avec JAXWS
Tp1 - WS avec JAXWS
 
Traitement des images avec matlab
Traitement des images avec matlabTraitement des images avec matlab
Traitement des images avec matlab
 
Pfe conception et réalisation d'une application de gestion des processus d'ac...
Pfe conception et réalisation d'une application de gestion des processus d'ac...Pfe conception et réalisation d'une application de gestion des processus d'ac...
Pfe conception et réalisation d'une application de gestion des processus d'ac...
 
Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)
 
Rapport (Mémoire de Master) de stage PFE pour l’obtention du Diplôme Nationa...
Rapport (Mémoire de Master) de stage PFE pour  l’obtention du Diplôme Nationa...Rapport (Mémoire de Master) de stage PFE pour  l’obtention du Diplôme Nationa...
Rapport (Mémoire de Master) de stage PFE pour l’obtention du Diplôme Nationa...
 
GEmploi : Smart school timetable management software using RFID technology
GEmploi : Smart school timetable management software using RFID technologyGEmploi : Smart school timetable management software using RFID technology
GEmploi : Smart school timetable management software using RFID technology
 

Similaire à Flutter and ML Kit For Firebase

XebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic Ladeu
XebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic LadeuXebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic Ladeu
XebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic LadeuPublicis Sapient Engineering
 
Memoire de Master 2 realiser par Monsieur Wellove tsiri
Memoire de Master 2 realiser par Monsieur Wellove tsiriMemoire de Master 2 realiser par Monsieur Wellove tsiri
Memoire de Master 2 realiser par Monsieur Wellove tsiritsiriniainaRTN
 
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016Tarik Zakaria Benmerar
 
Responsive design, Canvas et SVG
Responsive design, Canvas et SVGResponsive design, Canvas et SVG
Responsive design, Canvas et SVGChristian SUMBANG
 
La recette graphique
La recette graphiqueLa recette graphique
La recette graphiqueIdean France
 
582 agr-li - interface mobile - classe 1
582   agr-li - interface mobile - classe 1582   agr-li - interface mobile - classe 1
582 agr-li - interface mobile - classe 1Alexandre Paradis
 
Symposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme MeteorSymposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme MeteorArthurMaroulier
 
Web-In 2010: Programmation Native iOS (French)
Web-In 2010: Programmation Native iOS (French)Web-In 2010: Programmation Native iOS (French)
Web-In 2010: Programmation Native iOS (French)Fred Brunel
 
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !Jug summer camp 2017 - Vue.js, même un dev java peut en faire !
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !Bruno Bonnin
 
Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...
Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...
Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...Mohammed JAITI
 
Création de visuels personnalisés avec Power BI Visuals CLI
Création de visuels personnalisés avec Power BI Visuals CLICréation de visuels personnalisés avec Power BI Visuals CLI
Création de visuels personnalisés avec Power BI Visuals CLIDenys Chamberland
 
Apple Watch par Benoit Capallere et Joeffrey Bocquet
Apple Watch par Benoit Capallere et Joeffrey BocquetApple Watch par Benoit Capallere et Joeffrey Bocquet
Apple Watch par Benoit Capallere et Joeffrey BocquetCocoaHeads France
 
P2 éléments graphiques android
P2 éléments graphiques androidP2 éléments graphiques android
P2 éléments graphiques androidLilia Sfaxi
 
Création de visuels personnalisés avec Power BI Visuals CLI
Création de visuels personnalisésavec Power BI Visuals CLICréation de visuels personnalisésavec Power BI Visuals CLI
Création de visuels personnalisés avec Power BI Visuals CLIDenys Chamberland
 
Messages Extensions par Nicolas Fontaine
Messages Extensions par Nicolas FontaineMessages Extensions par Nicolas Fontaine
Messages Extensions par Nicolas FontaineIdean France
 
Exemple d'utilisation de la génération GWT
Exemple d'utilisation de la génération GWTExemple d'utilisation de la génération GWT
Exemple d'utilisation de la génération GWTFrédéric Menou
 

Similaire à Flutter and ML Kit For Firebase (20)

Android201710 avrilcours3
Android201710 avrilcours3Android201710 avrilcours3
Android201710 avrilcours3
 
XebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic Ladeu
XebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic LadeuXebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic Ladeu
XebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic Ladeu
 
Backbonejs presentation
Backbonejs presentationBackbonejs presentation
Backbonejs presentation
 
Memoire de Master 2 realiser par Monsieur Wellove tsiri
Memoire de Master 2 realiser par Monsieur Wellove tsiriMemoire de Master 2 realiser par Monsieur Wellove tsiri
Memoire de Master 2 realiser par Monsieur Wellove tsiri
 
5.ateliers avancés
5.ateliers avancés5.ateliers avancés
5.ateliers avancés
 
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016
Web Components et Polymer 2 - GDG Algiers DevFest 2016 - 3 Décembre 2016
 
Responsive design, Canvas et SVG
Responsive design, Canvas et SVGResponsive design, Canvas et SVG
Responsive design, Canvas et SVG
 
La recette graphique
La recette graphiqueLa recette graphique
La recette graphique
 
582 agr-li - interface mobile - classe 1
582   agr-li - interface mobile - classe 1582   agr-li - interface mobile - classe 1
582 agr-li - interface mobile - classe 1
 
Symposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme MeteorSymposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme Meteor
 
Web-In 2010: Programmation Native iOS (French)
Web-In 2010: Programmation Native iOS (French)Web-In 2010: Programmation Native iOS (French)
Web-In 2010: Programmation Native iOS (French)
 
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !Jug summer camp 2017 - Vue.js, même un dev java peut en faire !
Jug summer camp 2017 - Vue.js, même un dev java peut en faire !
 
Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...
Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...
Rapport de mon First Projet Web à l'Ecole Supérieure de Technologie de SAFI -...
 
Création de visuels personnalisés avec Power BI Visuals CLI
Création de visuels personnalisés avec Power BI Visuals CLICréation de visuels personnalisés avec Power BI Visuals CLI
Création de visuels personnalisés avec Power BI Visuals CLI
 
Apple Watch par Benoit Capallere et Joeffrey Bocquet
Apple Watch par Benoit Capallere et Joeffrey BocquetApple Watch par Benoit Capallere et Joeffrey Bocquet
Apple Watch par Benoit Capallere et Joeffrey Bocquet
 
P2 éléments graphiques android
P2 éléments graphiques androidP2 éléments graphiques android
P2 éléments graphiques android
 
Création de visuels personnalisés avec Power BI Visuals CLI
Création de visuels personnalisésavec Power BI Visuals CLICréation de visuels personnalisésavec Power BI Visuals CLI
Création de visuels personnalisés avec Power BI Visuals CLI
 
Html 5(1)
Html 5(1)Html 5(1)
Html 5(1)
 
Messages Extensions par Nicolas Fontaine
Messages Extensions par Nicolas FontaineMessages Extensions par Nicolas Fontaine
Messages Extensions par Nicolas Fontaine
 
Exemple d'utilisation de la génération GWT
Exemple d'utilisation de la génération GWTExemple d'utilisation de la génération GWT
Exemple d'utilisation de la génération GWT
 

Dernier

Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptxTxaruka
 
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...M2i Formation
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne FontaineTxaruka
 
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptMécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptssusercbaa22
 
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxSUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxssuserbd075f
 
présentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteurprésentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteurdinaelchaine
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprisesMajdaKtiri2
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptxSAID MASHATE
 
Présentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxPrésentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxpopzair
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.Txaruka
 
Grammaire pour les élèves de la 6ème.doc
Grammaire pour les élèves de la  6ème.docGrammaire pour les élèves de la  6ème.doc
Grammaire pour les élèves de la 6ème.docKarimKhrifech
 
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxApproche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxssusercbaa22
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film françaisTxaruka
 
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdfMICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdfssuser40e112
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...Faga1939
 
systeme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertsysteme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertChristianMbip
 
presentation l'interactionnisme symbolique finale.pptx
presentation l'interactionnisme symbolique  finale.pptxpresentation l'interactionnisme symbolique  finale.pptx
presentation l'interactionnisme symbolique finale.pptxMalikaIdseaid1
 
MaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptMaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptssusercbaa22
 

Dernier (20)

Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptx
 
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
Formation M2i - Intelligence Artificielle Comment booster votre productivité ...
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne Fontaine
 
Pâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie PelletierPâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie Pelletier
 
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.pptMécanique Automobile LE TURBOCOMPRESSEUR.ppt
Mécanique Automobile LE TURBOCOMPRESSEUR.ppt
 
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptxSUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
SUPPORT DE SUR COURS_GOUVERNANCE_SI_M2.pptx
 
présentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteurprésentation sur l'échafaudage dans des travaux en hauteur
présentation sur l'échafaudage dans des travaux en hauteur
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprises
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
 
Présentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxPrésentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptx
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.
 
Grammaire pour les élèves de la 6ème.doc
Grammaire pour les élèves de la  6ème.docGrammaire pour les élèves de la  6ème.doc
Grammaire pour les élèves de la 6ème.doc
 
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxApproche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film français
 
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdfMICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
MICROBIOLOGIE ENDODONTIQUE english and frensh 25 nov 2020.pdf
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
 
systeme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertsysteme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expert
 
Evaluación Alumnos de Ecole Victor Hugo
Evaluación Alumnos de Ecole  Victor HugoEvaluación Alumnos de Ecole  Victor Hugo
Evaluación Alumnos de Ecole Victor Hugo
 
presentation l'interactionnisme symbolique finale.pptx
presentation l'interactionnisme symbolique  finale.pptxpresentation l'interactionnisme symbolique  finale.pptx
presentation l'interactionnisme symbolique finale.pptx
 
MaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptMaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.ppt
 

Flutter and ML Kit For Firebase

  • 1.
  • 3.
  • 4. Qu’est ce que Flutter ? •Flutter est un Framework de développement d’applications mobiles •Ce Framework est proposé en Open Source par Google •Il propose un moyen unifié de développer des applications Android et iOS à partir d’un code commun •Il permet également de simplifier la gestion des compatibilités entre versions d’OS différentes.
  • 5. C’est quoi Firebase ? Firebase est essentiellement une plate-forme de développement d'applications mobiles et Web utilisée pour aider à créer des applications de haute qualité
  • 7. Mais C’est quoi le ML Kit ? ML Kit est une collection de puissantes API d'apprentissage automatique mises à la disposition du public par Google à IO 18 sous la marque Firebase. .
  • 9. Reconnaissance optique de caractères C’est une api qui permet de détecter du texte dans les images et l'extraire
  • 10. Détection des visages C’est une api qui permet de détecter les visages et les repères faciaux à l'aide de la fonctionnalité Contours de visage
  • 11. Détection d'objets et suivi C’est une api qui permet de détecter, suivre et classer des objets dans des images statiques ou en direct de l'appareil photo
  • 12. Ajout de libellés à des images C’est une api qui permet d’identifier des objets, des lieux, des activités, des espèces animales, des produits et plus encore
  • 13. Auto ML Vision Edge C’est une api qui vous permet d’entraîner et publiez vos propres modèles de classification d'images.
  • 14. Lecture de codes-barres C’est une api qui vous permet d’ analyser et traitez des codes- barres
  • 15. Reconnaissance de points de repère Identifiez les points de repère populaires dans une image
  • 16. Traduction sur l'appareil Traduire du texte d'une langue à une autre
  • 17. Réponse suggérée Générez des réponses par SMS en fonction des messages précédents
  • 18. Intégration du ML Kit de Firebase à une application Flutter
  • 20. Plan de travail ● Obtenir une image et la convertir en un format pouvant être compris par notre ML Kit ● Envoyez l'image au détecteur et lui demander de scanner l'image pour rechercher des visages possibles. ● Récupérer les visages trouvés et les transmettre au CustomPainter. ● Autorisez le CustomPainter à obtenir les coordonnées des faces, puis les utiliser pour dessiner des effets.
  • 22. Etape 1: Projet Firebase et dépendances Créer un projet flutter Créer un projet Firebase et ajouter une application au projet (voir la documentation ) Ajouter les dépendances image_picker et firebase_ml_vision Ajouter également la dépendance du modèle de visage dans le fichier build.gradle niveau application: implementation ‘com.google.firebase:firebase-ml-vision-face-model:19.0.0’
  • 23. Etape 2: Récupération de l’image final imageFile = await ImagePicker.pickImage(source:ImageSource.gallery); seState((){ isLoading = true; });
  • 24. Etape 3: Traitement de l’image final data = await file.readAsBytes(); await decodeImageFromList(data).then( (value) => setState(() { _image = value; isLoading = false; }), );
  • 25. Etape 4: Détection des visages final faceDetector = FirebaseVision.instance.faceDetector(); List<Face> faces = await faceDetector.processImage(image);
  • 26. Etape 5: Le CustomPainter
  • 27. class FacePainter extends CustomPainter { final ui.Image image; final List<Face> faces; final List<Rect> rects = []; FacePainter(this.image, this.faces) { for (var i = 0; i < faces.length; i++) { rects.add(faces[i].boundingBox); } } @override void paint(ui.Canvas canvas, ui.Size size) { final Paint paint = Paint() ..style = PaintingStyle.stroke ..strokeWidth = 15.0 ..color = Colors.yellow; canvas.drawImage(image, Offset.zero, Paint()); for (var i = 0; i < faces.length; i++) { canvas.drawRect(rects[i], paint); } } @override bool shouldRepaint(FacePainter oldDelegate) { return image != oldDelegate.image || faces != oldDelegate.faces; } }
  • 28. class FacePainter extends CustomPainter { final ui.Image image; final List<Face> faces; final List<Rect> rects = []; FacePainter(this.image, this.faces) { for (var i = 0; i < faces.length; i++) { rects.add(faces[i].boundingBox); } } @override void paint(ui.Canvas canvas, ui.Size size) { final Paint paint = Paint() ..style = PaintingStyle.stroke ..strokeWidth = 15.0 ..color = Colors.yellow; canvas.drawImage(image, Offset.zero, Paint()); for (var i = 0; i < faces.length; i++) { canvas.drawRect(rects[i], paint); } } @override bool shouldRepaint(FacePainter oldDelegate) { return image != oldDelegate.image || faces != oldDelegate.faces; } }
  • 29. class FacePainter extends CustomPainter { final ui.Image image; final List<Face> faces; final List<Rect> rects = []; FacePainter(this.image, this.faces) { for (var i = 0; i < faces.length; i++) { rects.add(faces[i].boundingBox); } } @override void paint(ui.Canvas canvas, ui.Size size) { final Paint paint = Paint() ..style = PaintingStyle.stroke ..strokeWidth = 15.0 ..color = Colors.yellow; canvas.drawImage(image, Offset.zero, Paint()); for (var i = 0; i < faces.length; i++) { canvas.drawRect(rects[i], paint); } } @override bool shouldRepaint(FacePainter oldDelegate) { return image != oldDelegate.image || faces != oldDelegate.faces; } }
  • 30. class FacePainter extends CustomPainter { final ui.Image image; final List<Face> faces; final List<Rect> rects = []; FacePainter(this.image, this.faces) { for (var i = 0; i < faces.length; i++) { rects.add(faces[i].boundingBox); } } @override void paint(ui.Canvas canvas, ui.Size size) { final Paint paint = Paint() ..style = PaintingStyle.stroke ..strokeWidth = 15.0 ..color = Colors.yellow; canvas.drawImage(image, Offset.zero, Paint()); for (var i = 0; i < faces.length; i++) { canvas.drawRect(rects[i], paint); } } @override bool shouldRepaint(FacePainter oldDelegate) { return image != oldDelegate.image || faces != oldDelegate.faces; } }
  • 31. class FacePainter extends CustomPainter { final ui.Image image; final List<Face> faces; final List<Rect> rects = []; FacePainter(this.image, this.faces) { for (var i = 0; i < faces.length; i++) { rects.add(faces[i].boundingBox); } } @override void paint(ui.Canvas canvas, ui.Size size) { final Paint paint = Paint() ..style = PaintingStyle.stroke ..strokeWidth = 15.0 ..color = Colors.yellow; canvas.drawImage(image, Offset.zero, Paint()); for (var i = 0; i < faces.length; i++) { canvas.drawRect(rects[i], paint); } } @override bool shouldRepaint(FacePainter oldDelegate) { return image != oldDelegate.image || faces != oldDelegate.faces; } }
  • 33. @override Widget build(BuildContext context) { return Scaffold( body: isLoading ? Center(child: CircularProgressIndicator()) : (_imageFile == null) ? Center(child: Text(‘Aucune image sélectionné')) : Center( child: FittedBox( child: SizedBox( width: _image.width.toDouble(), height: _image.height.toDouble(), child: CustomPaint( painter: FacePainter(_image, _faces), ), ), ), ), floatingActionButton: FloatingActionButton( onPressed: _getImageAndDetectFaces, tooltip: ‘Sélect. Image', child: Icon(Icons.add_a_photo), ), ); }
  • 34. @override Widget build(BuildContext context) { return Scaffold( body: isLoading ? Center(child: CircularProgressIndicator()) : (_imageFile == null) ? Center(child: Text(‘Aucune image sélectionné')) : Center( child: FittedBox( child: SizedBox( width: _image.width.toDouble(), height: _image.height.toDouble(), child: CustomPaint( painter: FacePainter(_image, _faces), ), ), ), ), floatingActionButton: FloatingActionButton( onPressed: _getImageAndDetectFaces, tooltip: ‘Sélect. Image', child: Icon(Icons.add_a_photo), ), ); }
  • 35. @override Widget build(BuildContext context) { return Scaffold( body: isLoading ? Center(child: CircularProgressIndicator()) : (_imageFile == null) ? Center(child: Text(‘Aucune image sélectionné')) : Center( child: FittedBox( child: SizedBox( width: _image.width.toDouble(), height: _image.height.toDouble(), child: CustomPaint( painter: FacePainter(_image, _faces), ), ), ), ), floatingActionButton: FloatingActionButton( onPressed: _getImageAndDetectFaces, tooltip: ‘Sélect. Image', child: Icon(Icons.add_a_photo), ), ); }
  • 36. @override Widget build(BuildContext context) { return Scaffold( body: isLoading ? Center(child: CircularProgressIndicator()) : (_imageFile == null) ? Center(child: Text(‘Aucune image sélectionné')) : Center( child: FittedBox( child: SizedBox( width: _image.width.toDouble(), height: _image.height.toDouble(), child: CustomPaint( painter: FacePainter(_image, _faces), ), ), ), ), floatingActionButton: FloatingActionButton( onPressed: _getImageAndDetectFaces, tooltip: ‘Sélect. Image', child: Icon(Icons.add_a_photo), ), ); }
  • 37. @override Widget build(BuildContext context) { return Scaffold( body: isLoading ? Center(child: CircularProgressIndicator()) : (_imageFile == null) ? Center(child: Text(‘Aucune image sélectionné')) : Center( child: FittedBox( child: SizedBox( width: _image.width.toDouble(), height: _image.height.toDouble(), child: CustomPaint( painter: FacePainter(_image, _faces), ), ), ), ), floatingActionButton: FloatingActionButton( onPressed: _getImageAndDetectFaces, tooltip: ‘Sélect. Image', child: Icon(Icons.add_a_photo), ), ); }
  • 38. @override Widget build(BuildContext context) { return Scaffold( body: isLoading ? Center(child: CircularProgressIndicator()) : (_imageFile == null) ? Center(child: Text(‘Aucune image sélectionné')) : Center( child: FittedBox( child: SizedBox( width: _image.width.toDouble(), height: _image.height.toDouble(), child: CustomPaint( painter: FacePainter(_image, _faces), ), ), ), ), floatingActionButton: FloatingActionButton( onPressed: _getImageAndDetectFaces, tooltip: ‘Sélect. Image', child: Icon(Icons.add_a_photo), ), ); }