OpenCV2.2とEclipse/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月30日日曜日
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 を使った方が、僕の場合にはよい結果を得ることが出来ました。
#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などの設定も出来ないものなのでしょうか?
この状態でEclipseを起動(すでに起動していた場合には再起動しないと環境変数の設定が有効にならないようです。WindowsXP使用です。)して、実行すると見事実行されました(^^V しかしEclipseの中だけでPathなどの設定も出来ないものなのでしょうか?
2011年1月24日月曜日
2011年1月18日火曜日
2011年1月15日土曜日
VC++:dllの呼び出し方
同じ関数をいろいろなところで使うため、その関数をdllにしてみました。が、呼び出せません(^^;
ここに、
”関数subをDLLにしたい場合,次のようにソースプログラムを作成する.外部プログラムから呼び出したい関数(この場合sub)の前に __declspec(dllexport)という おまじないをつけておく(このおまじないがついていない関数はDLL外部からは見えないので安心).”
と書いてあります。この通りにおまじないを付けて、コンパイルリンクしてdllを作り、これで出来る.libファイルを VC++のプロジェクト→プロパティ→構成プロパティ→リンカ→入力の追加の依存ファイルに追加しておけばよいようです。
使う側で関数宣言が必要になりますのでお忘れなく。またdll自体はdllを使うプロジェクトのディレクトリにコピーしておかないと実行時にdllがロード出来ないエラーとなります。環境変数PATHへ元の(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;
}
ここやここも参考にさせていただきました。ありがとうございます。
ライブラリのディレクトリには下記のようにここで作ったライブラリが入っています。
使用したソースはこんな感じです。
#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
2011年1月1日土曜日
VMware:ネットワークの設定
VMwareでUbuntu8を使っていましたが、10へのUpdateのお知らせがあったのでやってみたところキーボードが効かなくなってしまいました(^^; いろいろWebに書いてあったんですが、簡単に出来なかったので(^^; ここからUbuntu10.04をダウンロードして入れなおしてみました。で、こちらはキーボードも効いてちゃんと使えます(^^V。
下の図のようにVMwareの仮想マシンの設定で、
出てくる次のWindowのネットワーク接続で「ブリッジ」を選ぶとUbuntuが直にインターネットに繋がるイメージで、NATを選ぶとUbuntuがWindows経由でインターネットに繋がるイメージになるかと思います。 すなわちNATではWindowsで設定しているウィルスチェッカーなどが効いていますが、ブリッジにすると多分効いていないのだと思います。
下の図のようにVMwareの仮想マシンの設定で、
出てくる次のWindowのネットワーク接続で「ブリッジ」を選ぶとUbuntuが直にインターネットに繋がるイメージで、NATを選ぶとUbuntuがWindows経由でインターネットに繋がるイメージになるかと思います。 すなわちNATではWindowsで設定しているウィルスチェッカーなどが効いていますが、ブリッジにすると多分効いていないのだと思います。
Eclipse:CDTでのBuild
CDTでBuildするとき図(Eclipseのメニュー部分を切り出したものです)のように保存をしてからでないと新しく書きなおしたプログラムがBuildされません。右側のRunボタンの場合には自動的に保存してからBuildして実行されますが。最初、いくら変更してもうまくBuildされなかったので(^^;
登録:
投稿 (Atom)