ようやく、本題に入ります。
トイデジ「PIXSLIM μ」をWEBカメラとして色々と実験してみたいと思います。
WEBカメラというよりPCカメラと言ったほうが正しいのでしょうが・・・
WEBカメラというよりPCカメラと言ったほうが正しいのでしょうが・・・
Windowsの世界では「OpenCV」というカメラ用の便利なクラスがありますが、今回はFlashですので使えませんが、AS3(Actionscript3.0)にもgetCamera()という便利なメソッドがあります。
これを使えばあっという間にWEBカメラに繋がっちゃいます。
もちろんセキュリティの関係がありますのでFlashPlayerでWEBカメラの使用を予め許可しておく必要はあります。
これを使えばあっという間にWEBカメラに繋がっちゃいます。
もちろんセキュリティの関係がありますのでFlashPlayerでWEBカメラの使用を予め許可しておく必要はあります。
ただし「setMode」でカメラの設定をしないと規定値は低解像度です。
また、対面して操作する場合は鏡像に変換も必要です。
また、対面して操作する場合は鏡像に変換も必要です。
今回の実験は特定の色の追跡です。
カメラで映し出された映像から特定の色の位置を認識させようと言うものです。
カメラで映し出された映像から特定の色の位置を認識させようと言うものです。
しかし色の認識というものはかなりアバウトな世界です。
人によって色の感じ方が違いますが、それをコンピューターに探さすのはかなり微妙です。
人によって色の感じ方が違いますが、それをコンピューターに探さすのはかなり微妙です。
たとえば「赤色を追跡しろ」と指示したとしても「何が赤色なの?」となります。
「ピンク色は赤色なのか?」「オレンジ色は赤色も含んでいる?」
という規定が難しいのです。
「ピンク色は赤色なのか?」「オレンジ色は赤色も含んでいる?」
という規定が難しいのです。
しかもこのカメラはそれほど精度がよくありませんのでかなりノイズが入ります。
色素とは別に明度によっても全然違ってきます。
そういったことをプログラムしたのがコレです。
色素とは別に明度によっても全然違ってきます。
そういったことをプログラムしたのがコレです。

赤と判断したピクセルを赤色で塗って、その重心に白い四角のターゲットを表示しています。
色の判定は色素の割合で判断していますが、明度にはある程度のしきい値を与えて誤差は排除しています。
特に明度が落ちるとノイズが出るので暗い色は除外しています。
特に明度が落ちるとノイズが出るので暗い色は除外しています。
画像だけでは分かりづらいですが、タバコ箱の赤色をリアルタイムに追跡してきます。
背景にも赤色があるので多少重心がずれることがありますが・・・
背景にも赤色があるので多少重心がずれることがありますが・・・
ただし、このプログラムは私の主観で赤色を定義しているので違っている場合もあります。
色の認識は難しいのです。
色の認識は難しいのです。
一応これで赤色のものだったら何でも空中マウスとして使えるようになったわけです。