在 CameraX 中使用 CameraCaptureSession.CaptureCallback()

Sha*_*aon 5 camera android callback android-camera2 android-camerax

在相机 1 中,我们有FaceDetectionListener方法camera.startFaceDetection()。使用这种方式可以更容易地找到面孔。

在相机 2 中,我们可以使用 CameraCaptureSession.CaptureCallback() 方法和此静态变量执行相同操作

Integer mode = result.get(CaptureResult.STATISTICS_FACE_DETECT_MODE);
Face[] faces = result.get(CaptureResult.STATISTICS_FACES);
Run Code Online (Sandbox Code Playgroud)

现在有一个名为 CameraX 的新相机库。它是Camera2的包装,推荐使用。如果是Camera 2的封装,我们可以很容易得到如下的回调结果CameraCaptureSession.CaptureCallback()

但经过三天的尝试,我未能找到解决方案。

谁能给我像camera2一样调用以下方法的解决方案?

在相机2中,

 private val mCaptureCallback = object : CameraCaptureSession.CaptureCallback() {
    override fun onCaptureProgressed(
        session: CameraCaptureSession,
        request: CaptureRequest,
        partialResult: CaptureResult
    ) {
        

    }

    override fun onCaptureCompleted(
        session: CameraCaptureSession,
        request: CaptureRequest,
        result: TotalCaptureResult
    ) {
        
    }
}



mCaptureSession.setRepeatingRequest(mPreviewRequest, mCaptureCallback,
                mBackgroundHandler);
Run Code Online (Sandbox Code Playgroud)

如何使用CameraX获取回调结果?

Hus*_*eem 3

您可以使用CameraX 的camera2互操作类,它在CameraX 和Camera2 API 之间提供互操作层。

如果您需要CaptureCallback在某个用例(例如Preview用例)上设置 a 以跟踪其捕获请求的进度,您可以按如下方式执行:

// Set up and configure the Preview's builder
val previewBuilder = Preview.Builder()

// Create the callback you want to attach to the Preview use case
val captureCallback = object : CameraCaptureSession.CaptureCallback() {
   ...            
}

// Create an Extender to attach Camera2 options
val previewExtender = Camera2Interop.Extender(previewBuilder)

// Attach the Camera2 CaptureCallback
previewExtender.setSessionCaptureCallback(captureCallback)

// Initialize the Preview use case
val preview =  previewBuilder.build()

// bind the Preview use case
cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, preview)
Run Code Online (Sandbox Code Playgroud)