“面面俱到”!人脸活体检测让应用告别假面攻击

news/2025/1/8 14:41:57/文章来源:https://www.cnblogs.com/HarmonyOSSDK/p/18657067

随着人脸识别技术在金融、医疗等多个领域的加速落地,网络安全、信息泄露等问题愈为突出,用户对应用稳定性和安全性的要求也更为严格。

HarmonyOS SDK 场景化视觉服务(Vision Kit)提供人脸动作活体检测能力,增强对于非活体攻击的防御能力和活体通过率。在投资理财、在线支付等高风险金融服务场景中,通过检测用户的组合动作等来验证用户为真实活体操作,抵御攻击,提高安全性,降低业务风险,全方位保障用户体验及信息安全。

动作活体检测支持实时捕捉人脸,采用指令动作配合的方式进行活体检测,开发者可以自定义检测的动作数量(最多为4个),系统会从6种预设动作(眨眼、张嘴、左摇头、右摇头、注视、点头)中随机生成所填数量的动作,用户按指令完成动作就可以判断是真实活体,还是非活体攻击(比如:人脸翻拍图片、人脸面具等)。

能力优势

端侧闭环:人脸活体检测作为纯端侧能力,数据不保存,杜绝篡改和泄漏,确保数据安全和用户隐私。

空间小,响应快:实现了高频攻击增强防护,同时保持ROM空间占用小,响应时间毫秒级,提供流畅的用户体验。

防护升级: Vision Kit的防护系统通过自研算法升级,能够有效抵御高精视频和高精面具攻击。

开发简单:支持UI定制,以满足个性化需求。经过两年以上的持续演进,积累了亿级数据和千万级的API调用量,成熟稳定。

功能演示

image

开发步骤

1.将实现人脸活体检测相关的类添加至工程。

import { interactiveLiveness } from '@kit.VisionKit';

2.在module.json5文件中添加CAMERA权限,其中reason,abilities标签必填,配置方式参见requestPermissions标签说明。

"requestPermissions":[{"name": "ohos.permission.CAMERA","reason": "$string:camera_desc","usedScene": {"abilities": []}}
]

3.简单配置页面的布局,选择人脸活体检测验证完后的跳转模式。如果使用back跳转模式,表示的是在检测结束后使用router.back()返回。如果使用replace跳转模式,表示的是检测结束后使用router.replaceUrl()去跳转相应页面。默认选择的是replace跳转模式。

