2014年8月28日木曜日

Windows7 64bit版にOpenCV 3.0 alpha の開発環境を構築した(1)

検索などでこのページを訪れる人が、数は少ないけど、コンスタントにいる。
ちょうどこの上にあるG+1のボタンを押してもらうと、Goolgeの検索に見つかりやすくなるので、ご協力いただきたい。

2.4.9までは、OpenGL、OpenNI、CUDAを使用しなければ、ダウンロードしたファイルを展開して設定すれば使用できたが、今回は自分でビルドする必要があるので手間がかかる。

以下は、Windows7 64bit版上で、Visual Studio 2010 Express Editionでプログラムを開発するためのものである。(Windows7 32bit版でも同じ手順でできる)

ソースの取得

ここに移動し、opencv-3.0.0-alpha.exeをダウンロードする

ダウンロードサイズは350M、展開すると3.5Gになる
フォルダーの構成は、2.4.9と同じくソースとビルドに分けられている

今回、buildには、staticなライブラリは準備されているが、共有ライブラリが準備されていないので、自分でビルドすることになる。

最初に、先ほど展開したc:\の直下に移動させ、フォルダー名をopencv30aに変更している
また、作業用にopencv30aの下にworkのフォルダーを新規に作成している

cmakeの準備と設定

ビルドには、cmakeが必要なのでここに移動しZIP版をダウンロードする

ダウンロードして展開後に、cmake-gui.exeを起動する

ソースの場所を指定する。
バイナリは、先ほど作成したworkを指定する。


Configureボタンを押下すると、コンパイラの選択ダイアログが表示されるので、Visual staudio 10 2010を選択する。




Configureの作業の途中でエラーが発生した。

    for file: [C:/opencv30a/sources/3rdparty/ippicv/downloads/windows-b5028a92224ec1fbc554010c52eb3ec8/ippicv_windows_20140429.zip]
      expected hash: [b5028a92224ec1fbc554010c52eb3ec8]
        actual hash: [d41d8cd98f00b204e9800998ecf8427e]
             status: [6;"couldn't resolve host name"]

ippicv_windows_20140429.zipファイルを見てみるとサイズが0となっており、ダウンロードに失敗しているようだ

そこで手動でippicv_windows_20140429.zipを、ここからダウンロードし、上記ファイルを置き換える


今度は、Configureが成功し、画面上部にオプションの選択画面が表示される。



環境にあったオプションを選択する。今回は、1394やcudaやtestを外している。

選択が終わったら、Generateのボタンを押下
完了するとWorkフォルダーにVisualStudio 2010用のプロジェクト一式ができている

プロジェクトのビルド
workフォルダーのOpenCV.slnをダブルクリック
visual studio 2010が起動する

プロジェクトの構成をリリースに変更しビルドを開始
マシンに依存するが約10分で完了する

libは、C:\opencv30a\work\lib\Release
dllは、C:\opencv30a\work\bin\Release
に作成される。

デバッグが必要な場合は、プロジェクトの構成をデバッグに変更しビルドする
libは、C:\opencv30a\work\lib\Debug
dllは、C:\opencv30a\work\bin\Debug

includeは、workにみつからないので、オリジナルのC:\opencv30a\build\includeを使用することになる

環境構築2に続く

以上


2014年8月27日水曜日

OpenCVアプリのUbuntuでのコンパイル方法

make ファイルの書き方がよくわからないので、最初はg++以下のコマンドベタ打ちしていたが、そのうちshellスクリプトに、リンクするライブラリ名を書き、shellスクリプトの実行でコンパイルするようになった。

3.0 alphaでライブラリの構成が変更され、特にcontribは、モジュールごとに指定する必要がある


いろいろ調べてみると、shellスクリプトに

