SlideShare uma empresa Scribd logo
1 de 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

Mais conteúdo relacionado

Mais procurados

Presentation pfe Système de gestion des rendez-vous médicaux
Presentation pfe Système de gestion des rendez-vous médicauxPresentation pfe Système de gestion des rendez-vous médicaux
Presentation pfe Système de gestion des rendez-vous médicauxFehmi Arbi
 
Ma présentation PFE : Application Android & Site Web
Ma présentation PFE : Application Android & Site WebMa présentation PFE : Application Android & Site Web
Ma présentation PFE : Application Android & Site WebHarrathi Mohamed
 
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...MOHAMMED MOURADI
 
A la découverte de vue.js
A la découverte de vue.jsA la découverte de vue.js
A la découverte de vue.jsBruno Bonnin
 
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2Sofien Benrhouma
 
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...ENSET, Université Hassan II Casablanca
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UMLAmir Souissi
 
Correction de td poo n2
Correction de td poo n2Correction de td poo n2
Correction de td poo n2yassine kchiri
 
gestion de magasin vente matériels informatique
gestion de magasin vente matériels informatiquegestion de magasin vente matériels informatique
gestion de magasin vente matériels informatiqueOussama Yoshiki
 
Fondamentaux java
Fondamentaux javaFondamentaux java
Fondamentaux javaInes Ouaz
 
Deep Learning : Application à la reconnaissance d’objets de classes multiples...
Deep Learning : Application à la reconnaissance d’objets de classes multiples...Deep Learning : Application à la reconnaissance d’objets de classes multiples...
Deep Learning : Application à la reconnaissance d’objets de classes multiples...Haytam EL YOUSSFI
 
Rapport de projet de conception et de développement
Rapport de projet de conception et de développementRapport de projet de conception et de développement
Rapport de projet de conception et de développementDonia Hammami
 
Rapport projet: relisation d'une app desktop
Rapport projet: relisation d'une app desktop Rapport projet: relisation d'une app desktop
Rapport projet: relisation d'une app desktop amat samiâ boualil
 

Mais procurados (20)

Presentation pfe Système de gestion des rendez-vous médicaux
Presentation pfe Système de gestion des rendez-vous médicauxPresentation pfe Système de gestion des rendez-vous médicaux
Presentation pfe Système de gestion des rendez-vous médicaux
 
Ma présentation PFE : Application Android & Site Web
Ma présentation PFE : Application Android & Site WebMa présentation PFE : Application Android & Site Web
Ma présentation PFE : Application Android & Site Web
 
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
 
A la découverte de vue.js
A la découverte de vue.jsA la découverte de vue.js
A la découverte de vue.js
 
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
Rapport Projet De Fin D'étude Développent d'une application web avec Symfony2
 
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
Mise en oeuvre des Frameworks de Machines et Deep Learning pour les Applicati...
 
Support Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFISupport Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFI
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UML
 
Correction de td poo n2
Correction de td poo n2Correction de td poo n2
Correction de td poo n2
 
Support de cours Spring M.youssfi
Support de cours Spring  M.youssfiSupport de cours Spring  M.youssfi
Support de cours Spring M.youssfi
 
Spring security
Spring securitySpring security
Spring security
 
Formation wordpress
Formation wordpressFormation wordpress
Formation wordpress
 
gestion de magasin vente matériels informatique
gestion de magasin vente matériels informatiquegestion de magasin vente matériels informatique
gestion de magasin vente matériels informatique
 
Fondamentaux java
Fondamentaux javaFondamentaux java
Fondamentaux java
 
Deep Learning : Application à la reconnaissance d’objets de classes multiples...
Deep Learning : Application à la reconnaissance d’objets de classes multiples...Deep Learning : Application à la reconnaissance d’objets de classes multiples...
Deep Learning : Application à la reconnaissance d’objets de classes multiples...
 
Introduction XSS
Introduction XSSIntroduction XSS
Introduction XSS
 
Rapport de projet de conception et de développement
Rapport de projet de conception et de développementRapport de projet de conception et de développement
Rapport de projet de conception et de développement
 
Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4
 
Support cours angular
Support cours angularSupport cours angular
Support cours angular
 
Rapport projet: relisation d'une app desktop
Rapport projet: relisation d'une app desktop Rapport projet: relisation d'une app desktop
Rapport projet: relisation d'une app desktop
 

Semelhante a 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
 

Semelhante a 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
 
Chapitre 4 android
Chapitre 4 androidChapitre 4 android
Chapitre 4 android
 
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
 

Último

COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfabatanebureau
 
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
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaireTxaruka
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...Nguyen Thanh Tu Collection
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film françaisTxaruka
 
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
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxRayane619450
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprisesMajdaKtiri2
 
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
 
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...Faga1939
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfachrafbrahimi1
 
Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfssuserc72852
 

Último (13)

COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
 
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
 
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
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaire
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film français
 
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
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptx
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprises
 
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.
 
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdf
 
Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdf
 

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), ), ); }