鸿蒙AI功能开发【人脸活体验证控件】 机器学习-场景化视觉服务

人脸活体验证控件

介绍

本示例展示了使用视觉类AI能力中的人脸活体验证能力。

本示例模拟了在应用里,跳转人脸活体验证控件,获取到验证结果并展示出来。

需要使用hiai引擎框架人脸活体验证接口@kit.VisionKit.d.ts。

效果预览

1

使用说明:

  1. 在手机的主屏幕,点击”faceDetectionDemo“,启动应用。
  2. 点击“开始检测”按钮,进入人脸检测验证控件。
  3. 验证结束后返回到主屏幕获取到验证结果并展示出来。

具体实现

本示例展示的控件在@kit.VisionKit.d.ts定义了活体检测API:

/*** Entry to the face liveness detection page.* The security camera needs to apply for network permissions.** @permission ohos.permission.CAMERA* @permission ohos.permission.INTERNET* @param { config } Liveness detection configuration item.* @returns { Promise<boolean> } Result of entering the liveness detection control.* @throws { BusinessError } 1008301002 Route switching failed.* @syscap SystemCapability.AI.Component.LivenessDetect* @atomicservice* @since 5.0.0(12)* */
function startLivenessDetection(config: InteractiveLivenessConfig): Promise<boolean>;/*** Obtains the face and liveness detection result.** @returns { Promise<InteractiveLivenessResult> } The results of the liveness test.* @throws { BusinessError } 1008302000 Detection algorithm initialization.* @throws { BusinessError } 1008302001 Detection timeout.* @throws { BusinessError } 1008302002 Action mutual exclusion error.* @throws { BusinessError } 1008302003 Continuity Check Failure.* @throws { BusinessError } 1008302004 The test is not complete.* @syscap SystemCapability.AI.Component.LivenessDetect* @atomicservice* @since 5.0.0(12)* */
function getInteractiveLivenessResult(): Promise<InteractiveLivenessResult>;

业务使用时,需要先进行import导入interactiveLiveness。 调用进入活体控件接口和验证结果接口,接收处理返回的结果。参考:

import { common, abilityAccessCtrl, Permissions } from '@kit.AbilityKit';
import { interactiveLiveness } from "@kit.VisionKit";
import { BusinessError } from '@kit.BasicServicesKit';@Entry
@Component
struct LivenessIndex {private context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;private array: Array<Permissions> = ["ohos.permission.CAMERA"];@State actionsNum: number = 0;@State isSilentMode: string = 'INTERACTIVE_MODE';@State routeMode: string = 'replace';@State resultInfo: interactiveLiveness.InteractiveLivenessResult = {livenessType: 0};@State failResult: Record<string, number | string> = {'code': 1008302000,'message': ''};build() {Stack({alignContent: Alignment.Top}) {Column() {Row() {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: 'INTERACTIVE_MODE', group: 'isSilentMode' }).checked(true).height(24).width(24).onChange((isChecked: boolean) => {this.isSilentMode = 'INTERACTIVE_MODE'})Text('动作活体检测').fontSize(16)}.margin({ right: 15 })Row() {Radio({ value: 'SILENT_MODE', group: 'isSilentMode' }).checked(false).height(24).width(24).onChange((isChecked: boolean) => {this.isSilentMode = 'SILENT_MODE';})Text('静默活体检测').fontSize(16)}}.width('75%')}}.margin({ bottom: 30 })Row() {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%')}}.margin({ bottom: 30 })if (this.isSilentMode == 'INTERACTIVE_MODE') {Row() {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;})}}}}.margin({ left: 24, top: 80 }).zIndex(1)Stack({alignContent: Alignment.Bottom}) {if (this.resultInfo?.mPixelMap) {Image(this.resultInfo?.mPixelMap).width(260).height(260).align(Alignment.Center).rotate({ angle: 270 }).margin({ bottom: 260 })Circle().width(300).height(300).fillOpacity(0).strokeWidth(60).stroke(Color.White).margin({ bottom: 250, left: 0 })}Text(this.resultInfo.mPixelMap ?'检测成功' :this.failResult.code != 1008302000 ?'检测失败' :'').width('100%').height(26).fontSize(20).fontColor('#000000').fontFamily('HarmonyHeiTi').margin({ top: 50 }).textAlign(TextAlign.Center).fontWeight('Medium').margin({ bottom: 240 })if(this.failResult.code != 1008302000) {Text(this.failResult.message as string).width('100%').height(26).fontSize(16).fontColor(Color.Gray).textAlign(TextAlign.Center).fontFamily('HarmonyHeiTi').fontWeight('Medium').margin({ bottom: 200 })}Button("开始检测", { type: ButtonType.Normal, stateEffect: true }).width(192).height(40).fontSize(16).backgroundColor(0x317aff).borderRadius(20).margin({bottom: 56}).onClick(() => {this.privatestartDetection();})}.height('100%')}}onPageShow() {this.resultRelease();this.getDectionRsultInfo();}// 路由跳转到人脸活体验证控件private privaterouterLibrary() {let routerOptions: interactiveLiveness.InteractiveLivenessConfig = {'isSilentMode': this.isSilentMode as interactiveLiveness.DetectionMode,'routeMode': this.routeMode as interactiveLiveness.RouteRedirectionMode,'actionsNum': this.actionsNum}interactiveLiveness.startLivenessDetection(routerOptions).then((DetectState: boolean) => {console.info('LivenessCollectionIndex', `Succeeded in jumping.`);}).catch((err: BusinessError) => {console.error('LivenessCollectionIndex', `Failed to jump. Code:${err.code},message:${err.message}`);})}// 校验CAMERA权限private privatestartDetection() {let res = abilityAccessCtrl.createAtManager().verifyAccessTokenSync(100, "ohos.permission.CAMERA");if (res === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {this.privaterouterLibrary();} else {abilityAccessCtrl.createAtManager().requestPermissionsFromUser(this.context, this.array, (err, res) => {for (let i = 0; i < res.permissions.length; i++) {if (res.permissions[i] === "ohos.permission.CAMERA" && res.authResults[i] === 0) {this.privaterouterLibrary();}}})}}// 获取验证结果private getDectionRsultInfo() {// getInteractiveLivenessResult接口调用完会释放资源let resultInfo = interactiveLiveness.getInteractiveLivenessResult();resultInfo.then(data => {this.resultInfo = data;}).catch((err: BusinessError) => {this.failResult = {'code': err.code,'message': err.message}})}// result releaseprivate resultRelease() {this.resultInfo = {livenessType: 0}this.failResult = {'code': 1008302000,'message': ''}}
}

