Java
OpenCV

JavaでOpenCV_Contrib(ArUco)を使う!(前編 - ビルド編)

はじめに

OpenCVをJavaで使うのはめっちゃ面倒だということを宣言しておきます。
といいますと、まず使っている人がものすごく少ないと思われます。コード例や質問は英語でみても少ないです。
しかしながら、Pythonよりも実行速度が早いため、使い所は多くあると思っています。
ちなみに、私がこれを行っているのはC/C++/C#が使えないからですけれど・・・。

OpenCV

OpenCVとは、画像処理のオープンソースライブラリで、かなり広く使われています。
思いついたことはだいたい関数を組み合わせるとできるというぐらい幅広い機能を持っています。

OpenCV_Contrib

OpenCV_Contribとは、OpenCVにおいて最新の技術で安定していないか寄付されたため(だった気がする)、補助としての扱いを受けているライブラリです。
また、OpenCV_Contribのために本体を使うのみであればビルドは不必要です。OpenCV.org (公式ページ)からダウンロードすれば入手できます。
しかし、OpenCV_Contribは補助的な扱いを受けているため自分でビルドする必要があるようです。

ArUco

ARを行えるライブラリ。QRコードの生成、認識ができます。(コード等は次回、記載します。)

準備

ダウンロード

ダウンロードするもの 説明
OpenCVのプロジェクト・ソース 必ずConribとバージョンを合わせてください。
自分はVersion: 3.4.4を使っています。
OpenCV_Contribのプロジェクト・ソース 必ずConribとバージョンを合わせてください。
自分はVersion: 3.4.4を使っています。
CMake 適当に。
Visual Studio 自分は、Visual Studio Community 2017を使いました。(C++コンパイラーとかは入れる必要があった気がします…)
Python Javaを使うときでも多分必要です。
自分はVersion: 3.7.1を使っています。
JDK 自分は、Java8u191を利用しています。
Ant 自分は、Version: 1.10.5を利用しています。

インストール

OpenCV, OpenCV_Contribのプロジェクト・ソースは展開してください。
CMake, Visual Studioは各自でインストールしてください。

Java, Ant環境変数

これが意外と曲者?で、正しく設定しないとビルドできません。(私はここでハマりました)

ダウンロードするもの 説明
ANT_HOME 展開したAntのフォルダ。
(ex: C:\SOFT_File\apache-ant-1.10.5)
JAVA_HOME Javaのインストールされているフォルダ。
(ex: C:\Program Files\Java\jdk1.8.0_191)
Path 次の内容を追加してください。
C:\Program Files\CMake\bin, %ANT_HOME%\bin, %JAVA_HOME%\bin
(ex: C:\Program Files\CMake\bin;%ANT_HOME%\bin;%JAVA_HOME%\bin; )

CMakeの実行

ビルドをする前にCMakeでビルドの準備をしないといけないらしいので行います。

項目
Where is the source code 展開したフォルダのパスを指定します。
(ex: C:/SOFT_File/opencv-3.4.4)
Where to build the binaries 私は展開した本体ライブラリの下にbuildフォルダを作ってこのフォルダのパス指定しました。
(ex: C:/SOFT_File/opencv-3.4.4/build)

これらを指定したら、「Configure」を押してください。
この時、コンパイラーを指定します。
今回はビルドでVisual Studioを使うので、Visual Studio(バージョンに合うもの)を指定しましょう。
(自分は「Visual Studio 2017 Win64」を選択しました)

すると、赤いものがば~っと出てくるが気にせず。
「Grouped」, 「Advanced」のチェックボックスを両方有効にします。

項目
OPENCV_EXTRA_MODULES_PATH 展開したOpenCV_Contribの親フォルダの下にあるmodulesを指定します。
(展開したOpenCV_Contribの親フォルダではないです)

もう一度、Configureを押します。

「BUILD_SHARED_LIBS」のチェックボックスを無効にしてください。
(参考: http://answers.opencv.org/question/189941/java-cant-find-dependent-libraries/)

またもう一度、Configureを押してください。

「BUILD_FAT_JAVA_LIB」のチェックボックスを有効にしてください。

さらにもう一度、Configureを押してください。

この時、赤い物が出ていなければOKです。
出ていれば、修正をお願いします。

ここで、ログの出力を確認します。
特にJavaのところがちゃんと以下のようになっているか確認してください。(あくまで例ですが)

  Java:                          export all functions
    ant:                         C:/SOFT_File/apache-ant-1.10.5/bin/ant.bat (ver 1.10.5)
    JNI:                         C:/Program Files/Java/jdk1.8.0_191/include C:/Program Files/Java/jdk1.8.0_191/include/win32 C:/Program Files/Java/jdk1.8.0_191/include
    Java wrappers:               YES
    Java tests:                  YES

全文: https://pastebin.com/u2Qiy5EL

問題がなければ、
「Generate」を押してください。

完了しましたら、「Open Project」を押してください。
すると、Visual Studioが起動します。(次項へ)

Visual Studioでビルドをする

いろいろ読み込みを行うため、しばらく待ちます。
真ん中のほうにある「Release」/「Debug」を「Release」にします。また隣のやつを「x64」にしてください。
上のメニューバーの 「Build」 → 「Batch Build」を押してください。
ALL_BUILDINSTALLをともにチェックして、実行してください。

かなーり待つ(1hぐらい?)と、先程にCMakeでWhere to build the binariesで指定したフォルダ(ex: (OpenCVの展開フォルダ)/build/install)に生成されているはずです。

SC_java_2018-12-8_0-25-40_No-00.png

生成されていない、またはこの記事に問題があれば、コメントをおねがいします。

参考

Building OpenCV Using MinGW on Windows - You, Myself and Community
Building Java Wrapper For OpenCV - You, Myself and Community
OpenCVの環境構築(OpenCV 3.0/3.1) - Build Insider
初めてのOpenCV開発 ― CMakeを使ったOpenCVのカスタマイズ【OpenCV 3.1.0】 - Build Insider
Installing OpenCV for Java — OpenCV Java Tutorials 1.0 documentation
OpenCV.org(公式ページ)
OpenCV - Wikipedia
Java版OpenCV入門

次回

次回は、実際に軽いプログラムを動かしてみたいと思います。