HarmonyOS NEXT AI 基础视觉服务 - 人脸识别
作者:zhousg
案例描述
这是一个基于 AI 基础视觉服务实现的人脸识别案例,通过调用设备相册选择图片后检测图像中的人脸信息并展示结构化识别结果。
实现步骤:
1. 模块导入
// 导入功能模块
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. 相册选择功能
// 创建相册选择器实例
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. 图像处理流程
// 打开图片文件句柄
const fileSource = await fileIo.open(photoUri, fileIo.OpenMode.READ_ONLY);
// 创建图像数据源
const imageSource = image.createImageSource(fileSource.fd);
// 生成像素图格式数据
const chooseImage = await imageSource.createPixelMap();
复制代码
4. 人脸检测核心实现
// 初始化人脸检测器
faceDetector.init();
// 配置视觉识别参数
const visionInfo: faceDetector.VisionInfo = {
pixelMap: chooseImage
};
// 执行人脸检测
const visionResult = await faceDetector.detect(visionInfo)
// 是否包含人脸
this.isFace = visionResult.length > 0
复制代码
5. 检测结果展示
// 弹窗显示结构化检测结果
promptAction.showDialog({
message: JSON.stringify(visionResult)
})
复制代码
落地代码:
1. UI 组件定义
@Entry
@ComponentV2
struct FaceDetector {
@Local isFace: boolean = false
复制代码
2. 主功能方法
async checkFace() {
// 整合相册选择、图像处理、人脸检测完整逻辑
}
复制代码
3. 界面构建
build() {
Column() {
Button('选择相册 人脸识别')
.onClick(() => {
this.checkFace()
})
}
.height('100%')
.width('100%')
}
复制代码
总结梳理:
核心点
相册访问需要用户授权权限
图像处理需通过 MediaLibraryKit 和 ImageKit 协作完成
检测结果包含人脸位置、特征点等结构化数据
完整代码
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%')
}
}
复制代码
划线
评论
复制
发布于: 刚刚阅读数: 4
版权声明: 本文为 InfoQ 作者【zhousg】的原创文章。
原文链接:【http://xie.infoq.cn/article/e11a243bae58f42968fed2179】。文章转载请联系作者。

zhousg
关注
还未添加个人签名 2025-03-14 加入
还未添加个人简介
评论