View  Edit  Attributes  History  Attach  Print  Search

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 la dernière version d'OpenCV

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

Codes Javacv Inline

Codes Processing utilisant les fonctions javacv "in-line"

Les objets fondamentaux "statiques" d'OpenCV

Objet IplIMage (conteneur d'image natif OpenCV)

Filtrage d'image simples

Objet CvMat (Matrice 1 à n Dimensions).

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 JavacvPro

Codes Processing utilisant les fonctions de ma librairie Processing javacvPro (OpenCV 2.3.x)

Présentation

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

Détection de plusieurs balles colorées

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

2 tourelles Pan (2 servomoteurs)

  • Suivi de balle colorée par 2 tourelles Pan

1 tourelle Pan-Tilt (2 servomoteurs)

2 tourelles Pan-Tilt (4 servomoteurs)

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

Approche simplifiée

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

Approche simplifiée de la détection des doigts

Suivi de la main et des doigts

Divers
  • Détection main par IR
  • Suivi mouvement oculaire
  • Suivi pointeur laser
  • Détection / suivi des carreaux de carrelage (sol)
  • Détection de portes

ModeleJavacvPro

ModeleProgJavacvInline