Le traitement de l’image et la reconnaissance visuelle sont des domaines qui ont connu une croissance rapide ces dernières années. Les outils de traitement d’image et de reconnaissance visuelle sont devenus indispensables pour les applications d’intelligence artificielle et de vision par ordinateur. Dans cet article, nous allons examiner les outils de traitement d’image et de reconnaissance visuelle disponibles dans le cadre du projet Processing. Nous verrons comment ces outils peuvent être utilisés pour créer des applications d’intelligence artificielle et de vision par ordinateur. Nous examinerons également les avantages et les inconvénients de ces outils et comment ils peuvent être utilisés pour améliorer les performances des applications.
Reconnaissance visuelle et suivi d’objet avec Processing


1. Ressources
1.1 L’ESSENTIEL :
Ma librairie javacvPro : implémentation pour Processing de la librairie openCV 2.3.x (utilise javacv) NOUVEAU!
1.2 Pour mémoire :
javacv : implémentation java de la librairie openCV
- Discussion de l’intérêt de javacv versus librairie OpenCV pour Processing
- Installation de javacv pour utilisation avec Processing
librairie openCV « hypermedia » (capture et reconnaissance visuelle) – obsolète : voir à présent Javacvpro –
- Installer la libairie de reconnaissance visuelle openCV pour Processing
- Ma référence pour la librairie OpenCV
- pleins de tutos intéressants : http://blog.damiles.com/?category_name=opencv-tutorials
2. Codes Processing utilisant les fonctions de ma librairie Processing javacvPro (OpenCV 2.3.x)

