HarmonyOS NEXT AI基础视觉服务-人脸对比

简介: 这是一套基于AI基础视觉服务实现的人脸对比系统,用户可通过调用设备相册选择两张图片,系统将提取人脸特征并计算相似度,最终以结构化数据形式展示对比结果(如相似度值和是否为同一人)。代码涵盖模块导入、双图选择、图像处理、人脸对比核心逻辑及UI界面构建,支持异常处理与权限管理,确保功能稳定性和兼容性。适配场景包括身份验证、人脸匹配等,具有较高的实用价值。

案例描述

这是一个基于AI基础视觉服务实现的人脸对比案例,通过调用设备相册选择两张图片进行人脸特征比对,并展示相似度计算结果。

在这里插入图片描述

实现步骤:

1. 模块导入

// 导入功能模块
import {
    photoAccessHelper } from '@kit.MediaLibraryKit';
import {
    fileIo } from '@kit.CoreFileKit';
import {
    image } from '@kit.ImageKit';
import {
    faceComparator } from '@kit.CoreVisionKit';
import {
    promptAction } from '@kit.ArkUI';
import {
    BusinessError } from '@kit.BasicServicesKit';

2. 双图选择功能

// 创建通用图片选择方法
async chooseImage (): Promise<PixelMap> {
   
  const photoPicker = new photoAccessHelper.PhotoViewPicker();
  const photoResult = await photoPicker.select({
   
    MIMEType: photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE,
    maxSelectNumber: 1
  })
  // 获取选中图片文件句柄
  const fileSource = await fileIo.open(photoResult.photoUris[0], fileIo.OpenMode.READ_ONLY);
  // 生成像素图格式数据
  return await image.createImageSource(fileSource.fd).createPixelMap();
}

3. 图像处理流程

// 双图存储变量定义
@Local chooseImage1?: PixelMap
@Local chooseImage2?: PixelMap

// 图片点击处理逻辑
.onClick(async () => {
   
  const chooseImage = await this.chooseImage()
  this.chooseImage1 = chooseImage // 第一张图存储
})

.onClick(async () => {
   
  const chooseImage = await this.chooseImage()
  this.chooseImage2 = chooseImage // 第二张图存储
})

4. 人脸对比核心实现

// 配置双图对比参数
let visionInfo: faceComparator.VisionInfo = {
   
  pixelMap: this.chooseImage1,
};

let visionInfo1: faceComparator.VisionInfo = {
   
  pixelMap: this.chooseImage2,
};

// 执行人脸特征对比
faceComparator.compareFaces(visionInfo, visionInfo1)
  .then(result => {
   
    // 弹窗显示相似度结果
    promptAction.showDialog({
    message: JSON.stringify(result) })
  })
  .catch((e: BusinessError) => {
   
    // 异常信息提示
    promptAction.showToast({
    message: e.message })
  })

5. 检测结果展示

// 弹窗显示结构化对比结果
promptAction.showDialog({
   
  message: JSON.stringify({
   
    similarity: 0.92, // 相似度值示例
    isSamePerson: true // 是否为同一人
  })
})

落地代码:

1. UI组件定义

@Entry
@ComponentV2
struct FaceComparator {
   
  @Local chooseImage1?: PixelMap
  @Local chooseImage2?: PixelMap

2. 主功能方法

// 整合双图选择、特征对比完整逻辑
async chooseImage(): Promise<PixelMap> {
   
  // 完整选择逻辑...
}

3. 界面构建

build() {
   
  Column({
    space: 20 }) {
   
    Image(this.chooseImage1)
      .onClick(/* 第一图选择 */)
    Image(this.chooseImage2)
      .onClick(/* 第二图选择 */)
    Button('人脸对比')
      .onClick(/* 触发对比逻辑 */)
  }
}

总结梳理:

核心点

  1. 需要申请相册访问权限
  2. 双图选择采用独立存储变量管理
  3. compareFaces接口返回相似度(0-1)及特征点数据
  4. 异常处理通过BusinessError捕获设备兼容性问题

完整代码

import {
    photoAccessHelper } from '@kit.MediaLibraryKit';
import {
    fileIo } from '@kit.CoreFileKit';
import {
    image } from '@kit.ImageKit';
import {
    faceComparator } from '@kit.CoreVisionKit';
import {
    promptAction } from '@kit.ArkUI';
import {
    BusinessError } from '@kit.BasicServicesKit';

@Entry
@ComponentV2
struct FaceComparator {
   
  @Local chooseImage1?: PixelMap
  @Local chooseImage2?: PixelMap

  async chooseImage (): Promise<PixelMap> {
   
    const photoPicker: photoAccessHelper.PhotoViewPicker = new photoAccessHelper.PhotoViewPicker();
    const photoResult = await photoPicker.select({
   
      MIMEType: photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE,
      maxSelectNumber: 1
    })
    const photoUri = photoResult.photoUris[0]

    const fileSource = await fileIo.open(photoUri, fileIo.OpenMode.READ_ONLY);
    const imageSource = image.createImageSource(fileSource.fd);
    const chooseImage = await imageSource.createPixelMap();
    return chooseImage
  }

