JavaScriptで顔検出

404 Not Found






何度か見たことあるネタだけど。アニメ顔にも対応(OpenCV版のほうです)。

もともと、WebGL GPGPUでやろうと思って、先週、OpenCVのdata/haarcascadesにあるようなデータから特定の言語向けのコードを生成するプログラムを作ってJavaScriptで試してて(動いた)、今日、GLSLを出力できるようにしたんだけど、シェーダのコードがコンパイルできなかった(なんか返ってこなくなる!!)ので、今日はあきらめて、JavaScript部分だけ書いておこうと思った。

WebGL GPGPUで超速くできたらVideoタグとCanvasを使って動画に適用すればかっこいいかなーと思ったんですけど。

気になったこと

遅い。

chromeだと2回目以降の実行が速いけど結果がおかしいことがある。あとたまにブラウザがクラッシュする。

http://twitter.com/#!/gou_koutaki/status/78767756283084800
このツイートを見てなかったら、適当に実装して動かねーとか言っていたと思う。
XMLから読み込んだデータもあとから修正しているので、OpenCVの処理をよく読まないと動かせない。ひどい感じする。

あとやっぱり精度悪い。これはどうしようもないし、Imager::AnimeFaceを使いましょう。

コード

テキトウに書いた作業用スクリプトなんですけど、一応置いてます。
https://gist.github.com/1032841

haargen.rb
javascript/main.erb
javascript/_tree.erb

とファイルを置いて、

ruby haargen.rb -l javascript -i haarcascade_frontalface_alt.xml > frontalface_alt.js

とすると変換できます。
テンプレートをいじれば何向けにでも変換できると思います(ただIntegralImageなどのライブラリは必要)。