如何使用HarmonyOS面部识别能力_deveco studio 人脸识别(1)

本文详细介绍了如何在HarmonyOS中使用deveco studio实现面部识别功能,包括验证级别设置、人脸识别的异步执行、结果处理以及取消人脸识别的代码实现。此外,还展示了在人脸识别成功后跳转到模拟相机页面的过程,以及相机相关业务逻辑,如初始化SurfaceProvider、打开相机、切换摄像头等操作。
摘要由CSDN通过智能技术生成

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新HarmonyOS鸿蒙全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img

img
img
htt

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注鸿蒙)
img

正文

AUTH_TYPE_BIOMETRIC_FINGERPRINT_ONLY指纹识别,AUTH_TYPE_BIOMETRIC_FACE_ONLY脸部识别以及AUTH_TYPE_BIOMETRIC_ALL指纹和面部。
 ● BiometricAuthentication.SecureLevel验证级别,3D人脸识别支持S3及以下级别的验证;2D人脸识别支持S2及以下级别的验证

由于人脸识别是耗时操作,所以这里新起了线程去做认证,代码示例如下:

/**

  • 新建线程进行认证,避免阻塞其他任务
    */
    private Runnable runnable = new Runnable() {
    private void initHandler() {
    runner = EventRunner.getMainEventRunner();
    if (runner == null) {
    return;
    }
    myEventHandle = new MyEventHandle(runner);
    }

@Override
public void run() {
// 初始化myEventHandle
initHandler();
// 开始认证
startAuth();
}
};

开始人脸识别,代码示例如下:

private void startAuth() {
// retExcAuth 0认证成功 1:比对失败 2:取消认证 3:认证超时 4:打开相机失败
// 5:busy,可能上一个认证没有结束 6:入参错误 7:人脸认证锁定(达到错误认证次数了)
// 8:没有录入人脸 100:其他错误。
int retExcAuth = mBiometricAuthentication.execAuthenticationAction(
BiometricAuthentication.AuthType.AUTH_TYPE_BIOMETRIC_FACE_ONLY,
BiometricAuthentication.SecureLevel.SECURE_LEVEL_S2,
true, false, null);
// 将认证结果发给主线程处理
myEventHandler.sendEvent(retExcAuth);
}

由于我们在线程中执行的人脸识别操作,需要通过EventHandler将识别结果发送到主线程中,并将识别结果显示在页面中,代码示例如下:

/**

  • 事件分发器
    */
    private class MyEventHandle extends EventHandler {
    MyEventHandle(EventRunner runner) throws IllegalArgumentException {
    super(runner);
    }

@Override
protected void processEvent(InnerEvent event) {
super.processEvent(event);
int eventId = event.eventId;
getAndSetText(ResourceTable.Id_text_status, eventId, true);
}
}

取消人脸识别
点击取消人脸识别Button,触发取消人脸识别操作,代码示例如下:

private void createCancelBtn() {
// 创建点击事件
Component component = findComponentById(ResourceTable.Id_button_cancel);
// 创建按钮
Button cancelBtn = null;
if (component != null && component instanceof Button) {
cancelBtn = (Button) component;
cancelBtn.setClickedListener(view -> {
if (mBiometricAuthentication != null) {
// 调用取消接口
int result = mBiometricAuthentication.cancelAuthenticationAction();
LogUtils.info(“createCancelBtn:”, result + “”);
}
});
}
}

页面跳转
人脸识别成功后,跳转到模拟相机页面,代码示例如下:

private void toAuthAfterPage() {
Intent secondIntent = new Intent();
// 指定待启动FA的bundleName和abilityName
Operation operation = new Intent.OperationBuilder()
.withDeviceId(“”)
.withBundleName(getBundleName())
.withAbilityName(OpenCamera.class.getName())
.build();
secondIntent.setOperation(operation);
// startAbility接口实现启动另一个页面
startAbility(secondIntent);
}

7. 相机相关业务逻辑
在模拟相机页面(ability_open_camera.xml)中,包含打开相机和切换前后置摄像头的功能,我们下面将逐一介绍。

初始化SurfaceProvider
用户授权后,开始初始化SurfaceProvider,代码示例如下:

private void initSurface() {
surfaceProvider = new SurfaceProvider(this);
DirectionalLayout.LayoutConfig params = new DirectionalLayout.LayoutConfig(
ComponentContainer.LayoutConfig.MATCH_PARENT, ComponentContainer.LayoutConfig.MATCH_PARENT);
surfaceProvider.setLayoutConfig(params);
surfaceProvider.pinToZTop(false);
// 添加SurfaceCallBack回调
surfaceProvider.getSurfaceOps().get().addCallback(new SurfaceCallBack());
// 将SurfaceProvider加入到布局中
Component component = findComponentById(ResourceTable.Id_surface_container);
if (component instanceof ComponentContainer) {
((ComponentContainer) component).addComponent(surfaceProvider);
}
}

实现SurfaceOps.Callback回调,当Surface创建时,执行打开相机的操作,代码示例如下:

/**

  • SurfaceCallBack,Surface回调
    */
    class SurfaceCallBack implements SurfaceOps.Callback {
    @Override
    public void surfaceCreated(SurfaceOps callbackSurfaceOps) {
    if (callbackSurfaceOps != null) {
    callbackSurfaceOps.setFixedSize(SCREEN_HEIGHT, SCREEN_WIDTH);
    }
    openCamera();
    }

@Override
public void surfaceChanged(SurfaceOps callbackSurfaceOps, int format, int width, int height) {
}

@Override
public void surfaceDestroyed(SurfaceOps callbackSurfaceOps) {
}
}

打开相机

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值