首先,我尝试了华为人脸活体检测。使用示例代码,它可以工作。
接下来,我尝试了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获取输入帧,而不是打开另一个相机吗?
附注: 第一个错误出现(在冗长的消息中):
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...
更新:
请参阅ML Kit人脸验证。它识别并提取模板中人脸的关键特征,将这些特征与输入图像中人脸的特征进行比较,然后根据两张脸的相似度来确定是否属于同一个人。
要实现活体检测和人脸检测/人脸识别,我们需要两个服务:活体检测服务和人脸检测(实际上是人脸比对服务,2021年将支持)。目前,HMS活体检测不支持CameraView(通过获取输入帧)实现人脸识别。您可以尝试这两项服务:人脸识别(LocalAuthentication Engine)或人脸比对(HiAI Engine)。
问:HMS可以从CameraView获取输入帧,而不是从CameraView获取输入帧吗? 打开另一个相机?
不,它不能从 CameraView 获取输入帧。因为活体检测是一个多帧检测方案。目前封装了帧发送的逻辑。您的应用程序只需要申请相机权限并使用设备上的相机进行识别或检测即可。
https://github.com/MiniAiLive/MiniAI-Face-LivenessDetection-AndroidSDK
请使用这个andorid人脸活体检测SDK,它会对你有帮助。