web-dev-qa-db-ja.com

Linuxでコマンドラインを使用してJavaでOpenCVを構築する方法は?(MapReduceで使用するつもりです)

最近、卒業プロジェクトのためにOpenCVを試しています。私はWindows環境である程度成功しました。また、OpenCVのWindowsパッケージにはビルド済みのライブラリが付属しているため、ビルド方法を気にする必要はありません。ただし、プロジェクトは各ノードのホストOSとしてCentOSを使用するクラスターで実行することを想定しているため、これらのライブラリを正しくコンパイルしてLinux環境で実行する方法を知っている必要があります。

VMをセットアップし、それにUbuntu 13.04をインストールしました。しかし、これまでのところ、CMakeListの設定を調整してJavaビルドターゲット(MapReduceプログラムでインポートして使用できるようにjarおよびネイティブライブラリ)以下は、デスクトップの公式チュートリアルです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パッケージをダウンロード

ターゲット環境は、各ノードのホストOSとしてCentOSを使用するクラスターであり、プロジェクトはMapReduceプログラムです。

前もって感謝します。

15
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を再度実行したところ、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と呼ばれています。これはダウンロードしたコードのバージョンです)。

40
GregHNZ

グーグルからここに向けられた誰かのために:

Javaチュートリアルを実行した後にJREがクラッシュした場合、おそらくpython Bindingsもインストールされています(cv2.so))。再実行する必要があります。 -それらのバインディングなしでOpenCVを作成する

cmake -DBUILD_SHARED_LIBS=OFF -D BUILD_NEW_PYTHON_SUPPORT=NO

これで問題は解決しました。

1
UtsavDrolia

OpenCVのバージョン3.1.0以降、OpenCV_Root_Directory/platforms/mavenの下にMaven POMプロジェクトがあります。 LinuxマシンにMavenがインストールされている場合(パッケージマネージャーを使用するか手動でインストール)、このプロジェクトにより、正しい依存関係がインストールされ、ネイティブライブラリとJavaライブラリが構築されます。README。

0
Kerry

Ubuntu 14でOpenCV 3を構築しようとしたところ、Oracle Java 8 JDKで同様の問題が発生しました。

これらは、Java OpenCVバインディングを使用してJavaプログラムをビルドおよび実行するために行った手順です。

  1. FindJNI。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 includeディレクトリに追加します。例:/home/foo/bar/jdk1.8.0_45/include

  2. Build。共有libフラグは、変更された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. Write Testcode。buildディレクトリに./bin/opencv-300.jarのようなjarファイルが表示されます。このファイルは、Javaビルドの依存関係、たとえばお気に入りのIDEに追加できます。

  4. Testcodeを実行します。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/

0
Marco