概要と質問
【概要】
バックグラウンドでの顔検出が可能なAndroidアプリを作りたいと考えており、
service内で「camera2を用いて毎フレーム画像を取得」する必要があるのですが、どう書けばよいかわかりません。
以下に、顔検出クラス全体、 ImageReaderとそのコールバック、キャプチャ命令呼び出しとそのコールバック、を示します。
【質問】
以下に示したプログラムで、フレーム毎に画像を取得し処理できるものだと思っていたのですが、
実際実行してみると、mCaptureSession.capture後に一度しかonImageAvailable、onCaptureCompletedが実行されないようです、
何が誤っているのかご教授いただけると幸いです。
顔検出クラス全体
ImageReaderとそのコールバック
Java
1mImageReader = ImageReader.newInstance(WIDTH, HEIGHT, ImageFormat.JPEG, 3); 2mImageReader.setOnImageAvailableListener(mTakePictureAvailableListener, null);
Java
1ImageReader.OnImageAvailableListener mTakePictureAvailableListener = new ImageReader.OnImageAvailableListener() { 2 @Override 3 public void onImageAvailable(ImageReader ir){ 4 System.out.println("onImageAvailable" ); 5 6 mFrame = getFrame(ir); 7 ... 8 } 9};
キャプチャ命令呼び出しとそのコールバック
Java
1CaptureRequest.Builder captureBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_VIDEO_SNAPSHOT); 2captureBuilder.addTarget(mImageReader.getSurface()); 3mCaptureSession.capture(captureBuilder.build(), mCaptureCallback, null);
Java
1private CameraCaptureSession.CaptureCallback mCaptureCallback = new CameraCaptureSession.CaptureCallback() { 2 private void process(CaptureResult result) { 3 switch (mState) { 4 case STATE_PREVIEW: { 5 System.out.println("STATE_PREVIEW"); 6 break; 7 } 8 } 9 } 10 11 @Override 12 public void onCaptureCompleted(@NonNull CameraCaptureSession session, 13 @NonNull CaptureRequest request, 14 @NonNull TotalCaptureResult result) { 15 process(result); 16 } 17};
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。