LoginSignup
9
7

More than 5 years have passed since last update.

Mobile Vision APIを使ってカメラ映像を表示する

Posted at

Android Lで非推奨になってしまったCamera APIは使いたくない。かといってCamera2 APIはめんどくさい。
やりたいことはカメラのプレビューを表示するだけなのに、何か良い方法はないかと考えていた時にGoogle Play ServiceのMobile Vision APIでカメラ映像のプレビューができることを発見しました。
しかしMobile Vision APIのドキュメントには顔検出やバーコードリーダーとして使う方法しか書いておらず(当たり前)、カメラ映像のプレビュー表示だけを行うことはできないのかなぁと思って試行錯誤してみたところ上手く行ったので、その方法をまとめます。

まず、以下の二つのクラスを作成します。

DummyDetector.java
import android.util.SparseArray;

import com.google.android.gms.vision.Detector;
import com.google.android.gms.vision.Frame;

public class DummyDetector extends Detector<Void> {
    @Override
    public SparseArray<Void> detect(Frame frame) {
        return null;
    }
}
DummyProcessor.java
import com.google.android.gms.vision.Detector;

public class DummyProcessor implements Detector.Processor<Void> {
    @Override
    public void release() {
    }

    @Override
    public void receiveDetections(Detector.Detections<Void> detections) {
    }
}

Mobile Vision APIはカメラの映像から何かのオブジェクトを検出してアプリケーションに受け渡すためのフレームワークなのですが、「何も処理をしない」ということが考慮されていません。
なので、「何も検出しない」「何も処理しない」というダミーのDetectorProcessorの実装を作成して、これを利用します。

あとは、これを使ってCameraSourceを作成して、CameraSource.start()を呼び出せばプレビューが開始します。プレビュー画像サイズやフレームレート等は必要に応じて設定してください。

DummyDetector dummyDetector = new DummyDetector();
dummyDetector.setProcessor(new DummyProcessor());

cameraSource = new CameraSource.Builder(getContext(), dummyDetector)
        .setRequestedPreviewSize(640, 480)
        .setFacing(CameraSource.CAMERA_FACING_BACK)
        .setRequestedFps(30.0f)
        .setAutoFocusEnabled(true)
        .build();

cameraSource.start(surfaceHolder);

surfaceHolderは、SurfaceViewなどから取得します。

9
7
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
9
7