2014年8月28日木曜日

OpenCV 3.0 alpha の新機能を試してみた。(1)

OpenCVの3.0 alphaには、多くの新機能が追加されている。

Windows版の開発環境が正しくできているか確認するために、今回追加された新機能であるAKAZE特徴点検出を試してみた。
説明はここ

C:\opencv30a\sources\samples\cpp\tutorial_code\features2DにAKAZE_match.cppのサンプルが格納されているのでこれを参考にテストプログラムを作成した。

実行結果




開発マシンがOpenCLに対応していないので、エラーをはいている

ソース

#ifdef _DEBUG
//Debugモードの場合
#define CV_VER "300d"
#else
//Releaseモードの場合
#define CV_VER "300"
#endif

#pragma comment(lib, "opencv_core"CV_VER".lib")
#pragma comment(lib, "opencv_imgproc"CV_VER".lib")
#pragma comment(lib, "opencv_highgui"CV_VER".lib")
#pragma comment(lib, "opencv_video"CV_VER".lib")
#pragma comment(lib, "opencv_objdetect"CV_VER".lib")
#pragma comment(lib, "opencv_imgcodecs"CV_VER".lib")
#pragma comment(lib, "opencv_features2d"CV_VER".lib")

#include "stdafx.h"
// main用
#include <opencv2/opencv.hpp>

int main( int argc, char** argv )
{
    std::string fname = "c:\\tmp\\kan.jpg";

    cv::AKAZE akaze;

    std::vector<cv::KeyPoint> keypoints;
    cv::Mat descriptors;

    cv::Mat image, gimage;
    image = cv::imread(fname);

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

    akaze(gimage, cv::noArray(), keypoints, descriptors);
   
    cv::drawKeypoints(image, keypoints, image);

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

    cv::waitKey(0);

    return 0;
}


以上

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

変更点が多いので” Windows7 64bit版にOpenCV 3.0 alpha の開発環境を構築した(5)"に書き直した


 OSの環境変数の設定(要管理者権限)
  コントロールパネル、システムとセキュリティ、システムを開き
  システムの詳細設定の環境変数ボタンを押し
  システム環境変数のPathの編集

  末尾に";C:\opencv30a\work\bin\Release;C:\opencv30a\work\bin\Debug"を追加
 (この作業後、一度ログオフし、再度ログインする)

Visual C++ 2010 Expressのパスの設定を行う

以前の記事では、システム全体のプロパティを書き換えていたが、この方法ではOpenCVに関係ないプロジェクトも影響を受ける

今回は、新規にプロパティシートを作成し、OpenCV3.0alphaのプログラムを作成する場合は、作成したプロパティシートを読み込むことでパスの指定を行うことになる。

プロパティシートは、プロジェクト作成後に、メニューの表示でプロパティマネージャを呼び出し、プロジェクト名を選択した状態で、既存のプロパティシートの読み込みボタンを押し、OpenCV30a.propsを読み込む。

プロパティシートの作成

c:\tmpに、エディタを開き以下の内容をコピーし、OpenCV30a.propsという名前でファイルを保存する。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets" />
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup />
  <ItemDefinitionGroup>
    <ClCompile Condition="'$(Configuration)' == 'Release'">
      <AdditionalIncludeDirectories>C:\opencv30a\build\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
    </ClCompile>
    <Link Condition="'$(Configuration)' == 'Release'">
      <AdditionalLibraryDirectories>C:\opencv30a\work\lib\Release;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup>
    <ClCompile Condition="'$(Configuration)' == 'Debug'">
      <AdditionalIncludeDirectories>C:\opencv30a\build\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
    </ClCompile>
    <Link Condition="'$(Configuration)' == 'Debug'">
      <AdditionalLibraryDirectories>C:\opencv30a\work\lib\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup />
</Project>


以上




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=希望する場所を追加

以上

OpenCV 3.0 alpha がリリースされた

8/21に公式から3.0アルファの公式アナウンスがあった

公式のアナウンスをおおまかに訳してみた

概略
プロジェクトの構成を、maincotribに分割

contribには、顔認識、文字検出、文字認識、新たなエッジ検出、state-of-art inpainting, 奥行き処理, 新オプティカルフロー and 追跡アルゴリズム など追加されている

mainとcontribの違い

contribのユニットテストはまだ定期的に行われていない

  • ビルドには、CMakeのオプションに、OPENCV_EXTRA_MODULES_PATH=/modules を設定
  • ドキュメントは、docs.opencv.org/masterに自動で作成される。最終版では、より統一性が整えられる
  • mainは、Itseezがサポートし、安定だが、新規性が少ない
  • opencv_contribは、実験的はコードのためのものである。いくつかいは、APIが変更されるかもしれない
  • あなたの新規アルゴリズムの投稿のための場所である


2 Intel and AMDの協力により、T-API (“transparent API”)と呼ばれる技術を通じて、多くのアルゴリズムで容易にGPUを利用できるようになった。

専用のガイドを準備するので、目を通して、サンプルを試してほしい

3 Intelは、さらに、OpenCVのユーザに、無償で、Intel Integrated Performance Primitives (IPP) を提供した。
IPP対応OpenCVとアプリケーションを無償で再配布できる。
IPPに、いくつかのAPIでは、かなりの速度向上がえられた。

4 新規機能

  • 文字検出と認識
  • HDR
  • KAZE/A-KAZE特徴量
  • Smart segmentation and edge-aware filters
  • Waldboostによる車検出
  • TLD tracker and several common-use optimization algorithms
  • Matlab 連携
  • Python 3を含む連携拡張とチュートリアル
  • VTK使用による3D表示
  • RGBDモジュール
  • 線検出
  • 多くの写真用アルゴリズム
  • Shape descriptors, matching and morphing shapes
  • 長期追跡と、saliency-based improvements
  • ポーズ推定とチュートリアル
  • Line descriptors and matchers
  • ライブラリの改善
  • NEON最適化
  • foreach loopの高速化
  • Image alignment (ECC algorithm)
  • GDAL image support
  • 魚眼カメラモデル
  • OSX framework build script
  • Multiple FLANN 改良
  • WinRT supportの改善
  • Latent SVM Cascade
  • Logistic regression
  • 5点ポーズ推定


これはアルファ版なので、多くの問題点がある (Python連携の一部で)
これらは修正中であり、フィードバックを期待している

3.0ベータは、今年秋中旬、最終リリースは、クリスマス休暇までには、準備できるはずである