Edited at

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


はじめに(?)

研究でARマーカーを使ったほうがいい場面に出くわしたのでARマーカーを認識できるライブラリを探してArUcoというものに出会いました。この記事は、ArUcoライブラリを使えるようになるまでの方法について示しています。Javaを使っているのは自分がC/C++/C#が使えないからなのです。

また、OpenCVをJavaで使うのはめっちゃ面倒だということを宣言しておきます。

といいますと、使っている人がものすごく少ないと思われるためです。コード例や質問は英語でみても少ないです。

しかしながら、Pythonよりも実行速度が早いため、使い所は多くあると思っています。


OpenCV

OpenCVとは、画像処理のオープンソースライブラリで、かなり広く使われています。

思いついたことはだいたい関数を組み合わせるとできるというぐらい幅広くカバーされています。


OpenCV_Contrib

OpenCV_Contribとは、OpenCVにおいて最新の技術を中心としたものが補助としての扱いを受けているライブラリです。

また、本体を使うのみであればビルドは不必要です。OpenCV.org (公式ページ)からダウンロードすれば入手できます。

しかし、OpenCV_Contribは補助的な扱いを受けているためか自分でビルドする必要があるようです。

このページではこのビルドの方法について


ArUco

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


準備


ダウンロード

ダウンロードするもの
説明

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

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


参考

Windows10でOpenCV3.4.1とopencv_contrib環境構築

新しい内容で、画像も多く使われていておすすめ。

Building OpenCV Using MinGW on Windows - You, Myself and Community

Building Java Wrapper For OpenCV - You, Myself and Community

↑Java版として一番わかりやすかった。

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入門


次回

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

JavaでOpenCV_Contrib(ArUco)を使う!(後編 - プログラミング編)