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などのライブラリは必要)。