OpenCVをJavaから使うぞ〜〜〜完全インストールマニュアル

まあJavaというかScalaから使いたかったんですが、同じことなんでとりあえずJavaから使うぞ〜〜〜という話です。

macOSの話だけど)Homebrewで入れていいの?Mavenリポジトリにあるの使っていいの?とまあいろいろ躓いたんで、まとめときます。

OpenCV(とJavaバインディング)をインストール

Homebrewから入れます。どのみちソースをビルドするので、ソースをダウンロードして自前でビルドしてもそんな変わらないと思います、たぶん。そっちの方がオプションなど細かくいじれると思うので、最終的にはそっちの方がおすすめな気はしてる。

Java用のバインディングもオプションで一緒にインストールします。するんですが、Antでビルドするようなので、Antをあらかじめインストールしておかないと、Java用のバインディングを作ってくれないっぽい。のでまず:

$ brew install ant

し、そのあと:

$ brew edit opencv

します。OpenCV用のFormulaを少し変えるんですが、-DBUILD_opencv_javaが書いてある箇所を探し、OFFならばONに変更しておきます。これをONにすると、Java用のバインディングも一緒にインストールされます。あとは:

$ brew install --build-form-source opencv

でインストールできます。正しくインストールできていれば、/usr/local/Cellar/opencv/VERSION/share/OpenCV/javaというディレクトリが存在し、中にJava用のバインディング(共有ライブラリと.jarファイル)が入っていればインストール大成功です。

build.sbtを書く

インストール自体はもう終わってるんですが、とりあえず使えるところまで書きます。というわけでbuild.sbtを書きましょう。中身はこんな感じ。

javaOptions in run += "-Djava.library.path=lib"

fork in run := true

forktrueにしているのは、こうしておかないと共有ライブラリを読み込めないから。

あとはjavaOptionsjava.library.pathにJava用のバインディングまでのパスを通せば良いだけ。$ ln -s /usr/local/Cellar/opencv/VERSION/share/OpenCV/java libしておき、作成したlibシンボリックリンクを指定します。IntelliJ IDEAを使用している方はその中の.jarファイルをプロジェクトの依存に追加しておけば、補完も効いておすすめです。

コードも書く

OpenCVのコードはちょくちょく変わっているので、ググった記事の通りに書いたら動かないとかざらです。imreadメソッドで画像を読み込めますが、そのメソッドがHighguiからImgcodecsに移動してたり。まあその辺はインストールしたOpenCVのバージョンに適したドキュメント読めば分かると思います。

.jarファイルだけsbtのlibraryDependenciesでインストールする

こっからは捕捉なんですが、上記の方法でインストールすると、IntelliJ IDEAが補完してくれないんですね。sbtならlibraryDependenciesに指定したものは自動的に補完の対象(というかクラスパスに入る)になるのに、わざわざ指定しないといけないと。

ので、この部分だけはlibraryDependenciesに指定したいという方もいるかもしれません。というわけでその方法。

まずMavenリポジトリにあるopencvのバージョンを調べます。そのバージョンと同一のOpenCVでないと動作しないので注意が必要で、大抵はOpenCVの方がバージョンが進んでいるので間違いなく気に掛ける必要があるでしょう。

2018年12月5日現在ではorg.openpnpのopencvが3.4.2-1で、HomebrewのOpenCVは3.4.3です。なので何も考えずにインストールするとあ゛〜〜〜ってなること必至です。というわけで、HomebrewのOpenCVも3.4.2をインストールする必要があります。

まず/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formulaに移動し、$ git log opencv.rbします。で、3.4.2のコミットを探し、$ git checkout COMMIT -- opencv.rbで、3.4.2のFormulaを得たら準備は完了。あとは「OpenCV(とJavaバインディング)をインストール」と同じ手順で大丈夫です。なお最近のHomebrewはinstallのときなどに勝手にupdateをしてしまうので、brewコマンドの前にはHOMEBREW_NO_AUTO_UPDATE=1を付けておくと良いでしょう。

あとはbuild.sbtに:

libraryDependencies += "org.openpnp" % "opencv" % "3.4.2-1"

を追加すれば大丈夫です。

参考