  build() {
   
    Column({
    space: 20 }) {
   
      Image(this.chooseImage1)
        .alt($r('sys.media.save_button_picture'))
        .width(200)
        .aspectRatio(1)
        .onClick(async () => {
   
          const chooseImage = await this.chooseImage()
          this.chooseImage1 = chooseImage
        })
      Image(this.chooseImage2)
        .alt($r('sys.media.save_button_picture'))
        .width(200)
        .aspectRatio(1)
        .onClick(async () => {
   
          const chooseImage = await this.chooseImage()
          this.chooseImage2 = chooseImage
        })
      Button('人脸对比')
        .id('FaceComparatorButton')
        .onClick(async () => {
   
          if (this.chooseImage1 && this.chooseImage2) {
   
            let visionInfo: faceComparator.VisionInfo = {
   
              pixelMap: this.chooseImage1,
            };
            let visionInfo1: faceComparator.VisionInfo = {
   
              pixelMap: this.chooseImage2,
            };
            faceComparator.compareFaces(visionInfo, visionInfo1)
              .then(result => {
   
                promptAction.showDialog({
    message: JSON.stringify(result) })
              })
              .catch((e: BusinessError) => {
   
                promptAction.showToast({
    message: e.message })
              })
          }
        })
    }
    .padding(15)
    .height('100%')
    .width('100%')
  }
}
相关文章
|
3月前
|
监控 JavaScript 编译器
从“天书”到源码:HarmonyOS NEXT 崩溃堆栈解析实战指南
本文详解如何利用 hiAppEvent 监控并获取 sourcemap、debug so 等核心产物,剖析了 hstack 工具如何将混淆的 Native 与 ArkTS 堆栈还原为源码,助力开发者掌握异常分析方法,提升应用稳定性。
500 51
|
3月前
|
人工智能 自然语言处理 安全
用AI重构人机关系,OPPO智慧服务带来了更“懂你”的体验
OPPO在2025开发者大会上展现智慧服务新范式:通过大模型与意图识别技术,构建全场景入口矩阵,实现“服务找人”。打通负一屏、小布助手等系统级入口,让服务主动触达用户;为开发者提供统一意图标准、一站式平台与安全准则,降低适配成本,共建开放生态。
378 31
|
4月前
|
存储 缓存 5G
鸿蒙 HarmonyOS NEXT端云一体化开发-云存储篇
本文介绍用户登录后获取昵称、头像的方法,包括通过云端API和AppStorage两种方式,并实现上传头像至云存储及更新用户信息。同时解决图片缓存问题,添加上传进度提示,支持自动登录判断,提升用户体验。
217 1
|
4月前
|
存储 负载均衡 数据库
鸿蒙 HarmonyOS NEXT端云一体化开发-云函数篇
本文介绍基于华为AGC的端云一体化开发流程,涵盖项目创建、云函数开通、应用配置及DevEco集成。重点讲解云函数的编写、部署、调用与传参,并涉及环境变量设置、负载均衡、重试机制与熔断策略等高阶特性,助力开发者高效构建稳定云端服务。
474 1
鸿蒙 HarmonyOS NEXT端云一体化开发-云函数篇
|
3月前
|
人工智能 供应链 搜索推荐
拔俗AI 智能就业咨询服务平台:求职者的导航,企业的招聘滤网
AI智能就业平台破解求职招聘困局:精准匹配求职者、企业与高校,打破信息壁垒。简历诊断、岗位推荐、技能提升一站式服务,让就业更高效。
|
3月前
|
人工智能 Cloud Native 自然语言处理
拔俗AI智能体服务开发:你的7x24小时数字员工,让企业效率飙升的秘密武器
在“人效为王”时代,企业面临服务响应慢、成本高、协同难等痛点。阿里云AI智能体以自主决策、多模态交互、持续学习三大引擎,打造永不疲倦的“数字员工”,实现7×24小时高效服务,助力企业降本增效、驱动创新增长。(238字)
|
3月前
|
人工智能 供应链 算法
AI 产业服务平台:打造产业智能化的“加速器”与“连接器”
AI产业服务平台整合技术、数据、算力与人才,为中小企业提供低门槛、一站式AI赋能服务,覆盖研发、生产、营销、管理全链条,助力产业智能化转型。
|
4月前
|
人工智能 数据可视化 前端开发
AI Ping:精准可靠的大模型服务性能评测平台
AI Ping是清华系团队推出的“大模型服务评测平台”,被誉为“AI界的大众点评”。汇聚230+模型服务,7×24小时监测性能数据,以吞吐量、延迟等硬指标助力开发者科学选型。界面简洁,数据可视化强,支持多模型对比,横向对标国内外主流平台,为AI应用落地提供权威参考。
967 3
|
4月前
|
传感器 监控 安全
HarmonyOS NEXT 5.0 的星闪(NearLink)开发应用案例
V哥分享HarmonyOS NEXT 5.0星闪开发实战,涵盖智能车钥匙无感解锁与工业传感器监控。低延迟、高可靠,代码完整,速来学习!
655 0
|
4月前
|
人工智能 安全 搜索推荐
面向阿里云百炼用户的AI安全护栏服务
本服务专为百炼平台用户提供,旨在提升大模型的文字输入和输出安全审核体验。在遵守百炼平台红线管控政策的基础上,我们提供了灵活的审核标签管理功能,允许用户根据需要开启或关闭特定审核标签。此外,我们还提供定制化的安全策略配置服务,以满足不同用户的个性化需求。
265 0