カメラ映像で顔検出
2016-08-04


前回の記事の通り、Androidアプリ「おかしな(ヵ_ォ)カメラ」では顔検出に Google Play Serivcesの FaceDetectorを使っています。

このAPIの基本的な使い方はチュートリアル等にありますが、今回はカメラの映像で顔検出をする場合の手順と、引っかかった所や気づいたところを解説してみます。

参考にするのは提供されているサンプル
 FaceTracker
その中(FaceTrackerの下じゃないけど)でも、カメラの映像を顔検出APIに送っているのは
 CameraSource.java[LINK]
あたりです。


◇手順
・Andoroidでのカメラ画像の表示
・FaceDetectorのプロジェクトへの組み込み
については省略します。

FaceDetectorの生成

FaceDetector detector = new FaceDetector.Builder(getApplicationContext()).build();

こんな感じで顔検出用のクラスを生成します。
このとき、いくつかのパラメータを設定することができますが、その中で使用してみて注意点があったものを挙げてみます。

・setMode(int)
 FAST_MODEで速度重視、ACCURATE_MODEで精度重視となります。
 顔の範囲やZ軸回転(首をかしげる)はどちらでも取得できますが、FAST_MODEではY軸回転(横を向く)が取れなくなりました(常に0が返る)。ちなみにX軸回転(うつむく、見上げる)は元々取得するメンバがありません。何故?

・setMinFaceSize(float)
 検出する顔の最小値(画面に対する比率)を設定します。
 ただこの関数で大きめの値を設定すると、Face.getWidth()や Face.getHeight()で得られる顔の大きさにズレが生じます(画面上の顔が小さくなるほど、実際の顔より大きめの値が返ってくる)。
 設定するとズレるというより設定する値が大きいとズレが顕著になっているようなのですが、残念ながら対処法はわかりません。

・setTrackingEnabled(boolean)
 リアルタイムの映像で検出を行う場合は trueに設定するのですが、ちょっと気を付けなければいけない点があります。それについては後述します。


カメラ映像の取得
このへんは顔検出特有の部分では無いので簡単に済ませます。

続きを読む

[Android プログラミング]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット