2015年3月19日木曜日

Windows版 OpenCV 2.4.11のConfigurationを表示してみた

デフォルトで提供されているWindows版の2.4.11のコンフィグレーションを表示させてみた
TBBがONになっていないのは何気にいたい

(顔検出はTBBがONになっているとコア数分並列で計算されるので効果が大きい)

独自のベンチを試してみたらUbuntuのTBB ONのバージョンと時間はほぼ同じであった
ConcurrencyがONになっているので、並列計算が有効になっていると思われる


General configuration for OpenCV 2.4.11 =====================================
  Version control:               2.4.11

  Platform:
    Host:                        Windows 6.1 AMD64
    CMake:                       2.8.11.2
    CMake generator:             Visual Studio 12 Win64
    CMake build tool:            C:/PROGRA~2/MSBuild/12.0/Bin/MSBuild.exe
    MSVC:                        1800

  OpenCV modules:
    To be built:                 core flann imgproc highgui features2d calib3d ml video legacy objdetect photo gpu ocl nonfree contrib stitching superres ts videostab
    Disabled:                    java python world
    Disabled by dependency:      -
    Unavailable:                 androidcamera dynamicuda viz

  Windows RT support:            NO

  GUI:
    QT:                          NO
    Win32 UI:                    YES
    OpenGL support:              NO
    VTK support:                 NO

  Media I/O:
    ZLib:                        build (ver 1.2.7)
    JPEG:                        build (ver 62)
    PNG:                         build (ver 1.5.12)
    TIFF:                        build (ver 42 - 4.0.2)
    JPEG 2000:                   build (ver 1.900.1)
    OpenEXR:                     build (ver 1.7.1)

  Video I/O:
    Video for Windows:           YES
    DC1394 1.x:                  NO
    DC1394 2.x:                  NO
    FFMPEG:                      YES (prebuilt binaries)
      codec:                     YES (ver 55.18.102)
      format:                    YES (ver 55.12.100)
      util:                      YES (ver 52.38.100)
      swscale:                   YES (ver 2.3.100)
      gentoo-style:              YES
    OpenNI:                      NO
    OpenNI PrimeSensor Modules:  NO
    PvAPI:                       NO
    GigEVisionSDK:               NO
    DirectShow:                  YES
    Media Foundation:            NO
    XIMEA:                       NO
    Intel PerC:                  NO

  Other third-party libraries:
    Use IPP:                     NO
    Use Eigen:                   NO
    Use TBB:                     NO
    Use OpenMP:                  NO
    Use GCD                      NO
    Use Concurrency              YES
    Use C=:                      NO
    Use Cuda:                    NO
    Use OpenCL:                  YES

  OpenCL:
    Version:                     dynamic
    Include path:                C:/builds/2_4_PackSlave-win64-vc12-shared/opencv/3rdparty/include/opencl/1.2 C:/Program Files (x86)/AMD/clAmdFft/include C:/Program Files (x86)/AMD/clAmdBlas/include
    Use AMD FFT:                 YES
    Use AMD BLAS:                YES

  Python:
    Interpreter:                 C:/Python27-x64/python.exe (ver 2.7.5)

  Java:
    ant:                         C:/Program Files (x86)/apache-ant/bin/ant.bat (ver 1.9.2)
    JNI:                         C:/Program Files/Java/jdk1.6.0_45/include C:/Program Files/Java/jdk1.6.0_45/include/win32 C:/Program Files/Java/jdk1.6.0_45/include
    Java tests:                  NO

  Tests and samples:
    Tests:                       NO
    Performance tests:           NO
    C/C++ Examples:              NO

Windows10 テクニカルプレビュー 64bit版にOpenCV 2.4.11の開発環境を構築した

検索などでこのページを訪れる人が、数は少ないけど、コンスタントにいる。
ちょうどこの上にあるG+1のボタンを押してもらうと、Goolgeの検索に見つかりやすくなるので、ご協力いただきたい。
 
