LoginSignup
0
1

More than 3 years have passed since last update.

Android の Camera2 API と Mobile Vision API を使って 顔とバーコードを一緒に検出する

Posted at

Android の Mobile Vision API を使って 顔検出する
の続きです。

概要

今までの記事では、カメラからの連続画像から顔やバーコードを検出した。

今回の記事では、カメラからの連続画像から顔とバーコードを一緒に検出する。

下記の公式サンプルコードを例に説明する。

googlesamples multi-tracker

公式サンプルコードでは、カメラの制御に
Mobile Vision API の CamearaSource を使っている。

reference: CameraSource

この記事では、今までの記事で自作した CamearaSource を使用する。

Mobile Vision API の設定

AndroidManifest.xml を変更する

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つまたは複数のフレーム上で複数の検出器を一緒に使用することができる。
各検出器は関連する各フレームで別々に実行される。

reference ; MultiDetector

下記のように、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 を作成する。

顔は丸、バーコードは長方形のように、異なる図形を表示する。

スクリーンショット

vision7_detect.png

サンプルコードをgithub に公開した。
https://github.com/ohwada/Android_Samples/tree/master/Vision7

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1