Как создать OpenCV с Java под Linux с помощью командной строки? (Собираюсь использовать его в MapReduce)

Недавно я пытаюсь открыть OpenCV для моего проекта. У меня был некоторый успех в среде Windows. И поскольку с пакетом Windows OpenCV он поставляется с предварительно построенными библиотеками, поэтому мне не нужно беспокоиться о том, как их создавать. Но так как проект предполагается запускать в кластере с CentOS в качестве хост-ОС для каждого node, я должен знать, как правильно компилировать и запускать эту библиотеку в среде Linux.

Я установил виртуальную машину с VirtualBox и установил Ubuntu 13.04 на нее. Но до сих пор я до сих пор не могу найти способ настроить параметры CMakeList, чтобы сделать Java целью сборки. (Банку и встроенную библиотеку, чтобы я мог импортировать и использовать их в программе MapReduce) Ниже приведен официальный учебник по настольному Java для OpenCV

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

Часть о компиляции довольно короткая. Поэтому я все еще не могу это понять. Это потому, что я пропустил некоторую зависимость от Java? У меня уже установлен JVM (Jre-7u7). Или это потому, что я не правильно настроил CMakeList.txt?

Вот что я сделал до сих пор, кроме того, что это чистый чистый Ubuntu

  • Установленный vim
  • Установлен g++
  • Установленный cmake
  • установлен cmake-curses-gui
  • установлен java7 JVM
  • скачать пакет OpenCV для Linux

Целевая среда - это кластер с CentOS в качестве ОС хоста для каждого node, а проект - программа MapReduce.

Спасибо заранее.

Ответ 1

Вероятно, вам не хватает ant, который представляет собой Java-ориентированный инструмент построения.

Когда вы идете:

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

(т.е. когда вы настраиваете make для своего компьютера), проверьте раздел, в котором говорится java. Он должен сказать что-то вроде этого (возможно, с разными путями/версиями):

--   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

Когда я впервые запустил cmake, у меня было следующее:

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

Что указывало, что он не смог найти ant, и поэтому он не создавал .jar файл. Я просто использую версию, которая находится в репозитории:

sudo apt-get install ant

Я снова запустил cmake с указанными выше опциями, которые получили путь к ant (и я получил JNI бесплатно!).

Примечание.. Вы, вероятно, хотите внимательно прочитать результат cmake, поскольку он сообщает вам, что он собирается построить на вашем компьютере, и у вас могут быть некоторые недостающие библиотеки.

Если вы обнаружите, что JNI все еще отсутствует.

cmake (в основном "сначала" удобно? "можно интерпретировать как?), ища jni.h, что должно быть специально $JAVA_HOME/include/jni.h Поэтому вам нужно установить $JAVA_HOME в домашнюю папку вашего jdk.

Я использовал which javac, а затем ls -l, чтобы следовать серии символических ссылок, чтобы определить, где была установлена ​​моя установка java 1.7. Вы также можете использовать locate jni.h и обработать дерево или просто посмотреть вокруг /usr/lib/jvm или аналогичного.

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

Вероятно, вы захотите проверить, что вы получили это право с помощью пары

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

Интересно, когда я снова запустил команду cmake, он взял другую папку 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

После этого запустите команду make. Если вы будете смотреть одержимо, вы увидите, что куча файлов .java проходит мимо. В любом случае вы получите файл .jar в папке. /bin. (в моем случае он называл opencv-245.jar тем, что версия загруженного мной кода).

Ответ 2

Для кого-то, направляемого сюда из Google:

Если ваш JRE падает после запуска java-учебников, скорее всего, вы также установили Bindings python (cv2.so). Вам придется повторно создать OpenCV без этих привязок

cmake -DBUILD_SHARED_LIBS=OFF -D BUILD_NEW_PYTHON_SUPPORT=NO

Это решило проблему для меня.

Ответ 3

Я попытался создать OpenCV 3 на Ubuntu 14 и столкнулся с аналогичными проблемами с Oracle java 8 JDK.

Это шаги, которые я создал для создания и запуска java-программы с использованием привязок Java OpenCV.

  • FindJNI. Поскольку модуль "FindJNI" cmake 3 не поддерживает обнаружение Oracle Java 8, мы должны вручную добавить наши каталоги Java 8. Поэтому найдите файл FindJNI.cmake в каталоге cmake, например /home/foo/bar/cmake-3.2.2-Linux-x86_64/share/cmake-3.2/Modules/FindJNI.cmake

    Перейдите к переменной JAVA_APPEND_LIBRARY_DIRECTORIES и добавьте путь к вашему каталогу архитектуры java lib, например. /home/foo/bar/jdk1.8.0_45/lib/amd64

    Перейдите к переменной JAVA_AWT_INCLUDE_DIRECTORIES и добавьте путь к вашему каталогу java include, например. /home/foo/bar/jdk1.8.0_45/include

  • Сборка. Флаг shared lib выполняет тигринг сборки привязок java, если ваш модифицированный FindJNI нашел ваш Oracle 8 JDK.

    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
    
  • Write Testcode. В вашем каталоге build вы увидите файл jar, например ./bin/opencv-300.jar. Этот файл можно добавить к зависимостям сборки java, например. в вашей любимой среде IDE.

  • Запустить тестовый код. Вы должны добавить путь opencv lib к вашим параметрам VM:

    -Djava.library.path =/дом/Foo/бар/OpenCV-3.0.0/сборки/Библиотека

[1] Примечание. В зависимости от ваших личных потребностей или вкуса вы можете установить различные другие зависимости до создания, например. сравните http://rodrigoberriel.com/2014/10/installing-opencv-3-0-0-on-ubuntu-14-04/

Ответ 4

Начиная с версии 3.1.0 OpenCV существует проект Maven POM под OpenCV_Root_Directory/platforms/maven. Если Maven установлен на вашей Linux-машине (используя диспетчер пакетов или вручную установлен), этот проект гарантирует, что вы установите правильные зависимости, создайте собственные и Java-библиотеки. См. README в приведенном выше каталоге.