久しぶりにwindws版を設定した。基本いつもと同じであるが、以後対象を64bitを前提に記す。

Windows版は、tbb、OpenGL、OpenNI、CUDAを使用しなければ、ダウンロードしたファイルを展開して設定すれば使用できるので、30分もかからず環境ができる。
(ダウンロード時間や、Visual Studio Community 2013のインストールを除く)


1 ここからWindows版をダウンロードする
ダウンロードサイズは350Mバイト

2 OpenCV-2.4.11.exeを実行しインストールディレクトリc:\を指定する

3 展開後、ディレクトリ名をopencvからopencv2411に変更する

4 OSの環境変数の設定(要管理者権限)
  コントロールパネル、システムとセキュリティ、システムを開き
  システムの詳細設定の環境変数ボタンを押し
  システム環境変数のPathの編集
  末尾に";C:\opencv2411\build\x64\vc12\bin"を追加
 (この作業後、一度サインオフし、再度サインインする)

5 Visual Studio 2013 Communityのプロパティファイルを作成する
以後のテキストをコピーし、ファイル名OpenCV2411_64.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>
    <IncludePath>C:\opencv2411\build\include;$(IncludePath)</IncludePath>
  </PropertyGroup>
  <PropertyGroup>
    <LibraryPath>C:\opencv2411\build\x64\vc10\lib;$(LibraryPath)</LibraryPath>
  </PropertyGroup>
  <ItemDefinitionGroup>
    <ClCompile>
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
    </ClCompile>
  </ItemDefinitionGroup>
  <ItemGroup />
</Project>

6 Visual Studio 2013 Communityのプロパティファイルの設定を行う
新規プロジェクトを作成し、viewのメニューから、Other Windows Property Managerを選択


property windowを表示し、Debug x64と Relearse x64に先ほどのファイルを追加する




7 手持ちのサンプルをmainにコピーしビルドし動作を確認する

以上

2015年3月4日水曜日

Raspberry Pi 2でOpenCV 2.4.11をビルドした


2.4.10の記事はここ

ccmakeによるパラメータの設定

1 コンパイラの変更
/usr/bic/gcc-4.8
/usr/bin/g++-4.8
ここで一旦cを押しconfigureを行う

注意
コンパイラを変えるとコンパイラ以外のすべての設定がデフォルトに戻るので再度指定する必要がある。

2 tbbの設定

ccamkeでtbb=onにして、
cを押しconfigureを行うと、tbbソースのダウンロードに失敗しているようである。

そこで一旦ccmakeを抜け、
wget https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb43_20141204oss_src.tgz

により手動での取得を試みるがエラーが生じる

ERROR: The certificate of `www.threadingbuildingblocks.org' is not trusted.
ERROR: The certificate of `www.threadingbuildingblocks.org' hasn't got a known issuer.

certificationを登録しないで、取得するには以下のようにする

wget --no-check-certificate https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb43_20141204oss_src.tgz

ダウンロードしたファイルは、
3rdparty/tbbにコピーしておく
(ここに0バイトの残骸が残っているので、上書きする)

3 再度ccmake を起動し、残りのパラメータを設定
cを押しconfigureし、gによりgenarateを行う

ccmakeを終了し、time make -j4でビルドする

real    50m51.860s
user    173m49.150s
sys    5m43.170s

4 インストール
sudo make install
sudo ldconfig

以上

2015年2月27日金曜日

OpenCV 2.4.11がリリースされた

議事録に記載されていないのに 2.4.11版が突然リリースされた。

現時点では、windowsとLinuxのみ

差分の記述がないのでMeld差分ビューワーでフォルダーを比較して気づいた点

CMakeLists.txt
デフォルトでNEONがONになっている

Haarcascadeのデータ形式が新フォーマットに

モジュールの修正が多いが、ほとんどtipoや細かいバグの修正

GPU sampleの修正が多い


全文サーチでNEONを調べるてみたが、ファイルが1個増えているが、どれか不明
oclのファイルの数は変化なし