Flex({ direction: FlexDirection.Row, justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) {Text("验证完的跳转模式:").fontSize(18).width("25%")Flex({ direction: FlexDirection.Row, justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) {Row() {Radio({ value: "replace", group: "routeMode" }).checked(true).height(24).width(24).onChange((isChecked: boolean) => {this.routeMode = "replace"})Text("replace").fontSize(16)}.margin({ right: 15 })Row() {Radio({ value: "back", group: "routeMode" }).checked(false).height(24).width(24).onChange((isChecked: boolean) => {this.routeMode = "back";})Text("back").fontSize(16)}}.width("75%")
}

4.如果选择动作活体模式,可填写验证的动作个数。

Flex({ direction: FlexDirection.Row, justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center }) {Text("动作数量:").fontSize(18).width("25%")TextInput({placeholder: this.actionsNum != 0 ? this.actionsNum.toString() : "动作数量最多4个"}).type(InputType.Number).placeholderFont({size: 18,weight: FontWeight.Normal,family: "HarmonyHeiTi",style: FontStyle.Normal}).fontSize(18).fontWeight(FontWeight.Bold).fontFamily("HarmonyHeiTi").fontStyle(FontStyle.Normal).width("65%").onChange((value: string) => {this.actionsNum = Number(value) as interactiveLiveness.ActionsNumber;})
}

5.点击"开始检测"按钮,触发点击事件。

Button("开始检测", { type: ButtonType.Normal, stateEffect: true }).width(192).height(40).fontSize(16).backgroundColor(0x317aff).borderRadius(20).margin({bottom: 56}).onClick(() => {this.privateStartDetection();})

6.触发CAMERA权限校验。

// 校验CAMERA权限
private privateStartDetection() {abilityAccessCtrl.createAtManager().requestPermissionsFromUser(this.context, this.array).then((res) => {for (let i = 0; i < res.permissions.length; i++) {if (res.permissions[i] === "ohos.permission.CAMERA" && res.authResults[i] === 0) {this.privateRouterLibrary();}}}).catch((err: BusinessError) => {hilog.error(0x0001, "LivenessCollectionIndex", `Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);})
}

7.配置人脸活体检测控件的配置项InteractiveLivenessConfig,用于跳转到人脸活体检测控件。配置中具体的参数可参考API文档。

let routerOptions: interactiveLiveness.InteractiveLivenessConfig = {isSilentMode: this.isSilentMode as interactiveLiveness.DetectionMode,routeMode: this.routeMode as interactiveLiveness.RouteRedirectionMode,actionsNum: this.actionsNum
};

8.调用interactiveLiveness的startLivenessDetection接口,判断跳转到人脸活体检测控件是否成功。

// 跳转到人脸活体检测控件
private privateRouterLibrary() {if (canIUse("SystemCapability.AI.Component.LivenessDetect")) {interactiveLiveness.startLivenessDetection(routerOptions).then((DetectState: boolean) => {hilog.info(0x0001, "LivenessCollectionIndex", `Succeeded in jumping.`);}).catch((err: BusinessError) => {hilog.error(0x0001, "LivenessCollectionIndex", `Failed to jump. Code:${err.code},message:${err.message}`);})} else {hilog.error(0x0001, "LivenessCollectionIndex", 'this api is not supported on this device');}
}

9.检测结束后回到当前界面,可调用interactiveLiveness的getInteractiveLivenessResult接口,验证人脸活体检测的结果。

// 获取验证结果
private getDetectionResultInfo() {// getInteractiveLivenessResult接口调用完会释放资源if (canIUse("SystemCapability.AI.Component.LivenessDetect")) {let resultInfo = interactiveLiveness.getInteractiveLivenessResult();resultInfo.then(data => {this.resultInfo = data;}).catch((err: BusinessError) => {this.failResult = {"code": err.code,"message": err.message}})} else {hilog.error(0x0001, "LivenessCollectionIndex", 'this api is not supported on this device');}
}

了解更多详情>>

访问场景化视觉服务联盟官网

获取人脸活体检测开发指导文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/865229.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ITSM落地经验之建设蓝图规划

ITSM的规划建设不同于数字化转型规划,更多体现在管理中基本要素变革的规划,传统的ITSM规划重点在于流程规划。在过去,结合大部分客户实施ITSM效果较差或失败的现象来看,这些组织往往忽略了对组织文化与管理实践的诊断和规划,我们的建议在规划阶段充分对流程、文化、管理实…

el-form validator的校验提示遮盖下边的内容

问题:表单的validator校验,无法自动撑起tip提示的高度,导致遮盖了下边内容 https://blog.csdn.net/xiaoyuer_2020/article/details/136155506 解决方式:将tip提示的样式的定位设置为遵循正常的文档流对象,实现自适应高度.el-form-item .el-form-item__content .el-form-i…

国产化板卡设计原理图:2136-KC705E增强版基于FMC接口的 JFM7K325T PCIeX8 接口卡

KC705E增强版基于FMC接口的 JFM7K325T PCIeX8 接口卡 一、板卡概述 本板卡基于 FPGA JFM7K325T 芯片,pin_to_pin兼容FPGAXC7K410T-2FFG900 ,支持PCIeX8、64bit DDR3容量2GByte,HPC的FMC连接器,板卡支持各种接口输入,软件支持windows,Linux驱动。二、功能和技术指标: 板卡…

API接口小结

一、python语言接口请求小结 二、apifox工具接口小结

分库分表带来的这7大问题,一定要小心!

前言 分库分表是解决单库单表性能瓶颈的有效手段,但也会引入新的复杂性和技术挑战。 这篇文章跟大家一起聊聊,分库分表后带来的7个问题,以及相关的解决方案,希望对你会有所帮助。 (我最近开源了一个基于 SpringBoot+Vue+uniapp 的商城项目,欢迎访问和star。)[https://gite…

短剧拍摄中的高效协作:如何通过软件优化演员档期

一、短剧演员档期管理的挑战 短剧演员的档期管理比起传统电视剧演员更加紧张和复杂。短剧的拍摄周期较短,通常要求在较短的时间内完成多个剧本的拍摄。而演员往往同时参与多个项目的拍摄,这使得他们的工作时间安排变得异常繁琐。除了剧组安排的拍摄时间,演员还需安排彩排、试…

DC-4 靶场通关小记

暴力破解、反弹shell、nc传输文件、hydra爆破账号、邮件信息收集、权限水平提升、teehee追加写/etc/passwd提权地址 https://www.vulnhub.com/entry/dc-4,313/1. 环境配置 有其他兼容性问题参考 https://www.cnblogs.com/lrui1/p/18655388 2. 信息收集 fscan.exe -h 192.168.74…

如何解决超过1GB的文件压缩包上传失败的问题?

遇到超过1GB的文件压缩包上传失败的情况,通常可能是由于网络连接不稳定、FTP服务器配置限制或本地网络环境问题引起的。为了帮助您顺利解决问题,您可以按照以下步骤进行排查和处理:检查网络稳定性:首先,请确认您的网络连接是否稳定。由于上传大文件需要长时间保持稳定的网…

如何处理云服务器远程桌面访问问题

问题描述: 用户报告无法通过Web界面访问云服务器的远程桌面,怀疑可能是VNC固定端口受到攻击或端口未开放导致的问题。用户希望了解如何解决远程桌面访问失败的问题。 解决方案:确认远程桌面连接方式: 确保您使用的远程桌面连接工具和协议正确无误。常见的远程桌面工具包括:…

SSL证书部署后仍无法正常访问网站怎么办?

问题描述: 已经购买并上传了SSL证书到虚拟主机,但网站仍然无法通过HTTPS协议正常访问。如何排查和解决这一问题? 解决方案: 当您已经购买并上传了SSL证书到虚拟主机,但网站仍然无法通过HTTPS协议正常访问时,这可能是由于多个环节的问题所引起的。以下是详细的排查步骤和解…

如何解决远程登录问题

如果您遇到远程登录问题,可以按照以下步骤进行排查:检查SSH端口号:默认情况下,SSH端口号为22。如果您的服务器配置了非默认端口号(如22000),请确保使用正确的端口号进行连接。 您可以通过命令行工具(如 ssh)指定端口号进行连接,例如:ssh user@server_ip -p 22000。防…

如何实现网站代码自动恢复修改

在网站开发和维护过程中,有时会不小心修改了重要的代码文件,导致网站出现问题。如何实现网站代码的自动恢复,以避免数据丢失? 解决方案:使用版本控制系统:使用Git等版本控制系统来管理网站代码。版本控制系统可以帮助你跟踪每次修改的历史记录,方便回滚到之前的稳定版本…