Pythonの環境構築のサイトは多々あるのですがjavaでとなるとなかなかありません。
色々なサイトを参考にしながら試みましたが、理解するまでなかなか大変でした。
私がやった工程もあっているかわからないですがだれかの参考になれば・・間違ってたらすみません。
環境構築するに至った経緯
OpenCV2系を利用したSIFTやSURFでの特徴抽出をするプログラムをOpenCV4.1で動かしてみようと思い、今回の環境構築を始めました。
Windowsやラズパイ、言語ではPythonをつかった内容での参考記事は多かったのですがなかなかMacでJavaという組み合わせでの記事があまりなく苦戦を強いられました。
OpenCVを使うのならやっぱりPythonがいいのでしょう。でも、今回はJavaでやります。
ハマったこと
OpenCV2系では標準で使用できていたSIFTやSURFを利用するためのクラスファイルがOpenCV4.1では標準機能にはいっていないようです。
また、cmakeでOPENCV_NABLE_NONFREEというのをチェックいれなければSIFTが使えないということが後でわかりました。
作業としては、そこまで大変ではなかったのですが、行ったり来たりをしました。
参考記事:Windows10でOpenCV3.4.1とopencv_contrib環境構築
導入方法
①OpenCV4.1.0をダウンロード
OpenCVのサイトから4.1.0をダウンロードします。
OpenCV-Releases の「Sources」をクリックしてください。
クリックすると、zipファイルがダウンロードされるので任意の場所に解凍してください。標準機能だけでよいのであれば②のファイルのダウンロードはしなくてもよいです。
②opencv_contribのダウンロード
opencv_contribもダンロードしておきます。
私はここを最初にしていなかったので最初からやり直すことになりました。
私の場合はSIFTやSURFを使いたかったのでこのファイルが必要でした。
必要ない人はスルーしてください。
opencv/opencv_contrib(Github) から4.1.0のzipをダウンロードします。
ダンロードしたファイルは解凍して、①で保存した場所と同じところに置いておくのがよいでしょう。
③CMakeのダウンロード
Windows環境でopencv_contribを使わない場合はビルドしなくても大丈夫でしたが、Windows環境でもopencv_contribを使う場合は①②でダンロードしたファイルからビルドが必要のようです。
私は今回はMac環境で構築したかったためいずれにしてもビルドは必要のようです。
もともとはWindowsでOpenCVを使えるようにしていたので、このビルドしなければいけないということを理解するまでちょっと時間がかかりました。
ビルドするためには当初はターミナルからcmakeコマンドでビルドしていましたが、今回はオプションの設定もありターミナルでは設定を記載するのがちょっとめんどいと感じたのでCMakeというアプリケーションを使用することにしました。
最初はこのアプリケーションの存在をしらなかったのですが使ってみると便利ですね。
ということで、CMakeのサイトの「Download Latest Release」をクリックして早速ダンロードします。
ダンロードが完了したら、そのままインストール作業を行ってみましょう。
④CMakeを使ってビルド
まず、CMakeを使わないでターミナルでビルドを試みたときに参考にした記事は以下の記事です。
参考記事:Java(Eclipse)+OpenCV3.2.0でSURFとかSIFTを使うための環境構築(Mac)
参考記事:MacにOpenCVをインストールする
このあたりを参考にすればCMakeを使わずに、ターミナルでもいけるのではないかと思います。
それではCMakeを使ってOpenCVをビルドします。
ビルドしたファイルを保存するためのフォルダを作成します。私は①でダンロードし解凍して出来たフォルダの中に「build」というフォルダを作成しました。
準備が完了したので、CMakeを起動して「Where is the source code」の欄に①でダンロードして解凍したフォルダを指定します。その下の「Where to build the binaries」には先程作成した「build」フォルダのパスを指定します。
私の場合はこのように指定しました。参考までに。
①でダンロードして解凍してできたファイルのフォルダ名にはバージョンが入っていると思いますが、私は名前を変更してバージョンを消したので以上の画像のように「opencv」のみになっています。
指定できたら「Configure」をクリックしましょう。
次の画面では「Specify the generator for this project」の欄を「Unix Makefiles」を選択しました。そして「Finish」です。
うまくいけば「Configuring done」と表示されると思います。
⑤その他の設定
④までで標準機能はたぶんビルド完了なのですが、私の場合はopencv_contribを使用したかったのとSIFTやSURFを使用したかったのでまだ設定があります。
最初にやったときには④までで終わらしていたので、プログラムが動きませんでした。
それでは続きを書きます。
⑤-1 opencv_contribをビルドするための設定
opencv_contribをビルドするためにはオプションでファイルを指定しなければいけないようです。
「OPENCV_EXTRA_MODULES_PATH」の項目に②でダウンロードした「opencv_contribe」フォルダの「modules」を指定します。
⑤-2 SIFTを使うための設定
SIFTを使うためにはOPENCV_ENABLE_NONFREEというオプションにチェックをしなければいけないようです。
実行しようとしたらエラーがでて調べたら、参考になるサイトがありました。
参考記事:SIFTを使おうとするとError:The function/feature is not implementedと出力された
同じように私もチェックします。
⑤-3 OpenCVのインストール場所の設定
インストール場所も気になる人は設定できます。私はデフォルトのままにしましたので特に変更はしていません。私の場合はデフォルトで以下の場所を指定していました。
⑤-4 Configureを実行してGenerate
諸々の設定が終わったら、最初と同じく「Configure」をクリックして待ちます。
何事もなく終われば、次に「Generate」をクリックしてまた待ちます。
Generating done と表示されれば無事完成です。
makeとinstall
⑤まで終わったら最後にターミナルでmakeとinstallを実行します。
参考記事:High SierraにOpenCV3.4.1をインストールする
私はデスクトップに①で解凍したフォルダ「opencv」を置いているのでターミナルを開いて以下の場所まで移動します。
/desktop/opencv/build
そこで「make」します。
次に同じ場所で「make install」をします。
これで終わりです。
あとは開発環境によってインストールした先のパスを指定する必要があるかと思います。
libファイルやdllファイルがある場所を指定します。
記事を書いてくれた方々に感謝です。
しかし、OpenCV2系のプログラムのまま、OpenCV4.1.0は動きません。
使用するAPIが微妙に変わっていたのでそこも変更します。
imreadメソッドやFeatureDetectorクラスなどそのまま使えないものがありました。
この変更点についてはまた違う記事で書こうと思います。