华为HMS人脸活体检测如何与CameraView集成?

How to integrate Huawei HMS Face Liveness Detection with CameraView?

首先,我尝试了 Huawei Face Liveness Detection。使用示例代码,它可以工作。

接下来,我尝试了CameraView. Also, by just following the sample code, I am able to perform frame processing,实现了人脸检测和人脸识别

<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 获取输入帧,而不是打开另一个相机吗?

P.S.: 第一个错误出现(在冗长的消息之外):

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.onDisconnected(Camera2Engine.java:435)
        at android.hardware.camera2.impl.CameraDeviceImpl.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...

更新:

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


要实现活体检测和人脸detection/face识别,我们需要两个服务:活体检测服务和人脸检测(实际是人脸比对服务,2021年会支持。)目前HMS活体检测不支持CameraView的方法(取输入帧)实现人脸识别。您可以尝试这两个服务:Facial recognition (LocalAuthentication Engine) or Facial comparison (HiAI Engine).


Q: Can the HMS take the input frames from CameraView, instead of opening another camera?

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