【ShiMetaPi】基于OpenHarmony的RKNN人脸识别应用案例

一、背景介绍

在边缘计算领域,RK3588作为一款高性能AIoT芯片,具备6TOPS的NPU算力,非常适合部署人脸识别等计算机视觉应用。深圳市视美泰技术股份有限公司(以下简称“视美泰”)基于OpenAtom OpenHarmony(以下简称“OpenHarmony”)系统,结合Rockchip NPU强大的AI算力,基于RKNN开发了人脸识别应用案例,此案例将RKNN能力与OpenHarmony进行适配和集成,为开发者提供直观、便捷的 AI 应用体验。

二、RKNN介绍

RKNN是瑞芯微推出的神经网络推理加速引擎,Rockchip NPU平台使用的模型类型,RKNN通常应用于边缘设备上的深度学习任务,如人脸识别、物体检测和语音识别等。它是一个强大的神经网络开发和运行框架,简化了深度学习模型开发的多个复杂步骤,并提供了优秀的跨平台支持和模型优化能力。

三、技术实现详解

本案例采用双模型推理设计,充分发挥Rockchip NPU的硬件优势:

  • YOLOv5人脸检测模型:负责实时检测图像中的人脸位置
  • FaceNet特征提取模型:提取人脸特征向量,实现精准识别

检测流程:摄像头采集 → 图像预处理 → RKNN推理 → 结果处理 → UI显示

1.模型加载与初始化

模型加载流程:

  • 首先尝试从应用沙箱目录加载已保存的模型文件
  • 如果沙箱中不存在,则从rawfile资源中加载
  • 初始化RKNN上下文,设置使用所有NPU核心(RKNN_NPU_CORE_0_1_2)
  • 查询模型的输入输出信息,获取tensor属性

2.预览流图像预处理

  • 首先通过opencv库的imread读取预览流图像
  • 获取的预览流图像为BGR格式,需要将BGR转为RGB格式
  • 计算目标尺寸和缩放比例
  • 再通过计算出来的比例进行自适应缩放和填充,通过opencv库的resize和copyMakeBorder完成调整预览流图像大小和添加填充,这种处理方式可以避免图像变形,提高检测精度。

3.人脸检测推理执行

  • 准备并设置输入数据参数
  • 通过rknn_inputs_set设置输入
  • 对预览流图片执行推理,获取输出结果
  • 通过后处理函数处理YOLOv5模型的输出,将输出转换为可用的检测结果,包括边界框坐标、类别和置信度。

4.人脸识别图像预处理

  • 首先根据人脸检测过程中保存的人脸边界坐标数据,对对应的预览流图片进行人脸裁切,将预览流中裁切出来的人脸图尺寸缩放到224*224,将这一尺寸作为标准的人脸识别输入尺寸,将缩放好的图片输出保存。
  • 启动人脸识别工作线程(如果尚未启动)
  • 获取当前时间戳,查找刚刚输出的缩放好的图片,将时间戳最接近现在时间戳的添加到异步处理队列中。

5.人脸识别推理流程

  • 将准备推理的人脸图像进行预处理。
  • 准备输入数据并且设置输入。
  • 执行推理,获取输出结果。
  • 查询输出张量的属性(包括零点和缩放因子),将输出向量大小调整为128维,并将量化的int8数据转换回浮点数,实现将模型的量化输出转换回原始特征空间。
  • 最后计算特征向量的平方和,计算L2范数,- 将特征向量的每个元素除以L2范数归一化后的特征向量长度为1,便于后续使用余弦相似度计算人脸相似性。

6.获取人脸与人脸库对比

  • 首先人脸库的人脸图像会在应用启动时,自动执行人脸识别推理,并保存从人脸图像中提取的128维特征向量。
  • 再从实时人脸的图像中提取到128维特征向量后,会与人脸库中保存的128维特征向量进行点积计算,因为进行了归一化处理,所以返回值相似度的范围为0.0-1.0,当相似度为0.6以上即为同张人脸。

四、NAPI接口

本应用共提供3个NAPI接口,供开发者在ArkTs调用,能够快速实现人脸识别应用的开发:

下列接口返回值中 * 表示仅在成功时存在并返回

  • saveModelFile - 保存模型文件


  • saveFaceDatabaseImages - 保存人脸数据库图片

  • processImageWithRKNN - 图像处理与人脸识别

程序运行流程

展示应用运行时的部分重要函数

  • 应用启动阶段

  • 摄像头初始化

  • 图片处理流水线

  • RKNN NAPI接口调用

UI渲染与交互

技术特点

  • NPU加速: 充分利用Rockchip NPU的算力,实现高效的模型推理
  • 多核心支持: 设置使用所有NPU核心,最大化硬件利用率
  • 异步处理: 人脸识别采用异步处理,不阻塞UI线程
  • 内存优化: 智能管理模型数据和图像缓存,避免内存泄漏
  • 实时结果反馈: 提供实时的人脸检测和识别结果

依赖

1、操作系统及硬件依赖

  • OpenHarmony系统版本: 仅支持OpenHarmony 5.0.0 64位系统(API 12)。
  • 设备要求: 需要支持Rockchip NPU的设备,案例默认适配RK3588。

2、模型依赖

  • 将所需模型放置在rawfile/model/usemodel/目录下。
  • yolov5.rknn: 人脸检测模型,需要放置在rawfile/model/usemodel/目录下。
  • facenet.rknn: 人脸特征提取模型,需要放置在rawfile/model/usemodel/目录下。

3、人脸识别人脸库依赖

将所需识别人物的参考人脸图片放置在rawfile/face_databases目录下

按 1-20 命名,例如:1.jpg

应用效果展示

  • 演示使用板卡:视美泰 AIoT-3588A
  • OpenHarmony版本:OpenHarmony 5.0.0 Release 64位
  • RKNPU版本: v0.9.8

同一个人不同场景下的识别效果展示

不同人的识别效果展示

总结

本文主要介绍了基于OpenHarmony系统,将RKNN适配了开源鸿蒙,实现RKNN人脸识别应用案例,可智能识别人脸及与人脸库中的参考人脸进行匹配比对。文中使用搭载OpenHarmony5.0.0 Release 64位系统的视美泰AIoT-3588A开发板进行应用案例效果展示。

应用源码获取

RKNN人脸识别应用案例相关源码均已上传至gitcode。

仓库地址

https://gitcode.com/openharmony-sig/applications_ai_model_samples/tree/master/RknnFacialRecognitionDemo_api12

OpenHarmony 64位固件以及烧录文档链接 https://pan.baidu.com/s/1kgLCKylfeaYkuaBwehInBw?pwd=mf6t 提取码:mf6t

说明:本文内容由 ShiMetaPi团队原创,最初发表于 [OpenAtom OpenHarmony 公众号],现同步发布于本社区,以便更多读者参考。

内容概要:本文围绕六自由度机械臂的人工神经网络(ANN)设计展开,重点研究了正向与逆向运动学求解、正向动力学控制以及基于拉格朗日-欧拉法推导逆向动力学方程,并通过Matlab代码实现相关算法。文章结合理论推导与仿真实践,利用人工神经网络对复杂的非线性关系进行建模与逼近,提升机械臂运动控制的精度与效率。同时涵盖了路径规划中的RRT算法与B样条优化方法,形成从运动学到动力学再到轨迹优化的完整技术链条。; 适合人群:具备一定机器人学、自动控制理论基础,熟悉Matlab编程,从事智能控制、机器人控制、运动学六自由度机械臂ANN人工神经网络设计:正向逆向运动学求解、正向动力学控制、拉格朗日-欧拉法推导逆向动力学方程(Matlab代码实现)建模等相关方向的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握机械臂正/逆运动学的数学建模与ANN求解方法;②理解拉格朗日-欧拉法在动力学建模中的应用;③实现基于神经网络的动力学补偿与高精度轨迹跟踪控制;④结合RRT与B样条完成平滑路径规划与优化。; 阅读建议:建议读者结合Matlab代码动手实践,先从运动学建模入手,逐步深入动力学分析与神经网络训练,注重理论推导与仿真实验的结合,以充分理解机械臂控制系统的设计流程与优化策略。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值