首先,我尝试了华为人脸活体检测。使用示例代码,它可以工作。
接下来,我尝试了 CameraView。另外,只需按照示例代码,我就可以进行帧处理,实现人脸检测和人脸识别。
<com.otaliastudios.cameraview.CameraView
app:cameraFacing="front"
android:id="@+id/cameraView"
app:cameraEngine="camera2"
app:cameraPreview="glSurface"
android:keepScreenOn="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="visible"
app:cameraAudio="off"
app:cameraExperimental="true">
</com.otaliastudios.cameraview.CameraView>
问题:如何将华为人脸活体检测集成到CameraView中?
提供下面的人脸活体检测代码,我尝试更改视图容器(mPreviewContainer
如下所示),但它只是抛出错误和应用程序退出。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_liveness_custom_detection);
mPreviewContainer = findViewById(R.id.surface_layout); //<------ Change this to CameraView
mlLivenessDetectView = new MLLivenessDetectView.Builder()
.setContext(this)
.setFaceFrameRect(new Rect(0, 0, 0, 200))
.setDetectCallback(new OnMLLivenessDetectCallback() {
...
}
我很好奇如何将华为人脸活体检测集成到 CameraView(甚至普通的 Camera2 或 CameraX)中?HMS 可以从 CameraView 获取输入帧,而不是打开另一个摄像头吗?
PS: 出现第一个错误(来自冗长的消息):
I/BufferQueue: [unnamed-11129-0](this:0x70859fb800,id:0,api:0,p:-1,c:-1) BufferQueue core=(11129:com.example.cv1)
E/AndroidRuntime: FATAL EXCEPTION: CameraViewEngine
Process: com.example.cv1, PID: 11129
com.otaliastudios.cameraview.CameraException
at com.otaliastudios.cameraview.engine.Camera2Engine$2.onDisconnected(Camera2Engine.java:435)
at android.hardware.camera2.impl.CameraDeviceImpl$7.run(CameraDeviceImpl.java:252)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:226)
at android.os.HandlerThread.run(HandlerThread.java:65)
E/CameraEngine: EXCEPTION: Handler thread is gone. Replacing.
E/CameraEngine: EXCEPTION: Scheduling on the crash handler...