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

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

前々回の笑い男ハッキングの画像を変更して、メガネにしてみました。(プログラムの変更はしていません。)

顔の位置に自動的にメガネを描画します。

メガネの通販サイトに売り込みできるかも!(笑)

髪型も同じようにできますね。美容院に売り込みできるかも!(笑)

f:id:studio_k:20110813094915j:image

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

自走BeagleBoard(その4:OpenCVでボール認識)

f:id:studio_k:20110807205219j:image

OpenCVでボール認識に挑戦してみました。

カメラから取り込んだ↓のような画像で、、、
f:id:studio_k:20110807205217j:image

↓ボールを認識しているところ。
f:id:studio_k:20110807205218j:image

RGBをHSVに変換して、HSVの各値の範囲で認識しています。小さいゴミは無視して、一番大きな領域を抽出します。
色域の範囲を固定で指定しているので、照明の明るさや色合いでうまく認識できなくなってしまいます。動的に調整する方法が課題です。

ここまで出来ればボールの追いかけはすぐにでもできそうです。

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

自走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を使った画像認識ができる基盤も組み込む予定です。

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