在 CameraX 中使用 CameraCaptureSession.CaptureCallback()

Working with CameraCaptureSession.CaptureCallback() in CameraX

In-Camera 1,我们有FaceDetectionListenercamera.startFaceDetection()方法。这样找人脸更容易

在相机 2 中,我们可以使用 CameraCaptureSession.CaptureCallback() 方法和这个静态变量

做同样的事情
Integer mode = result.get(CaptureResult.STATISTICS_FACE_DETECT_MODE);
Face[] faces = result.get(CaptureResult.STATISTICS_FACES);

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

的回调结果

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

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

在 Camera2 中,

 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);

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

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

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

// 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)