SSブログ

楽譜アーカイブアプリ - その11 光学迷彩の実装 [考え中の問題]

こないだから遊んでいるOpenCV。「光学迷彩」のふりをするおもちゃアプリを作った。この日曜の成果の集大成となるムービーが今日、ご覧いただけます...

4.2.6  実装

アプリとしては
  • 最初にiSightか、あるはムービーファイルから読み込むかを選択する
  • ウィンドウが開く
  • カメラの場合は、ユーザにどいてもらう(背景をカメラに見せる)ための待ち時間(2秒間)がある
  • その後、背景学習をする(学習していることを表示、4秒間)
  • 学習が終わるとエフェクトをかけた画面をウィンドウに表示する
  • その間エフェクトの種類や、コードブック法のパラメータなどを調整できる
とする。借用コード以外はたいしたことはやってない。リークがとれないのでドキュメントスタイルではなく、最初にカメラやファイルを指定すると、あとは終わりまで読み込もうとするだけである。ファイルの場合、終わりまで来るとそのまま何もしなくなる。

4.2.7  動作確認

ということででやっつけで作った。

カメラかファイルを選ぶと、ウィンドウが現れて右上のディスクロージャボタンをトグルするとドロワが出る。そこに
  • エフェクトの種類を選択するポップアップ
  • コードブックの閾値を調整するスライダ(上限と下限のふたつ)
がある。閾値はどちらも小さくする(左に動かす)と背景として判断される基準が厳しくなり、大きくする(右に動かす)と基準が緩くなる。小さすぎると前景だらけになって迷彩だらけになり、大きすぎると迷彩が無くなって前景である人物が白日の下にさらされるということになる。

人物を隠すエフェクトはとりあえず
  1. No Effect エフェクト無し
  2. Expand Effect ちょっとだけ拡大
  3. Rotate Effect ちょっとだけ回転
  4. Blur Effect ちょっとだけぼかし
  5. 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で変更できるように書いたが、実装していない。

こういったパラメータを調整可能にして、ドキュメントベースのアプリにするともう少し気の利いたものになるかもしれない。でもまあ、これが本題ではないのと、もとのサンプルコードのリークを取りきれないのでやめておく。コードブック法の改良などのアイデアがあれば掘り返そう。
nice!(0)  コメント(2)  トラックバック(0) 

nice! 0

コメント 2

つる美

動画みました。おお、フチコマぢゃ。
しりの部分に「しり」と表示されるようなアプリ・・・
いや、それはもういいから

祝! できんボーイZ 好評連載中!
ずもももも


by つる美 (2010-12-02 13:17) 

decafish

コメントありがとうございます。
楽しんでいただけましたでしょうか。
OpenCVの顔認識を使えば「尻認識」してそこに「しり」と表示することはできるはずです。問題はプログラミングではなく、学習データを作るところです。「尻」と尻に似てるけど尻ではない「ほかのもの」を用意する必要があります。明らかに尻ではないものを「ほかのもの」として学習させても認識率は向上しません。これが難しい。この2種類の画像をできれば千の単位で用意していただければ、僕が田村信アプリを作ります。これは「Unlogo」プロジェクトにつぐメジャープロジェクトになるような気がします。
ところで、「できんボーイZ」知りませんでした。すごい。これはめでたい。続いてくれればいいんですが....

by decafish (2010-12-02 21:13) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

献立11/30献立12/01 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。