最近、卒業プロジェクトのために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です
ターゲット環境は、各ノードのホストOSとして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
と呼ばれています。これはダウンロードしたコードのバージョンです)。
グーグルからここに向けられた誰かのために:
Javaチュートリアルを実行した後にJREがクラッシュした場合、おそらくpython Bindingsもインストールされています(cv2.so))。再実行する必要があります。 -それらのバインディングなしでOpenCVを作成する
cmake -DBUILD_SHARED_LIBS=OFF -D BUILD_NEW_PYTHON_SUPPORT=NO
これで問題は解決しました。
OpenCVのバージョン3.1.0以降、OpenCV_Root_Directory/platforms/maven
の下にMaven POMプロジェクトがあります。 LinuxマシンにMavenがインストールされている場合(パッケージマネージャーを使用するか手動でインストール)、このプロジェクトにより、正しい依存関係がインストールされ、ネイティブライブラリとJavaライブラリが構築されます。README。
Ubuntu 14でOpenCV 3を構築しようとしたところ、Oracle Java 8 JDKで同様の問題が発生しました。
これらは、Java OpenCVバインディングを使用してJavaプログラムをビルドおよび実行するために行った手順です。
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
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
Write Testcode。build
ディレクトリに./bin/opencv-300.jar
のようなjarファイルが表示されます。このファイルは、Javaビルドの依存関係、たとえばお気に入りのIDEに追加できます。
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/