2012年11月18日日曜日

しょぼいけど特定物体認識できたよ〜(´∀`)〜

苦節数カ月、やっとここまで来たよ・・・(つд`)

考えうるもっともしょぼい方法だけど、FAST(キーポイント検出)、FREAK(特徴量記述)を使った特定物体認識(というほどのものでもないかもしれないが)に成功したのでメモ。

 ・・・と思ったけど、今日はとても疲れたので実行結果だけ↓

特徴量を記述、指標化して(参考資料:FREAKの論文)総当り比較(画像が増えてくると間違いなく遅くなる)で、ひげ剃りとかカロリーメイトとか本棚(上段、下段)をまあだいたい識別できるようになった。ちなみに左上の数字はFPS。その横が似ている画像ファイル名。



↓比較用ひげ剃り画像、こんな感じで写真をフォルダに入れまくることで、どれに一番近いかを判別してくれる。


















まだ課題も多いけど、これをラジコンと接続して目的の物まで向かわせるとかは頑張れば出来そう。

〜おわり〜


2012年11月17日土曜日

opencvでAi-Ball(小型WiFiカメラ)を使う

わかってしまえば簡単だが、わからないと一生わからない気がするのでメモ

※重要※ 
今回のコードによって発生した問題につきましては一切の責任を負いかねますのでご注意の上ご利用ください(トリセツとかに載っていない使い方の為)。

今回(3週間くらい前だが)は、Ai-Ball(公式サイト?)をopwncvで普通に使う方法をメモっておきます。

主な参考資料
・Ai-Ballの取説
・海外の質問掲示板(ここの情報がメインだが、場所を失念)
・九州工業大学 宮本研究室HP様(ttp://www.brain.kyutech.ac.jp/~miyamo/index.php/)

要約
c++:

VideoCapture cap("http://(Ai-BallのIPアドレス)/?action=stream.mjpeg");


python:

capture=cv.CaptureFromFile("http://(Ai-BallのIPアドレス)/?action=stream.mjpeg")

↑ちなみに普通のwebカメラだと
capture = cv.CaptureFromCAM(0)  pythonでは微妙に使う関数が違うので注意

それぞれのカメラ動画使うサンプル見ればわかると思いますけど、変化点は↑だけです。

なかなか分からなかったのがアドレスの最後の「.mjpeg」の部分(どこかの海外掲示板の丸パクリ、もうどうやって検索したのか思い出せない)。

 こうすることでリアルタイム(うちのPCでは18fpsくらいしか出ないが)で普通のウェブカメラとして使えます。
ちなみに宮本研究室さんの公開されているプログラムは動画(mjpeg)としてではなくスナップショット(jpg)として画像を取り込んでいるためfpsが落ちます(環境により異なると思いますが筆者環境では4fpsくらい)




 今現在(2012年11月)、使いやすそうな小型無線カメラもあんまりないし、もしかしたらこの情報が役に立つ人がいるといいな・・・と思いつつ終了。