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%')
  }
}
相关文章
|
19天前
|
人工智能 测试技术 计算机视觉
让AI看懂3小时长视频!Eagle 2.5:英伟达推出8B视觉语言模型,长视频理解能力碾压72B大模型
Eagle 2.5是英伟达推出的8B参数视觉语言模型,通过创新训练策略在长视频和高分辨率图像理解任务中超越更大规模模型,支持512帧视频输入和多样化多模态任务。
128 10
让AI看懂3小时长视频!Eagle 2.5:英伟达推出8B视觉语言模型,长视频理解能力碾压72B大模型
|
5天前
|
人工智能 Java Serverless
【MCP教程系列】搭建基于 Spring AI 的 SSE 模式 MCP 服务并自定义部署至阿里云百炼
本文详细介绍了如何基于Spring AI搭建支持SSE模式的MCP服务,并成功集成至阿里云百炼大模型平台。通过四个步骤实现从零到Agent的构建,包括项目创建、工具开发、服务测试与部署。文章还提供了具体代码示例和操作截图,帮助读者快速上手。最终,将自定义SSE MCP服务集成到百炼平台,完成智能体应用的创建与测试。适合希望了解SSE实时交互及大模型集成的开发者参考。
|
6天前
|
人工智能 自然语言处理 开发者
HarmonyOS NEXT~鸿蒙开发利器:CodeGenie AI辅助编程工具全面解析
鸿蒙开发迎来新利器!DevEco CodeGenie 是华为推出的 AI 辅助编程工具,专为 HarmonyOS NEXT 开发者设计。它具备智能代码生成(支持 ArkTS 和 C++)、精准知识问答以及万能卡片生成三大核心功能,大幅提升编码效率。通过与 DeepSeek 深度整合,CodeGenie 实现流畅的问答体验,帮助开发者解决技术难题。无论是新手还是资深开发者,都能从中受益,享受更智能高效的开发过程。快来体验吧!
40 5
|
7天前
|
存储 人工智能 测试技术
HarmonyOS Next~HarmonyOS应用测试全流程解析:从一级类目上架到二级类目专项测试
本文深入解析HarmonyOS应用测试全流程,涵盖从一级类目通用测试到二级类目专项测试的技术方案。针对兼容性、性能、安全测试及分布式能力验证等关键环节,提供详细实践指导与代码示例。同时,结合典型案例分析常见问题及优化策略,帮助开发者满足华为严苛的质量标准,顺利上架应用。文章强调测试在开发中的核心地位,助力打造高品质HarmonyOS应用。
27 2
|
5天前
|
人工智能 自然语言处理 文字识别
阿里云 AI 搜索开放平台新增:服务开发能力
阿里云 AI 搜索开放平台新发布:服务开发能,可通过集成 dsw 能力并新增 notebook 功能,进一步提升用户编排效率。
|
17天前
|
安全 Linux 测试技术
对鸿蒙 Next 系统“成熟论”的深度剖析-优雅草卓伊凡
对鸿蒙 Next 系统“成熟论”的深度剖析-优雅草卓伊凡
51 10
对鸿蒙 Next 系统“成熟论”的深度剖析-优雅草卓伊凡
|
16天前
|
人工智能 安全 物联网
解析 OpenHarmony、HarmonyOS 与 HarmonyOS Next:优雅草卓伊凡的观点
解析 OpenHarmony、HarmonyOS 与 HarmonyOS Next:优雅草卓伊凡的观点
59 4
解析 OpenHarmony、HarmonyOS 与 HarmonyOS Next:优雅草卓伊凡的观点
|
16天前
|
人工智能 JavaScript 前端开发
【HarmonyOS NEXT+AI】问答04:仓颉编程语言适合毕业设计吗?
本文探讨了仓颉编程语言是否适合用于毕业设计的问题。仓颉编程语言虽小众,但具备独特性与创新性,可开发鸿蒙应用及AI大模型应用,具有前瞻性。其语法与主流语言类似,易于上手,且有丰富课程支持学习。若时间充裕并结合相关主题,使用仓颉语言能让毕业设计在答辩中脱颖而出。同时,文章还介绍了毕业设计答辩的时间安排,帮助学生合理规划。
38 3
【HarmonyOS NEXT+AI】问答04:仓颉编程语言适合毕业设计吗?
|
14天前
|
网络协议 Java 开发工具
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
全平台开源即时通讯IM框架MobileIMSDK:7端+TCP/UDP/WebSocket协议,鸿蒙NEXT端已发布,5.7K Stars
53 1
|
7天前
|
开发框架 人工智能 大数据
HarmonyOS Next~HarmonyOS SDK应用服务:开发者的全新技术生态
本文深入解析了HarmonyOS SDK应用服务的技术架构与开发优势,涵盖其分布式服务框架、核心特性和开发流程。HarmonyOS凭借统一开发框架、高效跨设备协同及低延迟系统服务,为开发者提供全新技术生态。未来,随着生态完善,SDK将在智能设备场景支持、AI与大数据集成等方面持续演进,助力开发者释放创新潜力。
31 0

热门文章

最新文章