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

简介: 这是一个基于AI基础视觉服务的人脸识别案例,通过调用设备相册选择图片,利用MediaLibraryKit、ImageKit和CoreVisionKit等模块完成图像处理与人脸检测,并展示结构化结果。核心功能包括:相册访问授权、图像数据转换、人脸位置及特征点检测,最终以弹窗形式输出检测信息。代码涵盖模块导入、功能实现与UI构建,适合学习AI视觉应用开发流程。

案例描述

这是一个基于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';
AI 代码解读

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]
AI 代码解读

3. 图像处理流程

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

4. 人脸检测核心实现

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

5. 检测结果展示

// 弹窗显示结构化检测结果
promptAction.showDialog({
   
  message: JSON.stringify(visionResult)
})
AI 代码解读

落地代码:

1. UI组件定义

@Entry
@ComponentV2
struct FaceDetector {
   
  @Local isFace: boolean = false
AI 代码解读

2. 主功能方法

async checkFace() {
   
  // 整合相册选择、图像处理、人脸检测完整逻辑
}
AI 代码解读

3. 界面构建

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

总结梳理:

核心点

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

完整代码

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%')
  }
}
AI 代码解读
目录
打赏
0
6
7
0
47
分享
相关文章
|
4天前
|
HarmonyOS NEXT - 通用属性
这段代码展示了组件的通用属性设置方法,涵盖尺寸、位置、布局约束、Flex布局、边框、背景及图像效果等多方面。通过TypeScript实现,提供了灵活的样式配置选项。例如,`.size()` 和 `.width()` 用于调整组件尺寸;`.align()` 和 `.position()` 控制对齐与定位;`.border()` 系列方法定义边框样式;`.backgroundColor()` 和 `.backgroundImage()` 设置背景;图像效果如模糊、阴影、灰度等可通过相应方法实现。
54 0
|
4天前
|
HarmonyOS NEXT 通用事件
通用事件涵盖事件分发、触屏事件、键鼠事件、焦点事件和拖拽事件等多种类型。事件分发将用户操作生成的触控事件分配至各组件;触屏事件包括Touch与Mouse类事件;键鼠事件处理外接设备输入;焦点事件涉及焦点获取、失去及焦点链管理;拖拽事件支持数据在组件间传递。 代码示例展示了如何通过`onClick`实现点击计数、`onFocus`与`onBlur`处理焦点事件,以及通过`bindPopup`展示气泡弹窗提示。此外,还提供了输入框的焦点状态管理与验证逻辑,确保用户体验流畅且交互清晰。
53 0
|
4天前
HarmonyOS NEXT - @Prop和@Link
本示例介绍了`@Prop`和`@Link`装饰器在父子组件间的数据同步机制。`@Prop`实现单向数据绑定,子组件可修改本地值,但不会同步回父组件;父组件数据更新时会覆盖子组件的本地更改。`@Link`实现双向绑定,子组件与父组件数据共享且相互影响。 **限制条件:** - `@Prop`变量深拷贝时可能丢失复杂类型。 - `@Link`不可用于`@Entry`组件,禁止本地初始化,类型需与数据源一致。 **支持类型:** - `@Prop`支持基础类型、对象、数组、`Date`及联合类型,不支持`any`。 - 数据源与`@Prop`类型需匹配,包括简单类型、数组项及对象属性。
58 41
HarmonyOS NEXT - RelationalStore关系型数据库
关系型数据库对应用提供通用的操作接口,底层使用SQLite作为持久化存储引擎,支持SQLite具有的数据库特性,包括但不限于事务、索引、视图、触发器、外键、参数化查询和预编译SQL语句。
56 27
|
4天前
|
HarmonyOS NEXT - @Provide和@Consume
@Provide和@Consume,应用于与后代组件的双向数据同步,应用于状态数据在多个层级之间传递的场景。不同于上文提到的父子组件之间通过命名参数机制传递,@Provide和@Consume摆脱参数传递机制的束缚,实现跨层级传递。
58 21
HarmonyOS NEXT - Preferences用户首选项
- 用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。 - Preferences会将该数据缓存在内存中,当用户读取的时候,能够快速从内存中获取数据。Preferences会随着存放的数据量越多而导致应用占用的内存越大,因此,Preferences不适合存放过多的数据。
56 19
|
5天前
|
HarmonyOS NEXT - ArkUI: Button组件
Button是用于响应用户点击操作的按钮组件,支持胶囊型、圆形和普通三种样式。可通过`type`属性设置样式(默认为胶囊型),并使用`stateEffect`控制按压态效果(默认开启)。Button可包含子组件,实现复杂功能按钮;支持自定义文本样式、背景色及边框弧度等样式。示例代码展示了不同类型按钮的创建、子组件嵌套及点击事件处理方法。
51 18
|
4天前
HarmonyOS NEXT - @State状态变量
ArkUI 是一种声明式 UI 框架,通过状态驱动 UI 更新。@State 装饰的变量用于管理组件内部状态,具有以下特点:私有性(仅组件内访问)、必须初始化、生命周期与组件一致。它支持单向(与 @Prop)和双向(与 @Link、@ObjectLink)数据同步。状态改变时,绑定的 UI 会自动刷新。注意:@State 不支持 Function 类型,不能在 build 中修改状态变量。代码示例中展示了通过 @State 管理按钮点击计数的状态更新机制。
56 16
|
4天前
|
HarmonyOS NEXT - AlertDialog警告弹窗
`AlertDialog` 是一个用于显示警告弹窗的组件,支持自定义文本内容与回调操作。通过 `AlertDialog.show()` 方法,传入配置参数即可展示弹窗。主要功能包括设置标题、内容、按钮、模态状态、对齐方式、过渡动画等。示例代码展示了如何创建一个包含“取消”和“删除”按钮的弹窗,并在点击按钮后执行相应业务逻辑,同时更新页面消息提示。适用于需要用户确认或交互的场景。
53 14
|
4天前
|
HarmonyOS NEXT - @CustomDialog自定义弹窗
CustomDialog 是一个用于实现自定义弹窗的工具,适用于广告、中奖提示、警告信息、软件更新等用户交互场景。通过 `CustomDialogController` 类可控制弹窗的显示与隐藏。开发者可配置多种选项,如对齐方式、偏移量、蒙层颜色、动画效果等,支持模态与非模态窗口,并可通过装饰器 `@CustomDialog` 定义弹窗界面。示例代码展示了如何创建欢迎弹窗及响应用户操作,灵活满足不同需求。
56 13
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等