鸿蒙HarmonyOS 5.0开发实战:人脸识别验证实现案例

 往期鸿蒙5.0全套实战文章必看:(文中附带鸿蒙5.0全栈学习资料)


人脸识别验证案例

介绍

本示例介绍使用VisionKit(视觉服务)实现活体检测,使用CryptoArchitectureKit(加解密算法框架服务)实现加解密。该案例多用于实名认证、身份证上传等场景。

效果图预览

使用说明

  1. 首页签中登录按钮,拉起半模态弹窗。
  2. 半模态弹窗中点击同意协议认证按钮,开始人脸检测,检测完回到首页弹窗提示检测结果

实现思路

  1. 使用interactiveLiveness.startLivenessDetection方法,拉起活体检测页面。
    public static privateStartDetection(routerOptions: interactiveLiveness.InteractiveLivenessConfig,
      permissionArr: Array<Permissions>) {
      let context = getContext();
      // 向用户申请权限,此处为相机权限
      abilityAccessCtrl.createAtManager().requestPermissionsFromUser(context, permissionArr).then((res) => {
     for (let i = 0; i < res.permissions.length; i++) {
       if (res.permissions[i] === 'ohos.permission.CAMERA' && res.authResults[i] === 0) {
         // 拉起活体检测
         interactiveLiveness.startLivenessDetection(routerOptions).then((DetectState: boolean) => {
         })
       }
     }
      })
    }
    
  2. 使用interactiveLiveness.getInteractiveLivenessResult方法,获取活体检测结果。
    public static getDetectionResultInfo() {
      // getInteractiveLivenessResult接口调用完会释放资源
      let resultInfo = interactiveLiveness.getInteractiveLivenessResult();
      const promise: Promise<interactiveLiveness.InteractiveLivenessResult> = new Promise((resolve, reject) => {
     resultInfo.then(async (data) => {
       if (data.mPixelMap !== undefined) {
         promptAction.showToast({
           message: $r('app.string.start_decrypt_success_text'),
           duration: promptActionDuration
         });
         resolve(data);
       } else {
         promptAction.showToast({
           message: $r('app.string.start_decrypt_error_text'),
           duration: promptActionDuration
         });
       }
     }).catch((err: BusinessError) => {
       if (err.code !== 1008302000) {
         promptAction.showToast({
           message: err.message + ',请重试',
           duration: promptActionDuration
         });
       }
       reject(err);
     })
      })
      return promise;
    }
    
  3. 使用util工具类对图片base64和pixelmap互相转换。
    export function arrayBufferToBase64(buffer: ArrayBuffer) {
      const base64Helper = new util.Base64Helper();
      let data = base64Helper.encodeSync(new Uint8Array(buffer.slice(0, buffer.byteLength)));
      let textDecoder = util.TextDecoder.create('utf-8', { ignoreBOM: true });
      return textDecoder.decodeToString(data, { stream: false });
    }
    

4.通过cipher对象实现对图片和文字的加解密操作。

export async function encryptMessagePromise(plainText: string,
  cryptoMode: cryptoFramework.CryptoMode) {
  let base = new util.Base64Helper();
  // 通过指定算法名称,获取相应的Cipher实例。Cipher:提供加解密的算法操作功能。
  let cipher = cryptoFramework.createCipher('AES128|ECB|PKCS7');
  // 通过指定算法名称的字符串,获取相应的对称密钥生成器实例
  let symKeyGenerator = cryptoFramework.createSymKeyGenerator('AES128');
  let keyMaterialBlob = genKeyMaterialBlob();
  // 异步根据指定数据生成对称密钥,通过注册回调函数获取结果。
  let promiseSymKey = await symKeyGenerator.convertKey(keyMaterialBlob)
  // 初始化加解密的cipher对象
  await cipher.init(cryptoMode, promiseSymKey, null);
  // 加密或者解密的数据
  let text: cryptoFramework.DataBlob =
    cryptoMode === cryptoFramework.CryptoMode.ENCRYPT_MODE ? { data: stringToUint8Array(plainText) } :
      { data: base.decodeSync(plainText) }
  const promise = new Promise<Uint8Array>(async (resolve, reject) => {
    // 获取加密数据
    await cipher.doFinal(text).then((res) => {
      resolve(res.data);
    }).catch((err: BusinessError) => {
      reject(err);
    })
  })
  return promise;
}

高性能知识点

不涉及

工程结构&模块类型

livedetectionandencryptiond                   // har类型(默认使用har类型,如果使用hsp类型请说明原因)
|---components
|   |---Encode.ets                            // 加解密&数据转换方法
|   |---StartFacialFecognition.ets            // 活体检测方法类
|---LiveDetectionAndEncryptionPage.ets        // 活体检测&加解密页面

### 如何在 CUDA 10.2 上安装 PyTorch 为了确保顺利安装适用于 CUDA 10.2 的 PyTorch 版本,建议通过 Anaconda 来管理依赖关系和环境。以下是具体操作指南: #### 创建并激活新的 Conda 环境 推荐先创建一个新的 Python 环境来隔离不同项目的库文件,防止版本冲突。 ```bash conda create -n pytorch_env python=3.7 conda activate pytorch_env ``` #### 配置国内镜像源加快下载速度 考虑到网络因素可能影响包的获取效率,可设置清华大学开源软件镜像站作为默认渠道之一[^5]。 ```bash conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --set show_channel_urls yes conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/win-64/ ``` #### 安装指定版本的 PyTorch 及其相关组件 根据需求选择合适的 PyTorch 和其他必要的扩展模块版本进行安装。对于 CUDA 10.2 用户来说,可以选择如下命令完成安装过程[^2]。 ```bash conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=10.2 -c pytorch ``` #### 验证安装情况 最后一步是在 Python 解释器内部验证是否正确加载了带有 GPU 支持功能的 PyTorch 库[^4]。 ```python import torch print(torch.__version__) print(torch.cuda.is_available()) ``` 如果一切正常,则会显示相应的 PyTorch 版本号,并确认存在可用的 CUDA 设备支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值