InspireFaceInspireFace1.2.4.d3
首页
快速开始
获取和编译
完整示例
  • English
  • 简体中文
GitHub
首页
快速开始
获取和编译
完整示例
  • English
  • 简体中文
GitHub
  • 介绍
  • 快速开始
  • 功能概览
  • 使用指南

    • 架构与生命周期
    • 模型资源包
    • 图像输入与坐标
    • 会话与跟踪
    • 人脸分析
    • 识别与特征库
    • 人脸关键点
    • 活体检测
    • 人脸抓拍
    • 补充 API 示例
  • 语言与平台

    • C API
    • C++
    • Python
    • Android
    • Apple
    • iOS
    • macOS
    • HarmonyOS
  • 获取和编译

    • 概述与下载
    • 源码准备与通用选项
    • Linux
    • macOS
    • Android
    • iOS
    • HarmonyOS
    • NVIDIA TensorRT
    • Rockchip NPU
    • Python 打包
  • 硬件部署

    • ARM
    • NVIDIA TensorRT
    • Rockchip NPU
    • Rockchip 上的 Python
  • InspireCV
  • 完整示例
  • API 功能索引
  • 性能测量
  • 图像处理性能
  • 常见问题

HarmonyOS

ArkTS API 通过 HAR 模块提供会话、图像流、检测、关键点、特征、分析流水线和 FeatureHub。下面的构建步骤与示例使用 InspireFace 1.2.4。

HarmonyOS 构建章节介绍工具链配置、原生 SDK、HAR 工程生成与打包检查。

构建模块

准备 InspireFace 源码依赖,安装 OpenHarmony Native SDK,然后从仓库根目录运行:

OHOS_NATIVE_HOME=/path/to/native-sdk/native \
  ./command/build_harmonyos_napi.sh

整理后的 HAR 项目输出到:

build/inspireface-harmonyos-napi-arm64-v8a/install/HarmonyOS/har

在 DevEco Studio 中将该目录导入为模块,或通过项目的 Hvigor 流程打包。原生库位于 src/main/libs/arm64-v8a/libinspireface_napi.so,类型声明位于 src/main/cpp/types/libinspireface_napi。

标准 HAR 构建面向 arm64-v8a,使用 MNN CPU 推理和原始缓冲区图像输入。先在本地构建模块,再到目标设备上验证运行,然后接入应用流程。

接入应用工程

  1. 将构建输出中的 har 目录复制到工程,作为 inspireface 模块。使用安装输出目录,其中同时包含 ArkTS 源码和编译好的 .so。
  2. 在应用工程中注册该模块,并从 entry 模块添加本地依赖。假设目录为 project/entry 和 project/inspireface,entry 的 oh-package.json5 可以加入:
{
  "dependencies": {
    "@hyperinspire/inspireface": "file:../inspireface"
  }
}
  1. 在 DevEco Studio 中同步依赖,一并打包 Index.ets、原生类型声明和 src/main/libs/arm64-v8a/libinspireface_napi.so。
  2. 将模型放到应用可读取的文件位置。如果随 raw resource 打包,先复制到应用文件目录,再将文件系统路径传给 launch。

先确认打包,再连接摄像头

首次调用使用一张已知内容的小尺寸 RGBA 图像。在 arm64 目标上确认输入为 width × height × 4 字节、模型路径可读、原生库已打包,然后再处理摄像头的实际格式与步长。

检测 RGBA 帧

将模型包复制到应用可访问的文件,向 launch 传入路径。下面的函数从调用方接收紧密排列的 RGBA 字节:

import { DetectMode, Feature, ImageFormat, InspireFace, Rotation, Session }
  from '@hyperinspire/inspireface';

export function detectCount(resourcePath: string, rgba: Uint8Array,
                            width: number, height: number): number {
  InspireFace.launch(resourcePath);
  let session: Session | undefined = undefined;
  try {
    session = InspireFace.createSession({
      featureMask: Feature.NONE,
      detectMode: DetectMode.ALWAYS_DETECT,
      maxFaces: 5
    });
    const image = InspireFace.createImageStream(
      rgba, width, height, ImageFormat.RGBA, Rotation.DEGREE_0);
    try {
      const faces = session.track(image);
      try {
        return faces.detectedNum;
      } finally {
        session.releaseFaceResult(faces);
      }
    } finally {
      image.close();
    }
  } finally {
    if (session !== undefined) session.close();
    InspireFace.terminate();
  }
}

处理视频时,在帧循环外完成启动与会话创建。使用跟踪模式,每个会话处理一个序列,并在对应分析或特征提取结束后释放每份结果。

内存归属与工作线程

Object生命周期与释放方式
ImageStream创建时复制输入字节,处理后关闭。
ImageBitmap持有位图存储,使用结束后调用 close()。
Session.track() result返回独立的检测快照,通过 session.releaseFaceResult(result) 释放。
Session保存推理与跟踪状态,处理结束后调用 close() 释放。

这些方法同步执行,放在工作线程中运行,每个 worker 管理自己的会话和原生句柄。保存检测快照后还要提取特征或执行分析时,一同保留对应帧的像素。

分析与特征库

创建会话时使用功能掩码,例如 Feature.QUALITY | Feature.LIVENESS,随后将同一帧的结果传给 session.processPipeline(image, faces)。访问输出数组前检查人脸数量。

FeatureHub 使用 bigint ID 对应原生有符号 64 位整数。应用中也使用 bigint 保存与传递 ID,例如 1001n。

按功能查看示例

在以下页面选择 HarmonyOS 标签。示例使用 @hyperinspire/inspireface 导出的 ArkTS 对象。

TaskArkTS entry pointsGuide
跟踪与会话设置Session.track, configure, clearTracking会话与跟踪
密集与五点关键点getDenseLandmarks, getFiveKeyPoints人脸关键点
质量、口罩、属性与表情Session.processPipeline, detectFaceQuality人脸分析
RGB 活体与动作Session.processPipeline活体检测
特征与特征库Session.extractFeature, compareFeatures, FeatureHub识别与特征库
抓拍与检测快照FaceCaptureSession, Session.releaseFaceResult人脸抓拍
对齐图、分数与诊断getFaceAlignmentImage, similarityToPercentage, getDiagnosticInformation补充 API 示例

完整类型见 ArkTS 接口声明。输入格式和旋转规则见图像输入,运行环境与工作线程的生命周期见会话架构。

编辑此页
最近更新: 2026/9/28 15:20
贡献者: Jingyu
上一页
macOS