明日といっても今日になっているが、ビルドしてパフォーマンスを見てみる

2015年2月23日月曜日

OpenCV 3.0betaでは、tbbが無効である

先週ベンチマーク用に、masterのソースを取得し、ビルドしてみたが、以前として、tbbが有効にならない

configrationでは、tbbが認識されソースもダウンロードされており、ビルドも成功するが
できた自作のベンチのスコアが芳しくない

そこでライブラリの依存関係を見てみると、3.0betaでは、tbbがリンクされていない

ldd /usr/local/lib/libopencv_core.so
    linux-vdso.so.1 =>  (0x00007fff039fe000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f1914166000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1913f62000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f1913d43000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f1913b3b000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1913835000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f1913530000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f191316a000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f1912f54000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f1915049000)

ちなみに2.4.10の場合
ldd /usr/local/lib/libopencv_core.so
    linux-vdso.so.1 =>  (0x00007ffff31db000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f35ce7ec000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f35ce5ce000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f35ce3c5000)
    libtbb.so => /usr/local/lib/libtbb.so (0x00007f35ce19a000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f35cde94000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f35cdb8f000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f35cd7c9000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f35cd5b3000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f35ceed4000)

と正しくリンクされている。

その他
3.0rcのリリース時期が、議事録では1/26日から2weeks以内と見積もりされているが、この調子では、かなり延期するのではと思われる。

OpenCV3.0betaで、HOG+SVMの辞書を作成

OpenCV 3.0 betaのサンプルのcppにtrain_HOG.cppがあるのを見つけた。
中を見てみると自分でHOGの辞書を作ることができるようだ

ソースの内容は大きく分けると

データの読み込み
ファイルリストを読み込みpositive, negativeの画像を読み込む。

ただし、この部分はINRIAデータに依存した記述になっている。
また、INRIAデータの解釈を間違っており、サンプルのままでは、よくない結果となるよ予想される。INRIAの画像は、4方に16画素のマージンが含まれており、実際の画像は、64x128が正しい

特徴量の計算
各画像のHOG特徴量を計算し、gradient_lstに格納している
hog.compute( gray, descriptors, Size( 8, 8 ), Size( 0, 0 ), location );

const vector<Point>& locationsに座標が格納されている場合は、その座標で計算する
locations.sizeが0の場合、決められた座標で計算する

SVMによる学習
SVM::Params paramsにパラメータをセットし、
Ptr<SVM> svm = StatModel::train<SVM>(train_data, ROW_SAMPLE, Mat(labels), params);
で学習を行なう

3.0はいろいろ問題があるので、2.4.10でビルドできないか試したところ、読み込みと特徴量のところは問題がなかったが、2.4.10では、mlクラスはないので、この部分を自分でlibLinearに置き換えれば、2.4.10で自分の辞書ができそうである。

2.4.10のHOGのソースの場所
opencv2410/modules/objdetect/src/hog.cpp

3.0のpython版による手書き数字識別のチュートリアル
OCR of Hand-written Data using SVM

2015年2月20日金曜日

OpenCV 3.0betaの変更点

自作のベンチマークで使用している関数が、3.0betaでエラーとなったので修正した。
いずれも3.0のマニュアルを見てもよくわからなかったので、メモを残しておく

1 TickMeter
  3.0から削除されているので2.4.10のソースからそのままコピーした
  • opencv2410/modules/contrib/include/opencv2/contrib/contrib.hpp
  • opencv2410/modules/contrib/src/spinimages.cpp

2 ORB

 コンストラクター
 cv::Ptr<cv::ORB> detector = cv::ORB::create();
 
 キーポイント
    detector->detect(gray1, keypoint1);
 
 特徴量
    detector->compute(gray1, keypoint1, descriptor1);

3 StereoBM
  コンストラクター
  cv::Ptr<cv::StereoBM> bm = cv::StereoBM::create();

 差分
    bm->compute(mat2, mat3, tmp);

以上