2.1 Présentation
- La dernière version de ma librairie JavacvPro est ici : Ma librairie OpenCV : la librairie javacvPro. Cette librairie implémente dès à présent près de 70 fonctions opérationnelles et je l’enrichis progressivement.
- Installation : Voir : Ma librairie OpenCV : la librairie javacvPro.
2.2 Exemples d’utilisation de base.
2.3 Traitement d’image « statique » : Les programmes d’exemple de la référence.
Traitement d’image de base |
Traitement d’image avancé Traitement entre 2 images |
Extraction de contours Détection objet/visage |
Détection de formes Analyse avancée de formes |
2.4 Traitement d’image en direct d’un ou plusieurs flux vidéos issus d’une ou plusieurs webcams avec la librairie GSVideo (capture vidéo) et ma librairie OpenCV javacvPro pour Processing (reconnaissance visuelle)
Traitements simples
Reconnaissance et suivi de visage
Suivi d’objet coloré
Détection et suivi d’une balle colorée
- Sur un flux vidéo
- Capture d’un flux vidéo avec GSVideo et reconnaissance de balle par traitement d’image et reconnaissance visuelle avec ma librairie JavacvPro (0penCV sous Processing) (dans l’espace couleur RGB)
- Suivi de balle avec ma librairie JavacvPro (0penCV sous Processing) : réalisation d’un « Joystick » virtuel (RGB)
- Suivi de balle colorée : réalisation d’un clavier virtuel (RGB)
- Sur plusieurs flux vidéos
Détection de plusieurs balles colorées
- Comptage de balles de la même couleur avec annonce vocale du résultat? Ubuntu (RGB)
- Détection et comptage de balles de couleurs différentes avec annonce vocale du résultat? Ubuntu (RGB)
Divers
- Test de détection d’une balle colorée basé sur une analyse colorimétrique dans l’espace HSV
Codes de Mécatronique utilisant la reconnaissance visuelle
Tests techniques
1 tourelle Pan
-
- Suivi de balle par une webcam fixée sur une tourelle pan contrôlée par 1 servomoteur ( rapide – utilise librairie GSVideo pour la capture video et reconnaissance visuelle par ma librairie JavacvPro (0penCV sous Processing) )
- Suivi de marker ARToolkit miniature par une tourelle Pan
2 tourelles Pan (2 servomoteurs)
-
- Suivi de balle colorée par 2 tourelles Pan
1 tourelle Pan-Tilt (2 servomoteurs)
-
- Suivi de balle par une webcam fixée sur une tourelle pan/tilt contrôlée par 2 servomoteur? ( rapide – utilise librairie GSVideo pour la capture video et reconnaissance visuelle par ma librairie JavacvPro (0penCV sous Processing) )
- Suivi de marker ARToolkit miniature par une tourelle Pan/Tilt
- Tracking de visage avec une tourelle pan-tilt par reconnaissance visuelle de visage
2 tourelles Pan-Tilt (4 servomoteurs)
-
- Vision binoculaire : Suivi de balle par 2 webcams fixées chacune sur une tourelle pan contrôlée chacune par 1 servomoteur? (rapide – utilise librairie GSVideo pour la capture video et reconnaissance visuelle par ma librairie JavacvPro (0penCV sous Processing) )
- Suivi de balle colorée par 2 tourelles Pan/Tilt
Bras robotisé
Reconnaissance et suivi d’objet
Recherche de concordance entre une image objet et une image scène
- Test de l’algorithme SURF sur un flux vidéo
Voir également : ARToolkit : réalité augmentée et 3D positionning avec Processing
Techniques de soustraction du fond
- Voir aussi : Stratégies pour la soustraction du fond
Approche simplifiée
- JavacvPro : Soustraction du fond sur un flux vidéo webcam par différence absolue
- Soustraction du fond d’un flux vidéo par différence absolue avec mémorisation de n frames du fond
- Soustraction du fond d’un flux vidéo par différence absolue frame à frame (détection de mouvement)
Approche avancée
- Soustraction du fond par algorithme opencCV « Mixure Of Gaussian » (MOG)
- Soustraction du fond par algorithme opencCV « Mixure Of Gaussian » version2 (MOG2)
Détection et suivi de la main et des doigts
Détection de la main et des doigts
- Sur fond uni :
- Processing GSVideo + openCV avec javacvPro : Capture d’un flux webcam par GSVideo et détection de la forme de la main sur un fond uni
- Processing GSVideo + openCV avec javacvPro : Capture d’un flux webcam par GSVideo, détection de la forme de la main sur un fond uni et affichage des « creux » (convexity defect) du contour. TOP!
- Processing GSVideo + openCV avec javacvPro : Capture d’un flux webcam par GSVideo, détection de la forme de la main sur un fond uni et sélection des « creux » significatifs (convexity defects) TOP!
- Processing GSVideo + openCV avec javacvPro : Capture d’un flux webcam par GSVideo, détection de la forme de la main sur un fond uni, sélection des « creux » significatifs (convexity defects), analyse de la position des doigts et annonce vocale du chiffre correspondant TOP!
- Sur fond quelconque :
- Détection de la main par soustraction d’un fond varié
- Détection de la main par soustraction « frame à frame » (Détection de mouvement)
- Par segmentation de la peau :
- Détection de la main par segmentation de la peau (résultat médiocre)
Approche simplifiée de la détection des doigts
- Détection simplifiée de l’index tendu, de l’auriculaire et du pouce ouverts?
- « Souris virtuelle » à l’aide d’une simple webcam et d’une feuille de papier. ( utilise classe Java Robot)
Suivi de la main et des doigts
- Clavier numérique virtuel (utilise soustraction de fond)
- Détection et suivi de la position des 5 doigts de la main (détection de contour et analyse de courbure de forme)
- Application « paint » contrôlée par la main
- Processing GSVideo + openCV avec javacvPro : Capture d’un flux webcam par GSVideo, détection de la forme de la main sur un fond uni, sélection des « creux » significatifs (convexity defects), analyse de la position des doigts et annonce vocale du chiffre correspondant TOP!
- Détection de forme de lettres et annonce vocale du résultat
Divers
- Détection main par IR
- Suivi mouvement oculaire
- Suivi pointeur laser
- Détection / suivi des carreaux de carrelage (sol)
- Détection de portes
PAGES D’ARCHIVES
3. Codes de Mécatronique utilisant la reconnaissance visuelle
1 tourelle Pan-Tilt
-
- Suivi de balle par une webcam fixée sur une tourelle pan contrôlée par 1 servomoteur V1 (utilise la librairie openCV pour la capture vidéo et la reconnaissance visuelle)
- Suivi de balle par une webcam fixée sur une tourelle pan contrôlée par 1 servomoteur V2 (beaucoup plus rapide – utilise librairie GSVideo pour la capture video et reconnaissance visuelle par librairie openCV)
2 tourelles Pan-Tilt
-
- Vision binoculaire : Suivi de balle par 2 webcams fixées chacune sur une tourelle pan contrôlée chacune par 1 servomoteur (rapide – utilise librairie GSVideo pour la capture video et reconnaissance visuelle par librairie openCV)
Bras robotisé
4. Avec la librairie OpenCV « hypermedia » pour Processing seule (capture vidéo + reconnaissance visuelle)
- Suivi de balle avec OpenCV (RGB)
- Suivi de balle avec OpenCV (version 2) avec amélioration de la détection de la forme de la balle (RGB)
- Suivi de balle avec OpenCV et calcul des coordonnées du centre de la balle (RGB)
- Suivi de balle avec OpenCV : réalisation d’un « Joystick » virtuel? (RGB)
5. Avec librairie GSVideo (capture vidéo) et librairie OpenCV « hypermedia » pour Processing (reconnaissance visuelle)
5.1 Suivi d’objet coloré
Détection et suivi d’une balle colorée
- Capture d’un flux vidéo avec GSVideo et reconnaissance de balle par traitement d’image et reconnaissance visuelle avec openCV (dans l’espace couleur RGB)
- Capture d’un triple flux vidéo (webcams x3) avec GSVideo et reconnaissance de de balle sur chaque flux vidéo par traitement d’image et reconnaissance visuelle avec openCV (RGB)
- Suivi de balle avec OpenCV : réalisation d’un « Joystick » virtuel? (RGB)
- Suivi de balle colorée : réalisation d’un clavier virtuel (RGB)
Détection de plusieurs balles colorées
- Comptage de balles de la même couleur avec annonce vocale du résultat Ubuntu (RGB)
- Détection et comptage de balles de couleurs différentes avec annonce vocale du résultat Ubuntu (RGB)
Divers
- Test de détection d’une balle colorée basé sur une analyse colorimétrique dans l’espace HSV
5.2 Reconnaissance et suivi de visage
- Capture d’un flux vidéo avec GSVideo et test simple reconnaissance de visage par traitement d’image avec openCV
- Tracking de visage avec une tourelle pan-tilt par reconnaissance visuelle de visage
5.3 Détection et suivi de la main et des doigts
Détection de la main et des doigts
- Processing GSVideo + openCV : Capture d’un flux webcam par GSVideo et détection de la forme de la main sur un fond uni (avec traçage progressif du contour)
- Détection de la main par soustraction du fond
- Détection de la main par soustraction « frame à frame » (Détection de mouvement)
- Détection de la main par segmentation de la peau (résultat médiocre)
Approche simplifiée de la détection des doigts
- Détection simplifiée de l’index tendu, de l’auriculaire et du pouce ouverts
- « Souris virtuelle » à l’aide d’une simple webcam et d’une feuille de papier. ( utilise classe Java Robot)
Suivi de la main et des doigts
- Clavier numérique virtuel (utilise soustraction de fond)
- Détection et suivi de la position des 5 doigts de la main (détection de contour et analyse de courbure de forme)
- Application « paint » contrôlée par la main
- Analyse du positionnement des doigts et annonce vocale du résultat numérique correspondant
- Détection de forme de lettres et annonce vocale du résultat
5.4 Divers
- Détection main par IR
- Suivi mouvement oculaire
- Suivi pointeur laser
- Détection / suivi des carreaux de carrelage (sol)
- Détection de portes
6. Codes Processing utilisant les fonctions javacv « in-line »
6.1 Les objets fondamentaux « statiques » d’OpenCV
Objet IplIMage (conteneur d’image natif OpenCV)
- Utiliser l’objet IplImage (conteneur d’image OpenCV) dans Processing
- Redimensionner un objet IplImage (conteneur d’image OpenCV) dans Processing
- Charger la même valeur dans tous les pixels un objet IplImage (conteneur d’image OpenCV) dans Processing
- Convertir un objet IplImage 16SC3 (16 bits signés – 3 canaux) en un objet IplImage 8UC3 (8 bits non signé – 3 canaux)
- Multiplier tous les pixels d’un objet IplImage 8UC3 (8 bits non signé – 3 canal) par une valeur (idem ou différente pour les différents canaux)
- Convertir un objet IplImage RGB en un IplImage en niveaux de gris
- Appliquer un seuillage sur un IplImage
- Extraire les canaux RGB d’un IplImage et reconstruire l’IplImage à partir des canaux RGB indivuels
- Récupérer les valeurs d’un pixel d’un IplImage
- Modifier la valeur d’un pixel d’un IplImage
- Inverser les pixels d’une IplImage
- Récupérer un IplImage dans un ByteBuffer
- Transférer un IplImage vers un PImage
- Inversement, transférer un PImage vers un IplImage
- Test des temps de transfert d’un IplImage dans un PImage et vice-versa.
- Conversion d’un IplImage d’un type dans un autre type.
Filtrage d’image simples
Objet CvMat (Matrice 1 à n Dimensions).
- Déclarer et initialiser un objet CvMat
- CvMat et utilisation d’une Look-Up Table (LUT)
- CvMat et utilisation d’un noyau de convolution personnalisé
- CvMat et utilisation d’un noyau de convolution : réalisation d’un filtre de Sobel
6.2 Les objets fondamentaux « dynamiques » d’OpenCV
Détection de contours
- Détecter les contours d’une image (cvFindContours puis cvDrawContours)
- Récupérer les données du contour à partir du CvSeq
6.3 Techniques et stratégies utiles
Techniques de soustraction du fond
Approche simplifiée
Approche plus avancée
Articles similaires:
- http://web.archive.org/web/20210804223007/http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.OUTILSJavacvCodesProcessingJavacvPro
- http://web.archive.org/web/20210804223007/http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.OutilsProcessingVideo
- GLAP-Box : Programme de test : Capture d’un flux vidéo dans un programme Processing à l’aide de la librairie GSVideo et détection +suivi d’un objet coloré (balle orangée) en direct à l’aide de la librairie openCV.
- Javacv : librairie java implémentant la librairie opensource C/C++ OpenCV.
- GLAP-Box : Programme de test : Capture d’un flux vidéo dans un programme Processing à l’aide de la librairie GSVideo et traitement d’image en direct à l’aide de la librairie openCV.
Articles Liés
- http://web.archive.org/web/20210804223007/http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoExpertCapteursComplexesDS18B20
L'utilisation des capteurs complexes est devenue une partie essentielle de la technologie moderne. Les capteurs…
- http://web.archive.org/web/20210804223007/http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.NONPROG
RAMMABLE Les systèmes non programmables sont des systèmes qui ne nécessitent pas de programmation pour…
- http://web.archive.org/web/20210804223007/http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.MATERIELCapteurAnalogiqueSonDFRobot
Les capteurs analogiques sont des composants essentiels pour les systèmes électroniques. Ils sont utilisés pour…