以上就是本篇文章所带来的鸿蒙开发中一小部分技术讲解;想要学习完整的鸿蒙全栈技术。可以在结尾找我可全部拿到!
下面是鸿蒙的完整学习路线,展示如下:
1

除此之外,根据这个学习鸿蒙全栈学习路线,也附带一整套完整的学习【文档+视频】,内容包含如下

内容包含了:(ArkTS、ArkUI、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、鸿蒙南向开发、鸿蒙项目实战)等技术知识点。帮助大家在学习鸿蒙路上快速成长!

鸿蒙【北向应用开发+南向系统层开发】文档

鸿蒙【基础+实战项目】视频

鸿蒙面经

在这里插入图片描述

为了避免大家在学习过程中产生更多的时间成本,对比我把以上内容全部放在了↓↓↓想要的可以自拿喔!谢谢大家观看!

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

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

相关文章

Web性能监测的利器Performance Observer!!

前言 前段时间在研究前端异常监控平台&#xff0c;在思考性能监控时&#xff0c;想到了浏览器自带的观察者以及页面生命周期API 。于是在翻查资料时发现了&#xff0c;Performance ObserverAPI。正好趁着这个机会给大家好好讲讲Performance Observer API Performance Observe…

【python】Scrapy中常见的“Response Not Ready”或“Response Not 200”错误分析及解决

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

吴恩达机器学习笔记

1.机器学习定义&#xff1a; 机器学习就是让机器从大量的数据集中学习&#xff0c;进而得到一个更加符合现实规律的模型&#xff0c;通过对模型的使用使得机器比以往表现的更好 2.监督学习&#xff1a; 从给定的训练数据集中学习出一个函数&#xff08;模型参数&#xff09;…

【Jenkins未授权访问漏洞 】

默认情况下 Jenkins面板中用户可以选择执行脚本界面来操作一些系统层命令&#xff0c;攻击者可通过未授权访问漏洞或者暴力破解用户密码等进入后台管理服务&#xff0c;通过脚本执行界面从而获取服务器权限。 第一步&#xff1a;使用fofa语句搜索 搜索语句&#xff1a; port&…

【八股文】Redis

1.Redis有哪些数据类型 常用的数据类型&#xff0c;String&#xff0c;List&#xff0c;Set&#xff0c;Hash和ZSet&#xff08;有序&#xff09; String&#xff1a;Session&#xff0c;Token&#xff0c;序列化后的对象存储&#xff0c;BitMap也是用的String类型&#xff0c;…

CCRC-CISAW信息安全保障人员证书含金量

在数字化时代背景下&#xff0c;CISAW认证受到越来越多个人的青睐。 特别是在互联网技术高速发展的今天&#xff0c;随着5G技术的广泛应用&#xff0c;市场对CISAW专业人才的需求急剧增加。 这种职业不仅地位显著&#xff0c;而且职业生涯相对较长。 目前市场上&#xff0c;…

【leetcode详解】覆盖所有点的最少矩形数目(C++思路详解)

