Archive for J2EE

image_pdfimage_print

Enfin, OpenCV est disponible pour les codeurs java !

logoOpenCVOpenCV est une bibliothèque de traitement d’image ou plus généralement une bibliothèque graphique développée principalement avec le langage C++ par la société Intel dont Willow Garage assure le support depuis 2008. D’autres grands acteurs du domaine s’intéressent à OpenCV , tel que Nvidia. Cette dernière développe depuis quelques années des briques utilisant CUDA pour OpenCV . Ceci permet d’exploiter les avancées en termes de puissance de calcul graphique GPU.

Début 2007 et début octobre 2008, sont deux dates connues par l’apparition des smartphones équipés par un iOS ou par un androïd. Ces deux merveilles ont révolutionné le marché des Smartphones et des tablettes. En plus des fonctionnalités d’un simple téléphone, un Smartphone peut contenir des centaines d’applications allant d’une simple application agenda à une application plus complexe utilisant plus de ressources, réseaux, capteurs (caméra), etc. Les applications pour iPhone sont développées avec le langage de programmation Objective-C, tandis que les applications pour Androïd sont développées avec le langage de programmation Java. Ce dernier est connu pour sa portabilité. Un Smartphone comporte le plus souvent une caméra produisant des images de très bonne qualité. Outre la reprise des photos, une caméra peut être utilisée dans plusieurs applications, webcam, réalité virtuelle, reconstruction 3D, reconnaissances d’objets, etc. Ces dernières applications nécessitent des algorithmes de traitement et d’analyse d’images plus complexes. Heureusement, OpenCV est leader dans le domaine et surtout est très en avance sur ces sujets. Alors pourquoi réinventer la roue ? Il est donc impératif pour la librairie OpenCV de développer des interfaces qui permettent de s’interfacer avec d’autres langages et plus particulièrement les deux langages les plus populaires à savoir Java et Python. Dans ce tutoriel, nous nous intéressons plus particulièrement au langage Java.

Pour un développeur java, il existe plusieurs solutions qui permettent d’intégrer du code C++ dans un programme Java. Nous pouvons citer comme exemple : JNI, SWIG, etc. Ces solutions restent très difficiles à mettre en œuvre et surtout à maintenir. Pour chaque version C++, le développeur java réadapte son code pour intégrer les changements. JavaCV est un bon exemple.

Souvent, les développeurs Java abandonnent les avantages d’OpenCV et cherchent plutôt d’autres bibliothèques purement java ou d’autres bibliothèques qui embarquent une interface java. Je donne par exemple imageJ et Orefo ToolBox (otb). Cette dernière est très puissante mais malheureusement elle est limitée aux problématiques de télédétection. Dans cet article, je ne compare pas les librairies en détails, mais au niveau des fonctionnalités, je pense qu’OpenCVdépasse largement ses concurrents, en tout cas dans des applications de traitement d’images plus particulièrement “génériques”.

Dans ce guide, vous trouverez une aide pour créer votre premier projet Java en utilisant OpenCV. Pour mener à bien notre objectif, nous allons utiliser Eclipse.

Le guide se déroulera en trois étapes :

  1. Installer OpenCV avec une prise en charge Java.
  2. Créer un projet Eclipse.
  3. Écrire un projet simple OpenCV avec Java.

Installation OpenCV avec support Java

A partir de la version 2.4.4 OpenCV intègre une interface avec le langage Java. Pour bénéficier de cette fonctionnalité, nous allons télécharger et installer la version OpenCV 2.4.4 ou une autre version plus récente depuis le dépôt : http://sourceforge.net/projects/opencvlibrary/. Pour le bon déroulement du tutoriel, nous supposons que cmake, java, ainsi que python sont bien installés. Sinon, pour les utilisateurs de Debian / ubuntu lancer la commande :

$>sudo aptitude install cmake default-jdk openjdk-7-jdk python python-dev

Ensuite, nous allons cloner OpenCV depuis un serveur git avec la commande

$>git clone git://github.com/Itseez/opencv.git
$>cd opencv
$>git checkout 2.4.6
$>mkdir build
$>cd build

Avec cmake, nous générons le fichier MakeFile en lançant la commande suivante:

$>cmake -DBUILD_SHARED_LIBS=OFF ..

L’option BUILD_SHARED_LIBS est désactivée, ceci permet de générer la librairie d’interface java contenant seule toutes les dépendances d’OpenCV.
Ensuite, il faut examiner la sortie de cmake afin de vérifier que le module java sera bien généré. Ci-dessous, vous avez un aperçu de cette sortie. J’ai souligné le module java.

opencvModules

J’ai ajouté dans la commande précédente de “aptitude” des dépendances Python afin de générer aussi l’interface Python pour OpenCV . Je ne donnerai pas un exemple de projet Python utilisant OpenCV , mais l’installation est un bon début. Je vous laisse faire la suite.
Une fois la génération de MakeFile est terminée, lancer la compilation :

$>make -j2

image15

A la fin de ce processus, vous aurez dans le répertoire bin votre interface opencv_2.4.6.jar ainsi que la librairie libopencv_java_246.so. Ces deux fichiers seront utiles et nécessaires pour la prochaine étape.

Création d’un projet Java sous Eclipse

Maintenant nous allons exploiter OpenCV dans un programme Java en utilisant l’IDE Eclipse.

  • Créer un nouvel espace de travail.
  • Activer une perspective Java.
  • Créer un nouveau projet Java : Fichier -> Nouveau –> Projet Java
    nouveau projet Java
  • Ouvrir “Java Build Path” à partir de “Project Properties” afin de configurer les librairies :
  • Capture du 2013-10-29 14:14:10
  • Cliquer sur “add library” , “User Library” puis “Next”
    Capture du 2013-10-29 14:16:47
  • Cliquer sur “User libraries”
    Capture du 2013-10-29 14:22:49
  • Ensuite cliquer sur “New”
    Capture du 2013-10-29 14:23:05
  • Donner un nom pour votre librairie: par exemple “opencv_2.4.6″ puis “ok”.
    Capture du 2013-10-29 14:48:41
  • Sélectionner opencv-2.4.6 puis “add external JARs”.
    Capture du 2013-10-29 14:24:42
  • Sélectionner “Native library location” puis “Edit”
    Capture du 2013-10-29 14:49:18
  • Entrer le chemin vers “libopencv_java246.so” puis ok.
    Capture du 2013-10-29 14:50:02

Projet simple OpenCV avec Java

  • Maintenant, votre projet est configuré avec OpenCV (lib et jar) et il est prêt pour un test. Nous allons maintenant crée une classe Main.java avec le contenu ci-dessous :
    import org.opencv.core.Core;
    import org.opencv.core.CvType;
    import org.opencv.core.Mat;
    
    public class Main {
        public static void main(String[] args) {
            System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
            Mat m  = Mat.eye(3, 3, CvType.CV_8UC1);
            System.out.println("m = " + m.dump());
        }
    }
    

    Capture du 2013-10-29 14:55:45

  • Ensuite, cliquer sur “Run” et trouver dans le console d’Eclipse : la matrice identité.
    Capture du 2013-10-29 15:10:21

Conclusion

Avec ces quelques lignes, je pense que vous serez maintenant capable de débuter un projet Java simple utilisant la librairie OpenCV .
Bientôt sur notre site :

  1. Projet Java-Opencv de détection de visage.
  2. Projet de génération d’un dépôt maven incluant la librairie opencv.jar.
  3. Projet Java-Opencv pour Android.