简介
Rock-X SDK 是基于 RK3399Pro/RK1808 平台的一套 AI 组件库。开发者通过 Rock-X SDK提供的 API 接口能够快速构建 AI 应用。
Rock-X SDK 主要功能

本篇是使用Rock-X SDK进行人脸特征点定位快速开发的过程,使用自定义或其它的模型的请使用rknn-toolkit和rknn-api进行开发
性能指标
人脸检测性能

人脸特征点定位
人脸特征点定位会获取人脸的48个关键点。

人脸特征点定位误差计算公式如下:

euclidean(d(j) − g(j)) 表是第 j 个检测点与标注点之间的欧式距离。d 表示左外眼角和右外眼角的欧式距离。
调用过程

相关代码
以下为Android的相关代码,完整代码在/RockX_SDK_V1.1.0_20191115/demo/rk3399pro_android_demo/rockx-android-demo-face_landmark.zip。
此demo功能是从摄像头获取图像数据,检测图像中的人脸和人脸的特征点,然后在预览中画出人脸特征点。
调用Rock-X仅需三步,即可获取图像中的人脸和人脸的特征点。
详细的函数定义和相关数据结构请参考:/RockX_SDK_V1.1.0_20191115/doc/rockx_api_doc/html/index.html
初始化

以上代码加载了Rock-X的人脸检测和人脸特征点定位模块,native_create_rockx_module()为native函数,实际调用的函数为C++代码Java_com_rockchip_gpadc_demo_rockx_RockX_native_1create_1rockx_1module(), 实现如下:

此函数最终调用Rock-X的API rockx_create()完成模块的创建。
检测人脸
初始化模块后,通过摄像头获取数据,将图像数据传入detectFace() java函数获取图像中的人脸,detectFace()调用native函数native_face_detect()实际调用了Java_com_rockchip_gpadc_demo_rockx_RockX_native_1face_1detect()函数,最终通过Roxk-X的API rockx_face_detect()得到图像中的人脸。
Java_com_rockchip_gpadc_demo_rockx_RockX_native_1face_1detect()函数部分代码如下:

检测人脸关键点
通过人脸检测模块获取图像中的人脸后,将人脸数据传入RockX.FaceLanmark()获取人脸关键点。与人脸检测类似,RockX.FaceLanmark()调用native函数native_face_lanmark()即调用Java_com_rockchip_gpadc_demo_rockx_RockX_native_1face_1lanmark(),最终通过Rock-X API rockx_face_landmark()获取人脸的关键点。

代码测试

原作者:rany
|