簡體   English   中英

如何使用命令行在 Linux 下使用 Java 構建 OpenCV?(將在 MapReduce 中使用它)

[英]How to build OpenCV with Java under Linux using command line?(Gonna use it in MapReduce)

最近我正在為我的畢業項目嘗試 OpenCV。 我在 Windows 環境下取得了一些成功。 並且因為 OpenCV 的 Windows 包附帶了預構建的庫,所以我不必擔心如何構建它們。 但是由於該項目假設運行在以 CentOS 作為每個節點的主機操作系統的集群上,我必須知道如何正確編譯,並在 Linux 環境下運行這些庫。

我已經使用 VirtualBox 設置了一個 VM,並在其上安裝了 Ubuntu 13.04。 但到目前為止,我仍然找不到調整 CMakeList 設置以使 Java 成為構建目標的方法。 (一個 jar 和一個本地庫,因此我可以在 MapReduce 程序中導入和使用它們)以下是 OpenCV 的桌面 Java 官方教程

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. 下載適用於 Linux 的 OpenCV 包

目標環境是CentOS作為每個節點的主機操作系統的集群,項目是一個MapReduce程序。

提前致謝。

您可能缺少的是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 文件滾過。 無論哪種方式,您最終都會在 ./bin 文件夾中得到一個 .jar 文件。 (在我的情況下,它被稱為opencv-245.jar ,因為這是我下載的代碼版本)。

對於從 google 指向這里的人:

如果您在運行 java 教程后 JRE 崩潰,那么很可能您也安裝了 python 綁定 (cv2.so)。 您將不得不在沒有這些綁定的情況下重新制作 OpenCV

cmake -DBUILD_SHARED_LIBS=OFF -D BUILD_NEW_PYTHON_SUPPORT=NO

這為我解決了問題。

我嘗試在 Ubuntu 14 上構建 OpenCV 3,但在使用 Oracle java 8 JDK 時遇到了類似的問題。

這些是我使用 java OpenCV 綁定構建和運行 java 程序的步驟。

  1. 查找JNI。 由於 cmake 3 的“FindJNI”模塊不支持檢測 Oracle Java 8,我們必須手動添加我們的 Java 8 目錄。 因此,在您的 cmake 目錄中找到文件FindJNI.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. 建造。 如果您修改后的 FindJNI 找到了您的 Oracle 8 JDK,則共享庫標志會觸發 java 綁定的構建。

     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目錄中,您應該會看到一個類似./bin/opencv-300.jar的 jar 文件。 該文件可以添加到您的 java 構建依賴項中,例如在您最喜歡的 IDE 中。

  4. 運行測試代碼。 您必須將 opencv lib 路徑添加到您的 VM 選項中:

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

[1] 注意:根據您的個人需求或品味,您可以在構建之前安裝各種其他依賴項,例如比較http://rodrigoberriel.com/2014/10/installing-opencv-3-0-0-on-ubuntu-14 -04/

從 OpenCV 3.1.0 版本開始,在OpenCV_Root_Directory/platforms/maven下有一個 Maven POM 項目。 在您的 Linux 機器上安裝 Maven(使用包管理器或手動安裝)后,該項目將確保您安裝了正確的依賴項,構建本機和 Java 庫。 請參閱上述目錄中的 README。

-- 爪哇:
-- ant: 否 -- JNI: /usr/lib/jvm/default-java/include /usr/lib/jvm/default-java/include/linux /usr/lib/jvm/default-java/include -- Java包裝器:否——Java 測試:否

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM