瑞芯微Rockchip开发者社区
直播中

贾熹

7年用户 1612经验值
私信 关注
[经验]

怎样使用Rock-X SDK对人体骨骼点关键点进行开发获取呢

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

本篇是使用Rock-X SDK进行获取人体骨骼点关键点快速开发的过程,使用自定义或其它的模型的请使用rknn-toolkit和rknn-api进行开发
性能指标
人体骨骼点关键点

注:

mAP@OKS0.5=0.623 表示 OKS=0.5 时对应的 mAP=0.623。
MSCOCO val2017是COCO 2017 Keypoint Detection Task的验证集, 共5000张, 其中2000多张有关键点。

调用过程

相关代码
以下为Android的相关代码,完整代码在/RockX_SDK_V1.1.0_20191115/demo/rk3399pro_android_demo/rockx-android-demo-pose_body.zip。

此demo功能是从摄像头获取图像数据,检测图像中的人体骨骼点关键点,然后在预览中画出关键点,并连接相关点。
demo的代码很多都是处理java和C++间的数据交换问题,实际调用的Rock-x的API很少。

详细的函数定义和相关数据结构请参考:/RockX_SDK_V1.1.0_20191115/doc/rockx_api_doc/html/index.html

初始化

程序通过调用RockX.create()创建Rock-X对应的人体骨骼点关键点模块,RockX.native_create_rockx_module()为native函数,实际调用的是C++层的Java_com_rockchip_gpadc_demo_rockx_RockX_native_1create_1rockx_1module(),最后通过Rock-X的API rockx_create()创建对应的模块返回rockx_handle_t指针。
设置回调
初始化后,进行人体骨骼关键点检测前,程序通过RockX.setPoseResultCallback()设置检测结果回调。RockX.setPoseResultCallBack()会调用native函数RockX.native_set_callback()将回调实例传入jni层。RockX.native_set_callback()的实现如下:

回调实例被保存在g_result_callback_obj全局变量中,在callback_f()函数中被使用。
检测人体骨骼关键点
进行人体骨骼关键点检测程序调用的是RockX.getBodyKeyPoints()方法,此方法只是调用native函数RockX.native_pose_body()。native_pose_body()部分实现如下:

Java_com_rockchip_gpadc_demo_rockx_RockX_native_1pose_1body()中rockx_pose_body()为Rock-X的API,即实际的检测函数,其参数handle是初始化时返回的rockx_handle_t指针,callback_f是结果回调函数会使用g_result_callback_obj调用java层的函数返回结果给java层。

最后java层会在预览中画出关键点和连接相关的点。

代码测试

原作者:rany

更多回帖

发帖
×
20
完善资料,
赚取积分