目录

  • 前言
  • 人脸活体检测介绍
  • 关于HarmonyOS人脸活体检测
  • 人脸活体检测使用场景
  • 实现自定义扫码功能
  • 自定义扫码功能扩展
  • 结束语

    前言

    随着人工智能技术的飞速发展,人脸识别技术已经成为智能手机和各种智能设备中不可或缺的一部分,以及移动端开发中的技术持续迭代更新,人脸识别技术在移动端的应用中越来越多,技术也越来越成熟,是一个非常好用的功能。在HarmonyOS开发中,人脸活体检测技术被广泛用于提高应用的安全性和用户体验,尤其是在应用的人脸识别登录,身份认证校验等领域,都是非常常用的地方。那么本文就来详细介绍如何在HarmonyOS应用中集成人脸活体检测功能,并提供具体的实现步骤和代码示例,方便大家学习了解使用。

    人脸活体检测介绍

    人脸活体检测技术旨在区分真实人脸和非真实人脸(如照片、视频等),以防止恶意攻击和欺诈行为。这项技术对于需要高安全性的应用场景尤为重要,例如移动支付、身份验证等。

    关于HarmonyOS人脸活体检测

    在HarmonyOS中,Vision Kit(场景化视觉服务)集成了视觉类AI能力,包括人脸活体检测(interactiveLiveness)能力、卡证识别(CardRecognition)能力、文档扫描(DocumentScanner)能力、AI识图控件(visionImageAnalyzer)能力。人脸活体检测能力便于用户与设备进行互动,验证用户是否为真实活体;卡证识别能力可提供身份证、行驶证、驾驶证、护照、银行卡等证件的结构化识别服务;文档扫描控件可提供拍摄文档并转换为高清扫描件的服务;AI识图控件可提供场景化的文本识别、主体分割、识图搜索功能。

    人脸活体检测使用场景

    再来了解一下人脸活体检测的使用场景,其实人脸活体检测支持动作活体检测模式。动作活体检测支持实时捕捉人脸,需要用户配合做指定动作就可以判断是真实活体,还是非活体攻击(比如:打印图片、人脸翻拍视频以及人脸面具等)。
    需要注意的是,目前HarmonyOS提供的活体检测是一项纯端侧算法、试用期免费的系统基础服务,推荐您使用在考勤打卡、辅助登录和实名认证等低危业务场景中。由于端侧算法在HarmonyOS NEXT/5.0.x尚未完成权威机构检测认证,鉴于支付和金融应用的高风险性,建议开发者基于现有的安全性,针对不同的功能场景进行风险评估和风控策略评估,并采取必要的安全措施。也就是说需要结合大家自己的实际情况来做选择使用,切记!

    实现人脸活体检测

    要在HarmonyOS应用中实现人脸活体检测,需要遵循以下操作步骤。

1、引入文件类

首先,需要将实现人脸活体检测相关的类添加至工程,具体如下所示:

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

2、添加权限

接着需要在module.json5文件中添加CAMERA权限,其中reason,abilities标签必填。具体如下所示:

"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() : "动作数量为3或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权限校验,具体如下所示:

// 校验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) => {

    })
}

7、配置项

然后再来配置人脸活体检测控件的配置项InteractiveLivenessConfig,用于跳转到人脸活体检测控件,具体操作如下所示:

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) => {

      })
  } else {

  }
}

9、验证结果

在检测结束后回到当前界面,可调用interactiveLiveness的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 {

    }
}

活体检测示意图

最后再来看看活体检测示意图,具体效果如下所示:
image.png

结束语

通过上文的介绍,我们可以很好的看到,人脸活体检测是提高应用安全性的重要技术手段。在通过本文的详细介绍,大家应该了解了如何在HarmonyOS应用中集成和使用人脸活体检测功能,也知道了一些需要注意的地方。随着相关技术的不断进步和生态的日益成熟,期待更多的创新应用能够利用这一功能,给用户提供更加安全和便捷的服务,也期待人脸活体检测能够有新的亮点出现!


灵芸小骏
9k 声望846 粉丝

移动开发者。