web-dev-qa-db-fra.com

Comment compiler OpenCV avec Java sous Linux en utilisant la ligne de commande? (Va l'utiliser dans MapReduce)

Récemment, je teste OpenCV pour mon projet de fin d'études. J'ai eu un certain succès sous Windows. Et comme le paquet Windows d'OpenCV est livré avec des bibliothèques prédéfinies, je n'ai donc pas à me soucier de la façon de les construire. Mais puisque le projet est supposé fonctionner sur un cluster avec CentOS comme système d'exploitation hôte. pour chaque nœud, je dois savoir comment compiler correctement et exécuter ces bibliothèques sous environnement Linux.

J'ai configuré une VM avec VirtualBox et y ai installé Ubuntu 13.04. Mais jusqu'à présent, je ne trouve toujours pas de moyen d'ajuster les paramètres de CMakeList pour faire de Java une cible de construction. . (Un fichier jar et une bibliothèque native pour que je puisse les importer et les utiliser dans le programme MapReduce) Voici le didacticiel officiel de bureau Java pour OpenCV.

http://docs.opencv.org/doc/tutorials/introduction/desktop_Java/java_dev_intro.html

La partie sur la compilation est assez brève. Donc, je ne comprends toujours pas tout à fait. Est-ce parce que j'ai manqué une dépendance pour Java? JVM (Jre-7u7) est déjà installé. Ou est-ce parce que je n’ai pas configuré correctement CMakeList.txt?

Voici ce que j'ai fait jusqu'à présent, mis à part le fait que c'est un Ubuntu complètement propre

  1. Vim installé
  2. Installé g ++
  3. Cmake installé
  4. cmake-curses-gui installé
  5. installé Java 7 JVM
  6. télécharger le package OpenCV pour Linux

L'environnement cible est un cluster avec CentOS en tant que système d'exploitation hôte pour chaque nœud et le projet est un programme MapReduce.

Merci d'avance.

12
user2535650

Ce qui vous manque probablement, c'est ant, qui est un outil de construction orienté Java.

Quand tu vas:

cmake -D BUILD_SHARED_LIBS=OFF ../opencv-2.4.5/

(c’est-à-dire lorsque vous configurez la marque pour votre machine), recherchez la section intitulée Java . Il devrait dire quelque chose comme ceci (éventuellement avec différents chemins/versions):

--   Java:
--     ant:                         /usr/bin/ant (ver 1.8.2)
--     JNI:                         /usr/lib/jvm/Java-6-openjdk/include /usr/lib/jvm/Java-6-openjdk/include /usr/lib/jvm/Java-6-openjdk/include
--     Java tests:                  YES

Quand j'ai commencé à exécuter cmake, j'avais ceci:

--   Java:
--     ant:                         NO
--     JNI:                         NO
--     Java tests:                  YES

Ce qui indique qu'il n'a pas pu trouver ant et qu'il n'a donc pas créé de fichier .jar. J'utilise simplement la version qui se trouve dans le référentiel:

Sudo apt-get install ant

J'ai de nouveau exécuté cmake, avec les options ci-dessus, qui permettaient d'accéder à ant (et j'ai JNI gratuit!).

Note: / Vous voudrez probablement lire assez attentivement le résultat de cmake car il vous dit ce qu'il va construire sur votre machine, et il vous restera peut-être des bibliothèques manquantes.

Si vous trouvez JNI est toujours manquant.

cmake est (la plupart du temps? premièrement? commodément? peut être interprété comme?) à la recherche de jni.h, qui devrait être spécifiquement $Java_HOME/include/jni.h. Vous devez donc définir $ Java_HOME dans le dossier de départ de votre jdk.

J'ai utilisé which javac, puis ls -l pour suivre une série de liens symboliques, afin d'identifier l'emplacement de mon installation de Java 1.7. Vous pouvez également utiliser locate jni.h et remonter l’arbre, ou tout simplement regarder autour de /usr/lib/jvm ou similaire.

export Java_HOME=/usr/lib/jvm/Java-7-openjdk-AMD64

Vous voulez probablement vérifier que vous avez bien compris avec quelques

ls $Java_HOME/bin/javac
/usr/lib/jvm/Java-7-openjdk-AMD64/bin/javac

ls $Java_HOME/include/jni.h
/usr/lib/jvm/Java-7-openjdk-AMD64/include/jni.h

Fait intéressant, lorsque j'ai exécuté la commande cmake à nouveau, il a récupéré un autre dossier JNI:

--     JNI:                         /usr/lib/jvm/Java-7-openjdk-AMD64/include /usr/lib/jvm/Java-7-openjdk-AMD64/include /usr/lib/jvm/Java-7-openjdk-AMD64/include

Une fois que vous avez cela, exécutez la commande make. Si vous regardez de manière obsessionnelle, vous verrez une multitude de fichiers .Java défiler. Dans les deux cas, vous vous retrouverez avec un fichier .jar dans le dossier ./bin. (Dans mon cas, il s'appelle opencv-245.jar car il s'agit de la version du code que j'ai téléchargé).

35
GregHNZ

Pour quelqu'un dirigé ici de google:

Si votre JRE se bloque après avoir exécuté les didacticiels Java, il est fort probable que les liaisons python soient également installées (cv2.so). Vous devrez refaire OpenCV sans ces liaisons 

cmake -DBUILD_SHARED_LIBS=OFF -D BUILD_NEW_PYTHON_SUPPORT=NO

Cela a résolu le problème pour moi.

1
UtsavDrolia

Depuis la version 3.1.0 d'OpenCV, il existe un projet Maven POM sous OpenCV_Root_Directory/platforms/maven. Avec Maven installé sur votre machine Linux (à l'aide du gestionnaire de paquets ou manuellement), ce projet s'assurera que les dépendances appropriées sont installées et que vous construisez les bibliothèques natives et Java. Voir le README dans le répertoire ci-dessus.

0
Kerry

J'ai essayé de créer OpenCV 3 sur Ubuntu 14 et j'ai rencontré des problèmes similaires avec Oracle Java 8 JDK.

Voici les étapes que j'ai déjà suivies pour créer et exécuter un programme Java à l'aide des liaisons Java OpenCV.

  1. FindJNI. Le module "FindJNI" de cmake 3 ne prenant pas en charge la détection d'Oracle Java 8, nous devons ajouter nos répertoires Java 8 manuellement. Par conséquent, localisez le fichier FindJNI.cmake dans votre répertoire cmake, par exemple /home/foo/bar/cmake-3.2.2-Linux-x86_64/share/cmake-3.2/Modules/FindJNI.cmake.

    Allez à la variable Java_APPEND_LIBRARY_DIRECTORIES et ajoutez le chemin d'accès à votre répertoire d'architecture Java Lib, par exemple. /home/foo/bar/jdk1.8.0_45/lib/AMD64

    Allez à la variable Java_AWT_INCLUDE_DIRECTORIES et ajoutez le chemin d'accès à votre répertoire d'inclusion Java, par exemple. /home/foo/bar/jdk1.8.0_45/include

  2. Construire. L'indicateur de bibliothèque partagée amorce la construction des liaisons Java, Si votre FindJNI modifié a trouvé votre JDK Oracle 8.

    cd /home/foo/bar/opencv-3.0.0/
    mkdir build
    cd build
    # install dependencies if needed, see [1]
    cmake -DBUILD_SHARED_LIBS=OFF ..
    make -j
    
  3. Écrire Testcode. Dans votre répertoire build, vous devriez voir un fichier jar tel que ./bin/opencv-300.jar. Ce fichier peut être ajouté à vos dépendances de construction Java, par exemple. dans votre IDE préféré.

  4. Exécuter Testcode. Vous devez ajouter le chemin de la bibliothèque opencv à vos options VM:

    -Djava.library.path =/home/toto/bar/opencv-3.0.0/build/lib

[1] Remarque: en fonction de vos besoins personnels ou de vos goûts, vous pouvez installer diverses autres dépendances avant la construction, par exemple. comparer http://rodrigoberriel.com/2014/10/installing-opencv-3-0-0-on-ubuntu-14-04/

0
Marco