it-swarm.com.ru

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

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

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

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

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

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

  1. Установленный vim
  2. Установил g ++
  3. Установлен cmake
  4. установленный cmake-curses-gui
  5. установлен Java7 JVM
  6. скачать пакет OpenCV для Linux

Целевой средой является Cluster с CentOS в качестве Host OS для каждого узла, а проект является программой MapReduce.

Заранее спасибо.

12
user2535650

Вероятно, вам не хватает 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 с вышеуказанными опциями, которые получили путь к муравью (и я получил 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, так как это версия загруженного мной кода).

35
GregHNZ

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

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

cmake -DBUILD_SHARED_LIBS=OFF -D BUILD_NEW_PYTHON_SUPPORT=NO

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

1
UtsavDrolia

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

0
Kerry

Я пытался собрать OpenCV 3 на Ubuntu 14 и столкнулся с похожими проблемами с Oracle Java 8 JDK.

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

  1. 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, например, /home/foo/bar/jdk1.8.0_45/include

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

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

    -Djava.library.path =/дом/Foo/бар/OpenCV-3.0.0/сборки/Lib

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

0
Marco