1

首先,我尝试了华为人脸活体检测。使用示例代码,它可以工作。

接下来,我尝试了 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...
4

1 回答 1

0

更新:

请参阅ML Kit 人脸验证。它识别并提取模板中人脸的关键特征,将特征与输入图像中的人脸特征进行比较,然后根据相似度判断两张人脸是否属于同一个人。


要实现活体检测和人脸检测/人脸识别,我们需要两个服务:活体检测服务和人脸检测(其实是人脸比对服务,2021年会支持)。目前HMS Liveness Detection不支持CameraView的方法(通过取输入帧)来实现人脸识别。你可以试试这两个服务:人脸识别(LocalAuthentication Engine)或人比对(HiAI Engine)。


Q:HMS 是否可以从 CameraView 获取输入帧,而不是打开另一个摄像头?

不,它不能从 CameraView 获取输入帧。因为活体检测是一种多帧检测方案。目前封装了帧发送的逻辑。您的应用只需要申请摄像头权限,并使用设备上的摄像头进行识别或检测。

于 2020-12-08T08:52:51.867 回答