思路详解&#xff1a; 0. 题目情境并未限制矩形高度&#xff0c;故矩形数目的判断只和点的横坐标有关 1. 为了不重不漏地考虑到所有点&#xff0c;故笔者选择首先将二维数组中的点按横坐标的大小排序 //说明&#xff1a;本来笔者以为需要自定义sort排序&#xff0c;后来发现…

《嵌入式 - 嵌入式大杂烩》ARM Cortex-M寄存器详解

1 ARM Cortex-M寄存器概述 ARM Cortex-M提供了 16 个 32 位的通用寄存器(R0 - R15),如下图所示。前15个(R0 - R14)可以用作通用的数据存储,R15 是程序计数器 PC,用来保存将要执行的指令。除了通用寄存器,还有一些特殊功能寄存器。特殊功能寄存器有预定义的功能,而且必须通…

GPU 片上调度系统

这篇文章分析和说明GPU 片上的kernel 通过stream 作为载体是如何分发到SM 处理器上&#xff0c;同时CUDA 所抽象的grid/block/thread 在GPU 设备层面是如何调度的。调度器通常是被忽略的一个部分&#xff0c;但对CUDA kernel 的编写和后期系统性能分析很有帮助&#xff0c;也可…

将 Tcpdump 输出内容重定向到 Wireshark

在 Linux 系统中使用 Tcpdump 抓包后分析数据包不是很方便。 通常 Wireshark 比 tcpdump 更容易分析应用层协议。 一般的做法是在远程主机上先使用 tcpdump 抓取数据并写入文件&#xff0c;然后再将文件拷贝到本地工作站上用 Wireshark 分析。 还有一种更高效的方法&#xf…

【HarmonyOS】鸿蒙应用实现截屏

【HarmonyOS】鸿蒙应用实现截屏 组件截屏 通过componentSnapshot的get函数&#xff0c;将需要截图的组件设置id传进去即可。 import { componentSnapshot } from kit.ArkUI; import { image } from kit.ImageKit;/*** 截图*/ Entry Component Preview struct SnapShotPage {S…

sheng的学习笔记-AI-层次聚类

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 需要学习的前置知识&#xff1a;聚类&#xff0c;可参考&#xff1a;sheng的学习笔记-AI-聚类(Clustering)-CSDN博客 什么是层次聚类 层次聚类(hierarchical clustering)试图在不同层次对数据集进行划分&#xff0c;从而形…

【Python系列】使用 `isinstance()` 替代 `type()` 函数

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

国产版Sora复现——智谱AI开源CogVideoX-2b 本地部署复现实践教程

目录 一、CogVideoX简介二、CogVideoX部署实践流程2.1、创建丹摩实例2.2、配置环境和依赖2.3、上传模型与配置文件2.4、开始运行 最后 一、CogVideoX简介 智谱AI在8月6日宣布了一个令人兴奋的消息&#xff1a;他们将开源视频生成模型CogVideoX。目前&#xff0c;其提示词上限为…

thinkphp8开发的广告联盟网站系统源码

这款程序是采用国内主流的PHP框架&#xff0c;最新版本thinkphp8.0.4&#xff0c;也是目前市面上功能相对比较强大&#xff0c;界面比较好看的一款全开源的广告联盟系统&#xff0c;程序支持任意二开商业&#xff0c;并且代码无任何加密处理。 程序开发&#xff1a;PHPMySQL …

Windows使用wsl安装docker-desktop

一&#xff1a;修改Windows配置&#xff0c;启用相关功能。 1&#xff1a;启用硬件虚拟化VT-d 各品牌电脑的Bios设置都不一致&#xff0c;需要自行查找如何进入Bios开启VT-x功能&#xff0c;绝大部分电脑此功能默认情况下是直接开启的。 2&#xff1a;确定Windows系统的类别…

【全面介绍下Gitea,什么是Gitea?】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

日常生活中的卡片写作素材

日常生活中&#xff0c;有哪些内容适合写卡片&#xff1f; ​​我认为有两类非常值得写卡片&#xff0c;一类是经常重复说的内容&#xff0c;一类是给其他人提供价值的信息。 ​ ​ ​ 重复说的内容&#xff1a; ​​比如&#xff0c;你在工作中经常解答同事一些问题&a…

怎么限制电脑不能打开某个网页或网站(四个方法你可一定要学会)

老板&#xff1a;我公司的员工真的很让人头疼。 朋友&#xff1a;怎么了&#xff1f; 老板&#xff1a;我一不在就有人偷偷打开某些违法网站&#xff0c;画面不可描述啊&#xff01; 朋友&#xff1a;难道你还不知道可以禁止员工打开某个网站&#xff1f; 老板&#xff1a;…

C++ QT开发 学习笔记(3)

C QT开发 学习笔记(3) - WPS项目 标准对话框 对话框类说明静态函数函数说明QFileDialog文件对话框getOpenFileName()选择打开一个文件getOpenFileNames()选择打开多个文件getSaveFileName()选择保存一个文件getExistingDirectory()选择一个己有的目录getOpenFileUrl()选择打幵…