首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >HarmonyOS NEXT AI基础视觉服务-人脸识别

HarmonyOS NEXT AI基础视觉服务-人脸识别

原创
作者头像
用户8181473
发布2025-03-30 13:30:38
发布2025-03-30 13:30:38
4200
举报

案例描述

这是一个基于AI基础视觉服务实现的人脸识别案例,通过调用设备相册选择图片后检测图像中的人脸信息并展示结构化识别结果。

实现步骤:

1. 模块导入

代码语言:javascript
复制
// 导入功能模块
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { fileIo } from '@kit.CoreFileKit';
import { image } from '@kit.ImageKit';
import { faceDetector } from '@kit.CoreVisionKit';
import { promptAction } from '@kit.ArkUI';
import { JSON } from '@kit.ArkTS';

2. 相册选择功能

代码语言:javascript
复制
// 创建相册选择器实例
const photoPicker: photoAccessHelper.PhotoViewPicker = new photoAccessHelper.PhotoViewPicker();
// 设置选择参数
const photoResult = await photoPicker.select({
  MIMEType: photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE,
  maxSelectNumber: 1
})
// 获取选中图片URI
const photoUri = photoResult.photoUris[0]

3. 图像处理流程

代码语言:javascript
复制
// 打开图片文件句柄
const fileSource = await fileIo.open(photoUri, fileIo.OpenMode.READ_ONLY);
// 创建图像数据源
const imageSource = image.createImageSource(fileSource.fd);
// 生成像素图格式数据
const chooseImage = await imageSource.createPixelMap();

4. 人脸检测核心实现

代码语言:javascript
复制
// 初始化人脸检测器
faceDetector.init();
// 配置视觉识别参数
const visionInfo: faceDetector.VisionInfo = {
  pixelMap: chooseImage
};
// 执行人脸检测
const visionResult = await faceDetector.detect(visionInfo)
// 是否包含人脸
this.isFace = visionResult.length > 0

5. 检测结果展示

代码语言:javascript
复制
// 弹窗显示结构化检测结果
promptAction.showDialog({
  message: JSON.stringify(visionResult)
})

落地代码:

1. UI组件定义

代码语言:javascript
复制
@Entry
@ComponentV2
struct FaceDetector {
  @Local isFace: boolean = false

2. 主功能方法

代码语言:javascript
复制
async checkFace() {
  // 整合相册选择、图像处理、人脸检测完整逻辑
}

3. 界面构建

代码语言:javascript
复制
build() {
  Column() {
    Button('选择相册 人脸识别')
      .onClick(() => {
        this.checkFace()
      })
  }
  .height('100%')
  .width('100%')
}

总结梳理:

核心点

  1. 相册访问需要用户授权权限
  2. 图像处理需通过MediaLibraryKit和ImageKit协作完成
  3. 检测结果包含人脸位置、特征点等结构化数据

完整代码

代码语言:javascript
复制
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { fileIo } from '@kit.CoreFileKit';
import { image } from '@kit.ImageKit';
import { faceDetector } from '@kit.CoreVisionKit';
import { promptAction } from '@kit.ArkUI';
import { JSON } from '@kit.ArkTS';

@Entry
@ComponentV2
struct FaceDetector {
  @Local isFace: boolean = false

  async checkFace() {
    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();

    faceDetector.init();
    const visionInfo: faceDetector.VisionInfo = {
      pixelMap: chooseImage
    };
    const visionResult = await faceDetector.detect(visionInfo)
    this.isFace = visionResult.length > 0
    
    promptAction.showDialog({
      message: JSON.stringify(visionResult)
    })
  }

  build() {
    Column() {
      Button('选择相册 人脸识别')
        .onClick(() => {
          this.checkFace()
        })
    }
    .height('100%')
    .width('100%')
  }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 案例描述
  • 实现步骤:
    • 1. 模块导入
    • 2. 相册选择功能
    • 3. 图像处理流程
    • 4. 人脸检测核心实现
    • 5. 检测结果展示
  • 落地代码:
    • 1. UI组件定义
    • 2. 主功能方法
    • 3. 界面构建
  • 总结梳理:
    • 核心点
    • 完整代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档