2011年1月30日日曜日

OpenCV:Eclipse/CDTとOpenCV2.2による画像認識

OpenCV2.2Eclipse/CDTを使ってOpenCVで学ぶ画像認識を再現しています。今回は 第4回 オブジェクト検出器の作成方法 をやってみました。

まずソースコードなどのデータData.zipをここに書いてあるリンクからダウンロードして展開します。次いで第4回の3ページにあるようにOpenCVのツールとdllを展開したディレクトリ(Dataの下にさらにDataというディレクトリがあると思います。ここです。)にコピーします。OpenCV2.2では少し名前が変わっているのでOpenCVのインストールディレクトリのbinディレクトリから下記をコピーしました。(もしかしたらdllはこの4つ全部いらないのかも知れません。)

opencv_createsamplesd.exe
opencv_haartrainingd.exe
libopencv_core220d.dll
libopencv_highgui220d.dll
libopencv_imgproc220d.dll
libopencv_objdetect220d.dll

で、まず createsamples.exe の代わりに opencv_createsamplesd.exe を使ってここと引数は同じにして実行します。これで学習用の正解画像が1枚のサンプル画像からいろいろ向きを変えるなどしてたくさん生成されたわけです。

次に出来た正解画像と最初から用意されていたNG画像を使って学習を行います。haartraining.exe の代わりに opencv_haartrainingd.exe を使い、引数は同じにして実行します。僕のPCでは3時間以上かかって学習が終わりました(^^;

で、その結果はここほどの結果は出ず、例の2では一番右のロゴしか認識されませんでした(^^; OpenCV2.2のツールが以前のツールと変わっているのでしょうか?

ということで認識率は悪いですが、とりあえず学習したモデルを自分で作ることは出来ました。後は学習画像をどう集めるか? 学習時のパラメータの設定をどうするか? などを試行錯誤して認識率を高めるのでしょうね。

2011年1月27日木曜日

OpenCV:Eclipse/CDTのライブラリ設定

OpenCVで学ぶ画像認識を参考にしながらOpenCVのお勉強中です。今日はオブジェクトを検出してみようということでやってみました。このページのソースをEclipseに貼り付けます。で、先頭に次のおまじないを付けます。

#include "opencv2/opencv.hpp"

でコンパイルは通りますが、

FaceDetection.cpp:34: undefined reference to `cvHaarDetectObjects'
FaceDetection.cpp:52: undefined reference to `cvReleaseHaarClassifierCascade'

というリンクエラーが出ます。これらの関数がどのライブラリに入っているのかが分からなかったので試行錯誤の末、

opencv_legacy220d.dll

をProject→PropertiesのC/C++ GeneralのPaths and SymbolsのLibrariesタブに設定しました。これで無事走らせることができました(^^V ここにライブラリの構成を書いてくれていました。これを見ればよかったです(^^;

学習モデルは haarcascade_frontalface_default.xml より haarcascade_frontalface_alt.xml を使った方が、僕の場合にはよい結果を得ることが出来ました。

2011年1月25日火曜日

OpenCV:Eclispe/CDTでアプリケーションを実行

ここでbuildは出来たのですが、ちゃんと走りません。ちゃんとライブラリにPathが通っていないようです。Project→PropertiesのC/C++ GeneralのPaths and SymbolsのLibrary PathsにOpenCVのbinフォルダを指定(このフォルダにdllファイルが入っています)を指定してもうまくいきません。結局、Windows側の環境変数(Explorerのマイコンピュータの上で右クリックしてプロパティで出てくるWindowの詳細設定タブの環境変数ボタン(下図参照)を押して出てくるWindowで「ユーザの環境変数」側のPath環境変数(ここになかったら新規ボタンで追加、あったら編集ボタンを押す)にOpenCV\binのようにdllの入っているフォルダを指定します。

この状態でEclipseを起動(すでに起動していた場合には再起動しないと環境変数の設定が有効にならないようです。WindowsXP使用です。)して、実行すると見事実行されました(^^V しかしEclipseの中だけでPathなどの設定も出来ないものなのでしょうか?

2011年1月24日月曜日

箱根:精進池

昨日、箱根の精進池に行ってきました。途中、渡邊ベーカリーでパンを買い、精進池に向かいます(^^V



精進池を見ると、いきなり凍ってました(^^;


これだけしっかり凍っている池は初めてです。

精進池の駐車場に止めてまずは昼飯(^^V 温泉シチューパンやらアンパンを頂きました。


食後に精進池周辺をめぐります。雪が凍った氷をすごい霜柱が持ち上げています。



雪国のようでした。箱根に行かれる方はそろそろチェーンやスタッドレスのご用意が必要ですね。まあ道は雪かきされているのか、周囲にしか雪はありませんでしたが。お気をつけて。

2011年1月18日火曜日

Thunderbird:Outlookからのメールの添付ファイルwinmail.datを開く

Outlookから来たメールの添付ファイルが winmail.dat という名前で着くことがあるようです。今日来ました。で、ちゃんとありました(^^V なんとその名も Lookout というプラグイン(^^; これで無事添付ファイルが開けます。

2011年1月15日土曜日

VC++:dllの呼び出し方

同じ関数をいろいろなところで使うため、その関数をdllにしてみました。が、呼び出せません(^^;
ここに、

”関数subをDLLにしたい場合,次のようにソースプログラムを作成する.外部プログラムから呼び出したい関数(この場合sub)の前に __declspec(dllexport)という おまじないをつけておく(このおまじないがついていない関数はDLL外部からは見えないので安心).”

と書いてあります。この通りにおまじないを付けて、コンパイルリンクしてdllを作り、これで出来る.libファイルを VC++のプロジェクト→プロパティ→構成プロパティ→リンカ→入力の追加の依存ファイルに追加しておけばよいようです。

使う側で関数宣言が必要になりますのでお忘れなく。またdll自体はdllを使うプロジェクトのディレクトリにコピーしておかないと実行時にdllがロード出来ないエラーとなります。環境変数PATHへ元の(dllを作った)ディレクトリを設定してもだめなようです。どうすればいいのかな?

2011年1月9日日曜日

OpenCV:Eclispe/CDTでの開発のためのbuilt 2

難航していたEclipseの設定ですが、結局Librariesの設定でminGWでは lib*****.a のlibと.aを外して設定するとよい(Linuxではそうでしたね(^^;)ということが判明しまいした。ですので、EclipseのProject→Propertiesで下記のような設定をすると無事リンクまで出来ました(^^V




ライブラリのディレクトリには下記のようにここで作ったライブラリが入っています。



使用したソースはこんな感じです。


#include "stdio.h"

#include "opencv2/opencv.hpp" //推奨されていないので本当は対応するincludeファイルを細かく指定してください。

int main(){
    CvRTrees forest; //Random Treesのクラス

    forest.load( "abc.txt" ); //状態のロード。OpenCVの機械学習での共通のメソッド
    return 0;
}


ここここも参考にさせていただきました。ありがとうございます。

2011年1月5日水曜日

OpenCV:Eclispe/CDTでの開発のためのbuilt

OpenCVをEclipse/CDT(というかminGW)で使うためには標準で提供されているバイナリ(VisualStudio用)では使えません。そこでOpenCVをソースからコンパイル中。ここここを参考にして、Cmakeを使ってコンパイル中です。なかなか時間がかかるものです(^^;

で、なんとか出来かけてるなと思っていたら、
のようにdoc/htmlの下に再帰的にhtmlディレクトリを作り始めるのでCtrl+Cで停止しました(^^; dllやdll.aファイルは出来ているようなのでこれで様子を見てみます。すんなりいきませんねえ。

2011年1月1日土曜日

VMware:ネットワークの設定

VMwareでUbuntu8を使っていましたが、10へのUpdateのお知らせがあったのでやってみたところキーボードが効かなくなってしまいました(^^; いろいろWebに書いてあったんですが、簡単に出来なかったので(^^; ここからUbuntu10.04をダウンロードして入れなおしてみました。で、こちらはキーボードも効いてちゃんと使えます(^^V。

下の図のようにVMwareの仮想マシンの設定で、


出てくる次のWindowのネットワーク接続で「ブリッジ」を選ぶとUbuntuが直にインターネットに繋がるイメージで、NATを選ぶとUbuntuがWindows経由でインターネットに繋がるイメージになるかと思います。 すなわちNATではWindowsで設定しているウィルスチェッカーなどが効いていますが、ブリッジにすると多分効いていないのだと思います。

Eclipse:CDTでのBuild

CDTでBuildするとき図(Eclipseのメニュー部分を切り出したものです)のように保存をしてからでないと新しく書きなおしたプログラムがBuildされません。右側のRunボタンの場合には自動的に保存してからBuildして実行されますが。最初、いくら変更してもうまくBuildされなかったので(^^;