実用性があるかわかりませんが、過去に書いたプログラムを気まぐれで晒してみます。
AnimeFaceDetector
Processing 3で動作する、OpenCVを用いて動画からアニメ顔検出を行うプログラムです。
検出した顔画像はPNG形式で保存されます。
アニメ顔検出を行うにあたって、nagadomi氏が公開しているアニメ顔向けの物体検出器(lbpcascade_animeface)を使用しています。
OpenCVによるアニメ顔検出ならlbpcascade_animeface.xml - デー
一応アニメ顔用に作りましたが、カスケードファイルを差し替えたら他の物体でも検出できるかも。
動作環境
Windows 8.1で動作確認しました。
Debianでも試してみたのですが、libgstreamer関係で問題が起きるようで動作しませんでした。
必要ライブラリ
動作には以下のライブラリが必要です。
入っていない場合はProcessingを起動し、メニューの「スケッチ」→「ライブラリをインポート...」→「ライブラリを追加...」から追加してください。
- OpenCV for Processing(Greg Borenstein)
- Video(The Processing Foundation)
- ControlP5(Andreas Schlegel)
使い方
実行前に、動画の解像度に合わせて下記の変数を書き換えてください。
(面倒ですが、ProcessingのMovieクラスに解像度を取得する手段が用意されていないみたいなので…)
int movWidth = 640;
int movHeight = 360;
実行すると以下のようなウィンドウが出てきます。
- 「OPEN」ボタンを押して動画を選択。
- 「ANALYZE」ボタンを押すと動画からの顔検出及び検出顔画像の保存が行われます。
AnimeFaceDetector.pdeと同じ階層にあるdataディレクトリ内に動画から拡張子を除いた名前のディレクトリが作成され、そこに保存されます。
オプション
COLOR DETECTION
顔以外の誤検出を低減するため、検出された領域内に「輪郭」や「肌」に近い色が存在するかチェックを行います。
基準とする色は適当に選びました。
-
SKIN THRESHOLD
検出された領域内に「肌」に近い色が指定された割合以上存在する場合に顔と判断します。
デフォルトは0.5です。 -
EDGE THRESHOLD
検出された領域内に「輪郭」に近い色が指定された割合以上存在する場合に顔と判断します。
デフォルトは0.018です。
RESIZE SAVE IMAGE
検出された顔領域を画像に保存する際に、240x240にリサイズを行います。
SAVE FRAME INTERVAL
検出された顔領域を画像に保存する際のフレーム間隔を指定します。
デフォルトは3です。
MINIMUM FACE SIZE(PIXEL)
顔検出時の最低サイズを指定します。
指定されたサイズよりも検出領域が小さい場合は無視します。
デフォルトは48x48です。
ソースコード
ちゃば / AnimeFaceDetector · GitLab
その他
詳細はGitLabリポジトリに同梱しているREADME.mdを参照してください。