H2 Transmission

本・漫画・資格・PC・自分用メモなどを書く雑記ブログ

【Mac】JavaでOpenCV4.1の環境構築と特徴抽出(SIFTやSURF)

はじめに

MacでのOpenCVの環境構築で苦戦したので備忘録として残しておこうと思います。

色々なサイトを参考にしながらやりましたが理解するまでなかなか大変でした。

自分がやった工程もあっているかわからないですが参考になれば・・間違ってたらすみません。

経緯

OpenCV2系を利用したSIFTやSURFでの特徴抽出をするプログラムをOpenCV4.1で動かしてみようと思い、今回の環境構築を始めました。

Windowsやラズパイ、言語ではPythonをつかった内容での参考記事は多かったのですがなかなかMacJavaという組み合わせでの記事があまりなく苦戦を強いられました。

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」をクリックしてください。 

f:id:yumeoimusi:20190714154537p:plain

クリックすると、zipファイルがダウンロードされるので任意の場所に解凍してください。標準機能だけでよいのであれば②のファイルのダウンロードはしなくてもよいです。

opencv_contribのダウンロード

opencv_contribもダンロードしておきます。
私はここを最初にしていなかったので最初からやり直すことになりました。

私の場合はSIFTやSURFを使いたかったのでこのファイルが必要でした。
必要ない人はスルーしてください。

opencv/opencv_contrib(Github) から4.1.0のzipをダウンロードします。

f:id:yumeoimusi:20190714155227p:plain

 ダンロードしたファイルは解凍して、①で保存した場所と同じところに置いておくのがよいでしょう。

③CMakeのダウンロード

Windows環境でopencv_contribを使わない場合はビルドしなくても大丈夫でしたが、Windows環境でもopencv_contribを使う場合は①②でダンロードしたファイルからビルドが必要のようです。

私は今回はMac環境で構築したかったためいずれにしてもビルドは必要のようです。
もともとはWindowsOpenCVを使えるようにしていたので、このビルドしなければいけないということを理解するまでちょっと時間がかかりました。

ビルドするためには当初はターミナルから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」フォルダのパスを指定します。

私の場合はこのように指定しました。参考までに。

f:id:yumeoimusi:20190714163837p:plain

①でダンロードして解凍してできたファイルのフォルダ名にはバージョンが入っていると思いますが、私は名前を変更してバージョンを消したので以上の画像のように「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」を指定します。

f:id:yumeoimusi:20190714164935p:plain

⑤-2 SIFTを使うための設定

SIFTを使うためにはOPENCV_ENABLE_NONFREEというオプションにチェックをしなければいけないようです。
実行しようとしたらエラーがでて調べたら、参考になるサイトがありました。

参考記事:SIFTを使おうとするとError:The function/feature is not implementedと出力された

 同じように私もチェックします。

f:id:yumeoimusi:20190714170930p:plain

⑤-3 OpenCVのインストール場所の設定

インストール場所も気になる人は設定できます。私はデフォルトのままにしましたので特に変更はしていません。私の場合はデフォルトで以下の場所を指定していました。

f:id:yumeoimusi:20190714171354p:plain

⑤-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クラスなどそのまま使えないものがありました。

この変更点についてはまた違う記事で書こうと思います。