Firefly开源社区

RK3399 PRO快速开发 - 人体骨骼点关键点

572

积分

1

威望

0

贡献

社区版主

Rank: 7Rank: 7Rank: 7

积分
572
发表于 2019-12-5 20:12:49     
本帖最后由 rany 于 2019-12-5 20:12 编辑

简介
Rock-X SDK 是基于 RK3399Pro/RK1808 平台的一套 AI 组件库。开发者通过 Rock-X SDK提供的 API 接口能够快速构建 AI 应用。
Rock-X下载地址:https://pan.baidu.com/s/1brKNqxBYDmElm-A56DLu4Q 提取码:ji14  

Rock-X SDK 主要功能  
类别
功能
目标检测人头检测、人车物检测
人脸人脸关键点、人脸属性分析、人脸识别
车牌车牌检测、车牌识别
人体关键点人体骨骼关键点、手指关键点


本篇是使用Rock-X SDK进行获取人体骨骼点关键点快速开发的过程,使用自定义或其它的模型的请使用rknn-toolkit和rknn-api进行开发(链接: http://wiki.t-firefly.com/zh_CN/3399pro_npu/)。

性能指标
人体骨骼点关键点
数据集
性能指标
MSCOCO_VAL2017mAP@OKS0.5=0.623


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

调用过程
flowchart.png
相关代码
以下为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

1. 初始化
  1. public void create() {
  2.     mModelPath = installRockxData(mContext);
  3.     mRockXPoseBodyModule = native_create_rockx_module(mModelPath, ROCKX_MODULE_POSE_BODY);
  4. }
复制代码
程序通过调用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指针。
2. 设置回调
初始化后,进行人体骨骼关键点检测前,程序通过RockX.setPoseResultCallback()设置检测结果回调。RockX.setPoseResultCallBack()会调用native函数RockX.native_set_callback()将回调实例传入jni层。RockX.native_set_callback()的实现如下:
  1. extern "C"
  2. JNIEXPORT void Java_com_rockchip_gpadc_demo_rockx_RockX_native_1set_1callback
  3.     (JNIEnv *env, jobject obj, jobject resultCallback) {
  4.     env->GetJavaVM(&g_vm);
  5.     g_result_callback_obj = env->NewGlobalRef(resultCallback);

  6.     get_global_class_loader(env);
  7. }
复制代码
回调实例被保存在g_result_callback_obj全局变量中,在callback_f()函数中被使用。
3. 检测人体骨骼关键点
进行人体骨骼关键点检测程序调用的是RockX.getBodyKeyPoints()方法,此方法只是调用native函数RockX.native_pose_body()。native_pose_body()部分实现如下:
  1. extern "C"
  2. JNIEXPORT jint JNICALL Java_com_rockchip_gpadc_demo_rockx_RockX_native_1pose_1body
  3.     (JNIEnv *env, jobject obj, jlong handle, jbyteArray inData, jint inWidth, jint inHeight, jint inPixelFmt) {

  4.     jboolean inputCopy = JNI_FALSE;
  5.     jbyte* in_data = env->GetByteArrayElements(inData, &inputCopy);

  6.     // init rockx_image_t
  7.     ... //省略部分代码

  8.     // body pose
  9.     LOGI("before rockx_pose_body");
  10.     rockx_ret_t ret = rockx_pose_body((rockx_handle_t)handle, &input_image, nullptr, callback_f);
  11.     ... //省略部分代码

  12.     return 0;
  13. }
复制代码
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层会在预览中画出关键点和连接相关的点。

代码测试
测试1.png





回复

使用道具 举报

21

积分

0

威望

0

贡献

技术小白

积分
21
发表于 2019-12-19 11:44:06     
本帖最后由 yuanwanghi 于 2019-12-19 17:04 编辑

樓主你好,

Rock-X下载地址:https://pan.baidu.com/s/1brKNqxBYDmElm-A56DLu4Q 提取码:ji14  
目前失效了,我改到這邊下載 http://t.rock-chips.com/forum.php?mod=viewthread&tid=504
那我將該專案運行在 AIO-3399 Pro JD4時,會發生馬上就消失的狀況
截了部分log 如下:
2019-12-19 16:47:56.432 18621-18677/com.rockchip.gpadc.rockx.pose_demo E/RKNNAPI: rknn_init,  msg_load_ack fail, ack = 1, expect 0!
2019-12-19 16:47:56.433 18621-18677/com.rockchip.gpadc.rockx.pose_demo E/rockx: rknn_init fail! ret=-6
2019-12-19 16:47:56.433 18621-18677/com.rockchip.gpadc.rockx.pose_demo E/rockx: init module(6) error -1
2019-12-19 16:47:56.434 18621-18677/com.rockchip.gpadc.rockx.pose_demo I/rknn4j: before rockx_pose_body
2019-12-19 16:47:56.448 18621-18677/com.rockchip.gpadc.rockx.pose_demo A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 18677 (Thread-2), pid 18621 (rockx.pose_demo)

想請問是不是那裏有問題,謝謝
回复

使用道具 举报

572

积分

1

威望

0

贡献

社区版主

Rank: 7Rank: 7Rank: 7

积分
572
发表于 2019-12-20 15:53:42     
yuanwanghi 发表于 2019-12-19 11:44
樓主你好,

Rock-X下载地址:https://pan.baidu.com/s/1brKNqxBYDmElm-A56DLu4Q 提取码:ji14  

链接没有失效的。

在adb shell中执行lsusb看看npu设备存不存在?试试最新的固件看看?
回复

使用道具 举报

21

积分

0

威望

0

贡献

技术小白

积分
21
发表于 2019-12-25 16:01:01     
謝謝樓主

原來是我這邊無法下載,已經已經將固件重刷也升級了RKNN,目前測試成功了
如果有其他使用者要測試這個的話,記得更新一下NDK的路徑,應該就能順利發佈了。

謝謝
回复

使用道具 举报

7

积分

0

威望

0

贡献

技术小白

积分
7
发表于 2021-1-5 15:26:23     
https://pan.baidu.com/s/1brKNqxBYDmElm-A56DLu4Q
此链接分享内容可能因为涉及侵权、色情、反动、低俗等信息,无法访问!
回复

使用道具 举报

11

积分

0

威望

0

贡献

技术小白

积分
11
发表于 2021-1-19 11:19:09     
谢谢分享
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表