Android の Mobile Vision API を使って 顔検出する
の続きです。
概要
今までの記事では、カメラからの連続画像から顔やバーコードを検出した。
今回の記事では、カメラからの連続画像から顔とバーコードを一緒に検出する。
下記の公式サンプルコードを例に説明する。
公式サンプルコードでは、カメラの制御に
Mobile Vision API の CamearaSource を使っている。
この記事では、今までの記事で自作した CamearaSource を使用する。
Mobile Vision API の設定
AndroidManifest.xml を変更する
<!-- 顔を検出するとき -->
<meta-data
android:name="com.google.android.gms.vision.DEPENDENCIES"
android:value="face" />
<!-- 顔とバーコードを一緒に検出するとき -->
<meta-data
android:name="com.google.android.gms.vision.DEPENDENCIES"
android:value="barcode, face" />
MultiDetector
マルチ検出器 (MultiDetector) は、複数の検出器(Detector)を組み合わせるために使用する。
ソースから受信した1つまたは複数のフレーム上で複数の検出器を一緒に使用することができる。
各検出器は関連する各フレームで別々に実行される。
下記のように、FaceDetectorとBarcodeDetectorを生成したのちに、MultiDetector に合体する。
// FaceDetector
FaceDetector faceDetector = new FaceDetector.Builder(context).build();
FaceTrackerFactory faceFactory = new FaceTrackerFactory(mGraphicOverlay);
faceDetector.setProcessor(
new MultiProcessor.Builder<>(faceFactory).build());
// BarcodeDetector
BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context).build();
BarcodeTrackerFactory barcodeFactory = new BarcodeTrackerFactory(mGraphicOverlay);
barcodeDetector.setProcessor(
new MultiProcessor.Builder<>(barcodeFactory).build());
// MultiDetector
MultiDetector multiDetector = new MultiDetector.Builder()
.add(faceDetector)
.add(barcodeDetector)
.build();
MultiProcessor.Factory
検出器 (Detector) から検出した結果を受け取るためのクラス。
顔とバーコードのそれぞれに対して、 MultiProcessor.Factory を実装 (implements) して、 FaceTrackerFactory と BarcodeTrackerFactory を作成する。
新しいアイテムが検出されると、そのアイテムに対して新しい Tracker インスタンスを作成する。
reference : MultiProcessor.Factory
FrameProcessor
カメラからの連続画像を受け取り MultiDetector に渡すためのFrameProcessor クラスを作成する。
このクラスは、顔検出のものをそのまま流用する。
検出した顔やバーコードの上に図形を表示する
顔とバーコードのそれぞれに対して、GraphicOverlay.Graphic を継承した FaceGraphic と BarcodeGraphic を作成する。
顔は丸、バーコードは長方形のように、異なる図形を表示する。
スクリーンショット
サンプルコードをgithub に公開した。
https://github.com/ohwada/Android_Samples/tree/master/Vision7