「ロボット・電子工作・マイコン」カテゴリーアーカイブ

自走BeagleBoard(その3:OpenCVで顔画像認識)

前回の自走BeagleBoardはカメラの画像をOpenCVを通してからブラウザに送っていて、OpenCVを使って画像処理ができるようにしていました。
今回はOpenCVで定番の顔画像認識に挑戦してみました。
プログラムはBeagleBoard上で動いてはいますが、このあたりはOpenCVの世界でWindowsやLinuxでも同じように動作しますのでBeagleBoardだけの話でもないです。

下の映像はROBOCON Magazine No.29(だいぶ古いです)の表紙を映してみたところです。
顔と認識した領域を赤枠で囲っています。
ここまでできれば人の顔を追跡するロボットはすぐにできそうです。
f:id:studio_k:20110806184948j:image

おまけで、笑い男ハッキング機能を搭載しました。(笑)
f:id:studio_k:20110806184945j:image

■自走BeagleBoardシリーズ
自走BeagleBoard (その1)
自走BeagleBoard (その2:ブラウザで操縦)
自走BeagleBoard (その3:OpenCVで顔画像認識)
自走BeagleBoard (その4:OpenCVでボール認識)
自走BeagleBoard (その5:OpenCVで顔画像認識2)
自走BeagleBoard (その6: ~テニスボール追跡~)

自走BeagleBoard(その2:ブラウザで操縦)

台車に載せたBeagleBoardをブラウザから操縦できるようにするプログラムを作りました。

カメラの画像を見ながら操縦できます。

f:id:studio_k:20110724211259j:image

ブラウザの画面はこんな感じです。インターネットに公開すれば外から操作もできますね。留守番ロボにもなりそうです。

f:id:studio_k:20110724211258j:image

WEBアプリなのでipodからも操作できます。

f:id:studio_k:20110724211257j:image

カメラの画像はOpenCV経由で読んでいます。今後、画像認識にも挑戦してみるつもりです。

■自走BeagleBoardシリーズ
自走BeagleBoard (その1)
自走BeagleBoard (その2:ブラウザで操縦)
自走BeagleBoard (その3:OpenCVで顔画像認識)
自走BeagleBoard (その4:OpenCVでボール認識)
自走BeagleBoard (その5:OpenCVで顔画像認識2)
自走BeagleBoard (その6: ~テニスボール追跡~)

BeagleBoard-xMへUbuntu11.04(Natty)のインストール

前の記事でも触れましたが、BeagleBoard-xMへUbuntu11.04(Natty)をインストールしました。

microSDカードにはPCI microSD 8GB class6を使用しました。(4GBだと微妙に足りないので、8GBをお勧めします。)

プレインストールイメージはubuntu-11.04-r2-minimal-armel.tar.xz(2011/7/7版)を使用しました。

OS自体のインストールは「Beagleboard-xM で遊ぼうのこーなー(ソフト編)」を参考に、問題なくインストールできました。続いて、ネットワークの設定やアプリのインストール等を行いました。いくつかポイントと思うところを書いてみます。

【無線LANについて】

前回のUbuntu10.10(Maverick)では苦労した、無線LAN子機 Planex GW-USValue-EZ のドライバが最初から含まれていました!!!

無線LANの設定を前の環境からコピーして、あっさり動きました。

【USBカメラについて】

luvcviewでUSBカメラ(LOGICOOL C905m)の画像を表示したところ、Ubuntu10.10の時

同様にMJPEGは安定せず、-f yuvをつけるときれいに表示されました。

uvc_streamer/mjpg-streamerも前回と同様で、uvc_streamerはすぐに落ちてしまい、mjpg-streamerは-yをつけるときれいに表示されました。

【VNCについて】

VNCも前回と同じく、ターミナルでdキーを押すと画面上のウィンドウがすべてアイコン化(?)されてしまう現象が発生しましたが、前回と同じ方法で対処できました。

【OpenCVについて】

