mike-neckのブログ

Java or Groovy or Swift or Golang

OpenCV/Java 環境構築メモ

JavaOpenCVをごにょごにょやるのに、少し手間取ったのでメモ。

インストールする環境などは次のとおり。

OpenCVのインストール

(1) pythonbrewでインストール

$ brew install python
$ brew install python3

(2) numpyをインストールするためにgccをインストール

$ brew install gcc

numpyがgfortrunに依存していて、gfortrunがgccに吸収されているので、インストールされる。

なお、makeに時間がかかる(1時間くらい)

(3) numpyをインストール

$ brew install numpy --with-python3

(4) opencv3をインストール

$ brew install opencv3 --with-python3 --with-java

Javaでいじる場合には--with-javaをいれておく

Pythonでインストールの確認をするので、次のコマンドをうっておく

$ brew link opencv3 --force

インストール後にpython3を起動してimport cv2をおこなって、エラーが出なければインストール成功

Javaプロジェクト

(1) libopencv_java310.so のファイル名を変更

github.com

OpenCVに同梱されているネイティブライブラリーのlibopencv_java310の拡張子がsoになっているので、dyLibに変更する

$ cd /usr/local/Cellar/opencv3/3.1.0_3/share/OpenCV/java
$ sudo mv libopencv_java310.so libopencv_java310.dyLib

(2) opencv_310.jarからjavaファイルのみを取り出してサブプロジェクトにする

OpenCVに同梱されているopencv_310.jarにはいっているclassファイルがJava9eaでコンパイルされていて、IntelliJ IDEAでクラスファイルを認識できない。そこでopencv_310.jarからjavaファイルを取り出してサブプロジェクトを作り、メインのほうから依存するようにプロジェクトを構成する。

settings.gradle

include 'opencv'

build.gradle

dependencies {
    // サブプロジェクトに依存
    compile project(':opencv')
}

// jarからjavaファイルを取り出す
task copySource(type: Copy) {
    def jarFile = file('/usr/local/Cellar/opencv3/3.1.0_3/share/OpenCV/java/opencv-310.jar')
    from zipTree(jarFile)
    exclude '**/*.class'
    exclude 'META-INF/*'
}

// サブプロジェクトの設定
project(':opencv') {
    apply plugin: 'java'
}

(3) プログラム実行時の起動オプション

ネイティブライブラリーのパスをjava.library.pathに設定して起動する

-Djava.library.path=/usr/local/Cellar/opencv3/3.1.0_3/share/OpenCV/java

System.setPropertyでやってみたが、その場合にはネイティブライブラリーをうまく探しだしてくれなかった

おわり