JavaCV est une librairie Java qui permet aux développeurs de créer des applications d’intelligence artificielle et de vision par ordinateur en utilisant la librairie open source C/C++ OpenCV. Cette librairie offre aux développeurs une variété d’outils et de fonctionnalités pour créer des applications d’intelligence artificielle et de vision par ordinateur. Elle permet aux développeurs de créer des applications qui peuvent analyser des images et des vidéos, détecter des objets et des visages, et même reconnaître des mouvements. JavaCV est une librairie puissante et facile à utiliser qui peut aider les développeurs à créer des applications d’intelligence artificielle et de vision par ordinateur plus efficaces et plus robustes.
Javacv : librairie java implémentant la librairie opensource C/C++ OpenCV.
Introduction
- Cette librairie est une implémentation en Java de la librairie OpenCV. Elle permet ainsi de réaliser en Java du traitement d’image avancé et dispose de plusieurs milliers de fonctions dédiées. Les utilisations typiques possibles :
- traitements d’image de base (flou, seuillage, filtre Guaussien, Sobel)
- algorithmes d’analyse d’image (reconnaissance de lignes, de cercle)
- détection de contour
- reconnaissance et suivi d’objet
- …
- Je présente cette librairie , car elle est utilisable telle quelle sous Processing, et permet donc de disposer dans Processing de toutes les fonctions de la librairie OpenCV !! Personnellement, je trouve cette librairie tout simplement « géniale » en ce sens qu’elle rend le développement à partir de centaines de fonctions natives OpenCV très simple, tout comme on écrirait un programme Processing classique. Il suffit d’écrire son code, lancer l’exécution, voir le résultat, modifier le code, etc… Très simple et très souple ! Certes, cette librairie ne dispense pas de la prise en main des fonctions natives OpenCV, mais elle en permet une mise en oeuvre particulièrement simplifiée et efficace.
- J’ai par ailleurs écrit une librairie pour Processing, la librairie javacvPro, basée sur les fonctions de la librairie javacvPro qui reprend les plupart des fonctions de la librairie existante OpenCv pour Processing (voir : http://ubaa.net/shared/processing/opencv/) tout en y ajoutant d’autres fonctions utiles, notamment filtre de détection de contour (Sobel, Canny), analyse de contour, détection de formes (Hough), etc..
Liens essentiels
- Présentation wikipédia d’OpenCV : http://fr.wikipedia.org/wiki/OpenCV
- Le site officiel : http://opencv.willowgarage.com/wiki/ (willowgarage est une société de robotique californienne qui maintient la librairie depuis 2010)
- La documentation de la 2.3.1 : http://opencv.itseez.com/ (Itseez est une startup qui supporte OpenCV)
- La librairie javacv, implémentation Java de la librairie openCV : http://code.google.com/p/javacv/ Cette librairie implémente en langage Java l’ensemble des fonctions et objets de la librairie openCV (écrite en C/C++) en langage Java. Cette librairie permet d’accéder relativement simplement aux fonctions d’openCV directement dans Processing notamment.
- La librairie javacv repose sur la librairie javacpp du même auteur : http://code.google.com/p/javacpp/ Cette librairie fait le « pont » entre le langage C/C++ dans lequel est écrite la librairie openCV et le langage Java (dans lequel est écrit l’interface Processing notamment). Cette librairie est un véritable « chaînon » entre ces mondes et est quasiment « magique ».
- Au final, on accède ainsi en java et surtout dans Processing, à plusieurs milliers de fonctions et algorithmes avancés, rapides, pour réaliser du traitement d’image élaboré.
Installation et utilisation de javacv
Installation de javacv dans Processing
Utilisation avancée dans IDE Eclipse
- Ecrire un programme utilisant javacv dans Eclipse
- Modifier/compiler les sources de javacv dans Eclipse
Ma librairie javacvPro
- Une fois les fonctions d’OpenCV accessibles en Java et dans Processing, c’est très logiquement que vient l’envie de réaliser une librairie Processing avec des fonctions de traitement d’image simples à utiliser. C’est ce que j’ai commencé à faire…
Présentation de la librairie javacv
- Cette librairie reprend la plupart des fonctions natives d’OpenCV avec la même syntaxe que la librairie OpenCV.
- Liens utiles :
- Ma javadoc de la librairie javacv
- Ma javadoc de la librairie javacpp (à ne pas confondre avec javacv.cpp…)
- La classe opencv_core : Path:/mes_docs/my_javacv_javadoc/com/googlecode/javacv/cpp/opencv_core.html
- Ma doc personnelle Javacv – PDF
Codes Processing utilisant les fonctions javacv « in-line »
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
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
Techniques et stratégies utiles
Techniques de soustraction du fond
Approche simplifiée
Approche plus avancée
Ma librairie javacvPro
Présentation
- Ma librairie javacvPro est une de mes premières librairie pour Processing. Il s’agit d’une implémentation simplifiée et facilitée dans Processing de la librairie javacv (de Samuel Audet). Ma librairie n’existerait pas sans javacv, une très grosse librairie qui implémente OpenCV en Java. Cette librairie permet ainsi l’accès au milliers de fonction d’OpenCV sous Processing (qui est écrit en Java) !
- La librairie javacvPro repose avant tout sur 2 fonctions fondamentales que j’ai écrites qui permettent :
- d’envoyer une PImage (conteneur image Processing) vers un objet IplImage (conteneur image d’OpenCV)
- de récupérer un objet IplImage dans une PImage.
- Cette librairie s’inspire de la librairie OpenCV pour Processing existante (basée sur OpenCV 1.0 – dernière mise à jour de 2008) : http://ubaa.net/shared/processing/opencv/ La plupart des fonctions disponibles de cette librairie sont (ou seront) reprises avec la même syntaxe pour l’utilisateur dans ma librairie javacvpro. Ceci dans un but de compatibilité des programmes écrits avec cette première librairie.
- Ma librairie javacvPro reprend notamment les fonctions de détection de Blob avec la même syntaxe.
- Par contre, ma librairie javacvPro vise à étendre beaucoup plus largement les possibilités actuelles d’utilisation d’OpenCV sous Processing, notamment en implantant :
- les fonctions d’extractions de contour (Sobel, Canny,..)
- les fonctions d’analyse de contour (analyse de convexité, recherche des points invariants, etc… )
- …
- A terme, j’espère pouvoir implémenter les algorithmes SURF ou MESH sous Processing.
- Cette librairie est évidemment sous licence GPL v3 afin que tous puissent en profiter largement. J’espère ainsi apporter ma petite et modeste contribution au magnifique projet Processing initié par le MIT.
La libairie : téléchargement, installation.
Référence de la librairie javacvPro
Codes Processing utilisant les fonctions de ma librairie Processing javacvPro (OpenCV 2.3.x)

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.
Exemples d’utilisation de base.
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 |
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
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.OutilsProcessingRecoVisuelle
- 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.
- Processing : OpenCV : librairie javacvPro : …
Articles Liés
- Processing : OpenCV : librairie javacvPro : ...
Processing est un langage de programmation open source qui permet aux développeurs de créer des…
- Processing : Javacv "inline" : ..
Le traitement des données est un domaine en pleine expansion et de plus en plus…
- Programme GLAP-Box : le programme minimum utilisant la librairie Glapbox
Le Programme GLAP-Box est un programme minimal qui utilise la librairie Glapbox pour fournir des…