g++ -o $1 $1.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv`

のように書けば、ライブラリ名を気にする必要がなくなった。

OpenCV 3.0 alpha で SIFTを動かした

OpenCV 3.0 alphaでは、SIFTはcontribに移され、APIも見直しされている

2.4.9では、common interfaceからSIFTが利用できたが、3.0 alphaでは、comon interfaceからSIFTやSURFは削除されている

3.0 alphaでのSIFTの説明は、ここに移動している

内容は、2.4.9のnonfreeの説明と変わらないが、operator ()の説明をよく見ると、keypointのみの取得ができないように見える


サンプルを探してみたが、3.0 alphaでは、SIFT関連のサンプルがなくなっているようだ。いろいろ探し回った結果、
ヘッダーファイルの opencv2/xfeatures2d/nonfree.hpp に

void operator()(InputArray img, InputArray mask, std::vector<KeyPoint>& keypoints) const;

を見つけた

SIFTのサンプルコードは、以下のようになる

// main用
#include <opencv2/opencv.hpp>
//
// contribは個別に指定
//
#include <opencv2/xfeatures2d/nonfree.hpp>

int main( int argc, char** argv )
{
cv::Mat image, gimage;
std::string fname = "./opencv/samples/cpp/baboon.jpg";

cv::xfeatures2d::SIFT detector;
std::vector<cv::KeyPoint> keypoints;

image = cv::imread(fname);

cv::cvtColor(image, gimage, cv::COLOR_BGR2GRAY);

    //void operator()(InputArray img, InputArray mask, std::vector<KeyPoint>& keypoints) const;
detector(gimage, cv::Mat(), keypoints);

cv::drawKeypoints(image, keypoints, image);

cv::imshow( "sift image", image );

cv::waitKey(0);

return 0;
}

以上

OpenCV 3.0 alpha のubuntu 版でSIFTが利用できるよう修正した

OpenCV 3.0 alphaでは、SIFTはcontribに移され、ダウロードしたmainだけでなく、contribを加えてビルドしないといけいない

しかし、25日の時点では、git cloneで取得したプロジェクト一式をデフォルトに設定でビルドすると、SIFTが含まれているxfeatures2dの共有ライブラリが作成されないためSIFTを利用することができない

google先生に訪ねてみると、OpenCVのフォーラムで同じ症状の質問が投稿されている
質問に対し、コメントには、opencv_cudaarithmの依存関係を取り除けば良いとのこと

cmakeのログを確認してみると、
Module opencv_xfeatures2d disabled because opencv_cudaarithm dependency can't be resolved!
のメッセージが出力されていた


根本的な解決かわからないが、以下に対処を示す


  1. opencv_contrib/modules/xfeatures2d/CMakeLists.txtのバックアップを作成
  2. ディタでCMakeLists.txtファイルを開き、ocv_define_module から opencv_cudaarithm を削除する
  3. buildのディレクトリでcmakeを行う
  4. Makefileを開き、Target rules for targets named opencv_xfeatures2dのエントリができていることを確認
  5. あとはmakeを行いmake install とldconfigを行う


contirbはgit cloneで、masterブランチ(日々修正されている)から取得するので、今後上記対処は不要になるかもしれない

以上

2014年8月26日火曜日

OpenCV 3.0 alpha のubuntu 版ではSIFTが動作しない

linux用のcontribには、問題があり、そのままの設定では、SIFTが動作しない
というよりかヘッダーもインクルードできない

installのログを取り、contrib関係を調べてみる

sudo make install > install.log
cat install.log | grep -e Installing | grep -e .so > tmp

tmpを表示し、contrib関連を調べると

libopencv_adas.so
libopencv_bgsegm.so
libopencv_bioinspired.so
libopencv_face.so
libopencv_optflow.so
libopencv_reg.so
libopencv_rgbd.so
libopencv_text.so
libopencv_tracking.so
libopencv_ximgproc.so
libopencv_xobjdetect.so
libopencv_xphoto.so

がインストールされており、libopencv_xfeatures2d.soがいない

解決版は明日に続く

OpenCV 3.0 alphaをubuntu 14.04 64bitでビルドした (2)

今回は、main + contribをビルドする

linuxのソースはここからzipでダウンロードできる
公開されているzip版は、8/15のファイル

マゼンタはmainのみとの差分

  • ダウンロードしたzipファイルを展開し、フォルダー名をopencvに変更する
  • 任意の場所に mkdir opencv300aを作成
  • cd opencv30a 
  • 先ほど展開したフォルダーをopencv30aに移動させる
  • contribをgitで取得

git clone https://github.com/Itseez/opencv_contrib.git


  • 作業フォルダーを作成 mkdir buildcontrib

別途作業フォルダーを作成することにより、環境を切り分けることができるが、ディスクの使用量が増える


  • 作業フォルダーに移動 cd buildcontrib
  • cmakeでmakefileを作成する

cmake -DCMAKE_BUILD_TYPE=RELEASE -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules -DWITH_1394=off -DBUILD_TESTS=off -DBUILD_PERF_TESTS=OFF ../opencv

make -j4
sudo make install
sudo ldconfig

make install のあとにldconfigを行わないと、共有ライブラリが更新されずコアダンプを起こす
また、ldconfigを行うと以前のopencvの共有ライブラリが使用できなくなるので注意

mainとmain + contribの共存は、共有ライブラリを切り分けができれば可能かと 継続調査予定

デフォルトのインストール先は/usr/localである。変更する場合は、cmakeに
-DCMAKE_INSTALL_PREFIX=希望する場所を追加

以上

OpenCV 3.0 alphaをubuntu 14.04 64bitでビルドした

今回はcontribを含まないmainのみ

linuxのソースはここからzipでダウンロードできる

公開されているzip版は、8/15のファイル


  • ダウンロードしたzipファイルを展開し、フォルダー名をopencvに変更する
  • 任意の場所に mkdir opencv300aを作成
  • cd opencv30a 
  • 先ほど展開したフォルダーをopencv30aに移動させる
  • 作業フォルダーを作成 mkdir build
  • 作業フォルダーに移動 cd build
  • cmakeでmakefileを作成する

cmake -DCMAKE_BUILD_TYPE=RELEASE -DWITH_1394=off -DBUILD_TESTS=off -DBUILD_PERF_TESTS=OFF ../opencv


  • make -j4
  • sudo make install
  • sudo ldconfig


make install のあとにldconfigを行わないと、共有ライブラリが更新されず、コアダンプを起こす
また、ldconfigを行うと、以前のopencvの共有ライブラリが使用できなくなるので注意

デフォルトのインストール先は/usr/localである。変更する場合は、cmakeに
-DCMAKE_INSTALL_PREFIX=希望する場所を追加

以上