小型無線LANカメラとmbedで物体追跡をやってみた。
無線LANカメラはPLANEXのCS-W07G-CY使用。小さく扱いやすくてなかなか良いのだが、結構熱くなる。
カメラ画像はPC(Windows 7)上のOpenCVで処理している。
OpenCVのサンプル”CamShiftDemo”をベースに、C#(OpenCvSharp)に移植して使用。
PCとmbed間はBluetooth接続。サーボ指令値だけをmbedに送っている。
無線LANカメラ->無線LAN->PC(OpenCVで画像処理)->Bluetooth(サーボ指令値)->mbed->RCサーボ、という流れ。
物体追跡時の動画はこちら。
物体追跡時のPC側画面はこちら。
画像の動きがぎこちなく見えるのは、動画を作るための画面キャプチャがコマ落ちしているため。^ ^;)
今わかっている問題点。
1.物体の動きが速いと物体の画像がブレて、物体を認識できなくなる。
2.カメラを早く動かすとカメラ画像全体がブレて、上記と同様物体を認識できなくなる。
3.一度追跡を始めた物体がカメラの画面から外れると、画像処理で例外が発生する。<-時間あったら調べる。当面放置中。
苦労の割にいろいろ問題が多いのでOpenCvSharp版の物体追跡は開発凍結。
もっとシンプルでOpenCVを使わないProcessing版に移行することにした。(2011.12.24追記)
おまけ。
CS-W07G-CYを、SANWAのUSB出力付ポータブルバッテリー電源BTN-DC2Wで動かしてみた。単三エネループが使えるので電池代安上がり。
ここを参考にさせて頂いた。
・OpenCVのサンプルプログラム”camshiftdemo.cpp”
・電池で動くWi-FiカメラCS-W07G-CY(やっと)到着
・OpenCVからネットワークカメラのVideoAPIを利用 <-残念ながらCS-W07G-CYではうまく行かなかった。同じメーカのCS-WMV04NではOK。
―以上―
もしよろしければ、camshiftdemoをC#(opencvsharp)に移植したソースコードを教えて頂きませんでしょうか?
宜しくお願い致します。
C#版ソースコードの件ですが、公開を前提に作ってませんので
汚くてとてもお見せできるものではありません。すみません。
しかし、私がC#に移植するためのベースにさせて頂いたC言語版ソースが、
こちらのサイトで公開されていますのでそちらを参考になさってください。
それを見ればどういう処理をしているか分かると思います。
C#版は、これをほぼそのままC#(opencvsharp)に置き換えたものです。
ここの、OpenCV+GAINERmini-0.1.zipの"OpenCV+GainerMini-test.cpp"というファイルです。
http://www.eleki-jack.com/FC/2009/11/gainer-mini-opencv.html
以上、よろしくお願いします。
opencvsharpの置き換えは、具体的にどのような手順なのかを教えて頂けると幸いです。C#初心者のため、お手数掛けてしまい、申し訳ないのですが、宜しくお願いいたします。
ただひたすら、C言語版のソースを見ながら、地道に1行ずつC#へ手で書き換える
という原始的な方法です。(^^;)