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
fork
をtrue
にしているのは、こうしておかないと共有ライブラリを読み込めないから。
あとはjavaOptions
でjava.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"
を追加すれば大丈夫です。