在相机1中,我们有FaceDetectionListener
和camera.startFaceDetection()
方法。用这种方法更容易找到人脸。
在camera 2中,我们可以使用cameracapturessession . capturecallback()方法和这个静态变量
做同样的事情Integer mode = result.get(CaptureResult.STATISTICS_FACE_DETECT_MODE);
Face[] faces = result.get(CaptureResult.STATISTICS_FACES);
现在有一个新的相机库叫做CameraX。它是Camera2的包装器,推荐使用。如果它是相机2的包装器,我们可以很容易地得到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互操作类,这些类提供了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)