Help us understand the problem. What is going on with this article?

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

はじめに(?)

研究で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)を使う!(後編 - プログラミング編)

smk7758
画像処理に興味があります!OpenCV難しいです。 進捗報告等用Twitterアカウント: @smk7758_izuru
http://smk7758.f5.si
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away