前回と同じく、カメラのMJPEG問題のために、ソースからインストールしました。前回は2.3.0RCをインストールしましたが、今回はRCがとれた2.3.0をインストールしました。カメラのMJPEG問題の対処のソース変更も前回と同様に行いました。

OpenCVのビルドが完了して、インストール後、カメラのサンプルプログラムをコンパイルして動かすと、画像が表示されず。。。ソースを追いかけて調べると、libv4lの開発用ライブラリが入っていないためでした。

sudo apt-get install libv4l-dev

でインストールして、再度OpenCVをコンパイルしたところ、カメラのサンプルプログラムがうまく動きました。

サンプルのfacedetectは2000ms程度でした。前回(2500ms)よりも多少速いような感じはしますが、映している画像が前回と違うせいかもしれません。

以上で環境はできたので、ロボットの製作に戻ります。

ブラウザでカメラの画像を見ながらロボットをコントロールするアプリを製作中です。OpenCVを使った画像認識ができる基盤も組み込む予定です。

すこし大きなプログラムになりそうで、時間がかかっています。

BeagleBoardでディスクベンチ

これまで、microSDカードにKINGMAXの4GB(class6)を使っていましたが、4GBでは手狭になってきたので、PCIの8GB(class6)をAmazonで購入しました。(¥1,680でした。)

f:id:studio_k:20110720231858j:image:w160

せっかくなので、OSには最新版のUbuntu11.04(Natty)をインストールしました。(これは別途レポートを書きたいと思います。)

これまで使用していたKINGMAXのSDカードは少し引っかかるような感じがあったので、DISKベンチマークでDISKの速度を比較してみました。

ベンチマークにはbonnie++というソフトを使用しました。

インストール

% sudo apt-get install bonnie++

以下のパラメータで動かしました。

% bonnie++ -d /tmp -s 512 -r 256 -u ubuntu

結果の抜粋です。(実際にはもっといろいろな値が出力されます。)

Ubuntu10.10 KINGMAX(4GB)    SeqWrite(Block): 4,904KB/s    SeqRead(Block):16,003KB/s
Ubuntu11.04 PCI(8GB)        SeqWrite(Block):10,789KB/s    SeqRead(Block):22,428KB/s

OSのバージョンが違うのと、KINGMAXは使い込んだDISKになるので少し遅くなっていることも考えられ、SDカードの問題だけではないかもしれませんが、この結果だけを比較すると、PCI8GBの方が速いようです。実際に使って見た感じでもPCI8GBの方が速いような感じがします。

自走BeagleBoard (その1)

以前作っていた台車に天井を作り、その上にBeagleBoardを載せました。
接続は以前試したものと同じです。

f:id:studio_k:20110710211339j:image

カメラの映像はmjpg-streamerを使用してブラウザ経由で見ることができます。
こんな感じになります。
f:id:studio_k:20110710211338j:image
f:id:studio_k:20110710211337j:image

PCからリモートコントロールするためにCUIのアプリを作成しました。
このアプリはBeagleBoard上で動き、キーボードから入力されたコマンドをほぼそのままシリアル経由で台車のV850に送ります。V850側でコマンドの解釈とモーターのPWM制御を行います。
これで、SSH経由でコントロールできます。
f:id:studio_k:20110710211336j:image

別の部屋にあるロボットをカメラを見ながら操縦すると異次元の楽しさでした。
マイクやスピーカーをつけるとさらにおもしろそうです。あと、カメラを上下に動かせると良さそうです。

次回は自立で動くようにしたいと思います。

■自走BeagleBoardシリーズ
自走BeagleBoard (その1)
自走BeagleBoard (その2:ブラウザで操縦)
自走BeagleBoard (その3:OpenCVで顔画像認識)
自走BeagleBoard (その4:OpenCVでボール認識)
自走BeagleBoard (その5:OpenCVで顔画像認識2)
自走BeagleBoard (その6: ~テニスボール追跡~)