@テク野路ジーロード

配信タグシェアリングシステムpickvyを開発、運営開始。最近は、Googleアナリティクスを研究中

siftを用いた画像比較を、opencvによるjavaコードで試すまでの道程

[あらまし]
opencvを使った、siftを用いた画像比較を目指す
(私のシステム環境は、Linuxで、CentOS7)

そのために、以下を実施

1.javaコードを使った、opencvによるsiftを用いた画像比較コードを作成
それをコンパイルするために、
2.opencv2.4.11を一からダウンロード
3.JAVA_HOMEを設定
4.antをインストール
5.2をbuildし、java用ライブラリを取得
その結果、無事にコンパイルが通り、画像比較を試せた。
その先を目指すことを心に誓う。

---

[内容]

出発点となる、javaの具体的なコードを以下にて確認。
JavaでOpenCVつついてSIFTとSURFしてみる - Ramens-Room

上記サイトがさらに参考にしていたサイト(c++コード、東工大の方?)
OpenCV2でSIFT, SURFによる画像の対応付け - Kesin's diary


自分の環境(CentOS7)でjavaコードをコンパイルしたが、エラー発生。
そりゃそうだよね、環境が一緒じゃないんだしさ。
そもそも、opencvをjavacvで扱う環境は構築してたけど、それじゃダメ(当たり前だし!)

もう本当、何も考えずに、
Lireからダウンロードしたopencvの「dll」があったので、java用にパス通して使ってみた。
JavaでOpenCVを使う | JProgramer

 

当然、動かない...。そりゃね、拡張子が「dll」だしね。当たり前だよね。
なんとなくわかってたけど、なんとなく避けてた、opencvの再コンパイルを実施するしかないか。
opencvのこのページ↓を見ながら、再コンパイルを決意した。
http://docs.opencv.org/doc/tutorials/introduction/desktop_java/java_dev_intro.html
(日本語的には、タイトルは「Java開発のはじめに」という感じ)
javaライブラリを生成するまでの手順やポイントが説明されている)

 実際に試してみると、コンパイル前のbuildチェック時に「java」が出てこない。
OpenCVモジュールとして、「java」が「Unavailable」になってしまっている...。

f:id:sunday150:20150906192109p:plain

java開発のはじめに」をもう一度読むと、
そういうときはJAVA_HOMEが設定されているかチェックしろ、と書いてあった。

JAVA_HOMEなんて設定したことあったっけか?と思い出し、確認。
JAVA_HOMEなんて、存在しなかったよ。
そもそも、今利用しているjavaプログラムのどこをJAVA_HOMEとして設定すればいいんだ?
そこで以下のページを参考にしてみました。
kakakikikekeのブログ: OpenJDKをyumインストールした場合のJAVA_HOMEの設定の仕方

 

うん、それで、JAVA_HOME設定したけど、やっぱり、javaが出てこない。
以下のページを見て、cmakeのバージョンが古いのかと思ったけど、そうじゃない。
OpenCV java のビルドに失敗する • C言語交流フォーラム ~ mixC++ ~
俺のcentos7には新しいバージョンのcmakeがインストール済みだった。

 

java開発のはじめに」をさらにもう一度読むと、ANTについて記述されている。
俺の英語力ではANTが必須だとは読めないけど、俺のcentosにはANTは存在しない。
試しにインストールしてみることを決意。
以下のページを参考にしました。
CentOSにantをインストールする方法。 » ブロードヒューマンネットワーク社員ブログ

 
結果、出た(喜、涙)。コンパイル前の buildチェックでjavaが出て来た。

f:id:sunday150:20150906192202p:plain

buildを実行! javaライブラリの「libopencv_java2411.so」が生成できた

f:id:sunday150:20150906193431p:plain

 

そして、元々のjavaコードをコンパイルしたら成功。
2つの画像の特徴点を探して、マッチングさせることにも成功!

 

[今後やりたいこと]

1)surf版も試してみたい。
2)siftやsurfを使った類似画像検索もやりたい。

aidiary.hatenablog.com