楽譜アーカイブアプリ - その11 光学迷彩の実装 [考え中の問題]
こないだから遊んでいるOpenCV。「光学迷彩」のふりをするおもちゃアプリを作った。この日曜の成果の集大成となるムービーが今日、ご覧いただけます...
カメラかファイルを選ぶと、ウィンドウが現れて右上のディスクロージャボタンをトグルするとドロワが出る。そこに
人物を隠すエフェクトはとりあえず
背景除去がうまくいかないと、迷彩が剥がれてしまう。うまく動作させるためには
iSightを使うと汚い部屋の中がバレバレになってしまうので、屋外でとったムービーでやってみた。Macで動作している、ということを示したいのでムービーファイルを作るのではなく、動作しているところの画面キャプチャにした。
これがそのムービー。
このムービーを撮るためにえらい苦労した。前景の分離には条件がいいだろうと思って黒のジャージの上下を着て、背景の条件もいろいろあった方がいいと思って、公園や墓場や駐車場やビルの壁やお寺の白壁の前でカメラを置いて行ったり来たりした。近所で盗撮オヤジがうろうろしながら自分撮りしてるなんて言う変な噂が立たなければいいが。
外だと晴れた日は条件が悪い。曇りの日中で、空が写り込まないようにするのがいい。やってる途中で日が出たり陰ったりして何度もやり直した。もし広い部屋にiMacが置いてあるならそのiSightの絵のほうが条件はいいかもしれない。僕の部屋は狭くてiSightに全身が入るほど後ろに下がることができない。
コードブック法には多くのパラメータがある。またノイズ除去や領域連結にもパラメータがあるがそれらのほとんどはハードコードしてしまった。また、エフェクトにもパラメータがあるがそれらも決め打ちになっている。待ち時間や学習時間もPreferenceで変更できるように書いたが、実装していない。
こういったパラメータを調整可能にして、ドキュメントベースのアプリにするともう少し気の利いたものになるかもしれない。でもまあ、これが本題ではないのと、もとのサンプルコードのリークを取りきれないのでやめておく。コードブック法の改良などのアイデアがあれば掘り返そう。
4.2.6 実装
アプリとしては- 最初にiSightか、あるはムービーファイルから読み込むかを選択する
- ウィンドウが開く
- カメラの場合は、ユーザにどいてもらう(背景をカメラに見せる)ための待ち時間(2秒間)がある
- その後、背景学習をする(学習していることを表示、4秒間)
- 学習が終わるとエフェクトをかけた画面をウィンドウに表示する
- その間エフェクトの種類や、コードブック法のパラメータなどを調整できる
4.2.7 動作確認
ということででやっつけで作った。カメラかファイルを選ぶと、ウィンドウが現れて右上のディスクロージャボタンをトグルするとドロワが出る。そこに
- エフェクトの種類を選択するポップアップ
- コードブックの閾値を調整するスライダ(上限と下限のふたつ)
人物を隠すエフェクトはとりあえず
- No Effect エフェクト無し
- Expand Effect ちょっとだけ拡大
- Rotate Effect ちょっとだけ回転
- Blur Effect ちょっとだけぼかし
- Bordered Effect 白い外形線を描く
背景除去がうまくいかないと、迷彩が剥がれてしまう。うまく動作させるためには
- カメラのオートエクスポージャが働かないようにする
- 人物の影がカメラから見えないようにする
- 全身が画面の高さにほぼおさまるくらいの大きさにする
iSightを使うと汚い部屋の中がバレバレになってしまうので、屋外でとったムービーでやってみた。Macで動作している、ということを示したいのでムービーファイルを作るのではなく、動作しているところの画面キャプチャにした。
これがそのムービー。
このムービーを撮るためにえらい苦労した。前景の分離には条件がいいだろうと思って黒のジャージの上下を着て、背景の条件もいろいろあった方がいいと思って、公園や墓場や駐車場やビルの壁やお寺の白壁の前でカメラを置いて行ったり来たりした。近所で盗撮オヤジがうろうろしながら自分撮りしてるなんて言う変な噂が立たなければいいが。
外だと晴れた日は条件が悪い。曇りの日中で、空が写り込まないようにするのがいい。やってる途中で日が出たり陰ったりして何度もやり直した。もし広い部屋にiMacが置いてあるならそのiSightの絵のほうが条件はいいかもしれない。僕の部屋は狭くてiSightに全身が入るほど後ろに下がることができない。
4.2.8 ソースコード
アプリのプロジェクトファイルを置いておく。ただし、OpenCVのライブラリをアプリバンドルに含めると巨大になって僕のファイル置き場を圧迫するので、バイナリは含まれていないし、OpenCVそのものもない。OpenCVライブラリは/usr/local/libに
-rwxr-xr-x 1 root wheel 8105628 11 25 10:09 libcv.dylib* -rwxr-xr-x 1 root wheel 3707352 11 25 10:09 libcvaux.dylib* -rwxr-xr-x 1 root wheel 8647920 11 25 10:09 libcxcore.dylib* -rwxr-xr-x 1 root wheel 3057756 11 25 10:09 libhighgui.dylib*があればリンクできて動作する。もちろんリンク先を変更してコンパイルすれば、どこにあってもよい。ソースの著作権はオライリーの本の著者も放棄しているようなので、僕も何の主張もしない。まあ、誰もいらないだろうけど。
コードブック法には多くのパラメータがある。またノイズ除去や領域連結にもパラメータがあるがそれらのほとんどはハードコードしてしまった。また、エフェクトにもパラメータがあるがそれらも決め打ちになっている。待ち時間や学習時間もPreferenceで変更できるように書いたが、実装していない。
こういったパラメータを調整可能にして、ドキュメントベースのアプリにするともう少し気の利いたものになるかもしれない。でもまあ、これが本題ではないのと、もとのサンプルコードのリークを取りきれないのでやめておく。コードブック法の改良などのアイデアがあれば掘り返そう。
2010-11-30 21:42
nice!(0)
コメント(2)
トラックバック(0)
動画みました。おお、フチコマぢゃ。
しりの部分に「しり」と表示されるようなアプリ・・・
いや、それはもういいから
祝! できんボーイZ 好評連載中!
ずもももも
by つる美 (2010-12-02 13:17)
コメントありがとうございます。
楽しんでいただけましたでしょうか。
OpenCVの顔認識を使えば「尻認識」してそこに「しり」と表示することはできるはずです。問題はプログラミングではなく、学習データを作るところです。「尻」と尻に似てるけど尻ではない「ほかのもの」を用意する必要があります。明らかに尻ではないものを「ほかのもの」として学習させても認識率は向上しません。これが難しい。この2種類の画像をできれば千の単位で用意していただければ、僕が田村信アプリを作ります。これは「Unlogo」プロジェクトにつぐメジャープロジェクトになるような気がします。
ところで、「できんボーイZ」知りませんでした。すごい。これはめでたい。続いてくれればいいんですが....
by decafish (2010-12-02 21:13)