Toybrick

Rock-X AI组件库1.2.0 SDK发布(C&&Python)

 

troy

版主

积分
2374
楼主
发表于 2019-6-12 16:33:24    查看: 180187|回复: 151 | [复制链接]    打印 | 只看该作者
SDK地址
链接:
百度云:https://eyun.baidu.com/s/3o9xqPPC
Onedrive:https://rockchips-my.sharepoint. ... vqQbWAHmzA?e=Wc4V4X
V1.2.0
======
1. Support RK1806
2. Support 1.3.0 NPU driver
3. Add english developer guide documents

RockX 1.1.0 SDK
Change Log:


    1. Add Python SDK

    2. Support config target device on rockx_create via rockx_config_t

    3. Use RGA to preprocess input image on RK3399Pro/RK1808

    4. Change rockx_carplate_align function define

    5. Use rockx-data to replace model library

    6. Fix some memory leak issue

RK3399Prod:
  1. Debian:
  2. sudo apt-get update && sudo apt upgrade
  3. sudo apt-get install -y rockx-rk3399pro
  4. pip3 install --user rockx -i http://repo.rock-chips.com/pypi/simple  --trusted-host=repo.rock-chips.com

  5. Fedora:
  6. sudo dnf update && sudo dnf upgrade
  7. sudo dnf install -y rockx-rk3399pro
  8. pip3 install --user rockx -i http://repo.rock-chips.com/pypi/simple  --trusted-host=repo.rock-chips.com
复制代码


RK1808 Compute Stick:
  1. Fedora:
  2. sudo dnf update && sudo dnf upgrade
  3. mkdir /home/toybrick/tmp
  4. export TMPDIR=/home/toybrick/tmp
  5. sudo dnf install -y python3-opencv
  6. sudo dnf install -y rockx-rk1808
  7. pip3 install --user rockx -i http://repo.rock-chips.com/pypi/simple --trusted-host=repo.rock-chips.com
复制代码

PC (Windows/Linux/MacOS)
  1. pip3 install --user rockx -i http://repo.rock-chips.com/pypi/simple  --trusted-host=repo.rock-chips.com
复制代码

RockX python  Support List:
  • PC (windows/Linux/MacOS) + RK1808 Compute Stick
  • RK3399Prod
  • RK1808 Compute Stick
  • RK3399Prod + RK1808 Compute Stick

Driver Vesion:
  1. D RKNNAPI: ==============================================
  2. D RKNNAPI: RKNN VERSION:
  3. D RKNNAPI:   API: 1.2.0 (db63ace build: 2019-09-17 14:23:41)
  4. D RKNNAPI:   DRV: 0.9.9 (8509ec7 build: 2019-08-05 10:54:34)
  5. D RKNNAPI: ==============================================
复制代码

Test Demo:
  1. C demo with image:
  2. cp -r /usr/share/rknn/rockx_object_detection_demo/ ~
  3. cd ~/rockx_object_detection_demo
  4. mkdir build && cd build
  5. cmake ..
  6. make -j6
  7. ./rockx_object_detection ../test.jpg

  8. Python demo with image:
  9. cp -r /usr/share/rknn/rockx_py ~
  10. cd ~/rockx_py
  11. python3 rockx_object_detection.py -i object_detection_test.jpg

  12. Python demo with usb camera:
  13. python3 -m rockx.test.camera.rockx_object_detection
复制代码


============================================================================================================

SDK V1.0.0地址

链接:https://eyun.baidu.com/s/3o9xqPPC

1     主要功能说明
Rock-X SDK是基于RK3399Pro和RK1808的一组快捷AI组件库,初始版本包括:人脸检测、人脸识别、人脸属性分析、人脸特征点、人头检测、人体骨骼关键点、手指关键点、人车物检测等功能,开发者仅需要几条API调用即可在嵌入式产品中离线地使用这些功能,而无需关心AI模型的部署细节,极大加速了产品的原型验证和开发部署。Rock-X组件库根据用户的需求仍会不断扩充,并将支持基于计算棒的调用。
当前SDK提供的功能如表1-1所示。
表1-1 Rock-X SDK主要功能
  
类别
  
功能
目标检测
人头检测、人车物检测
人脸
人脸关键点、人脸属性分析、人脸识别
车牌
车牌检测、车牌识别
人体关键点
人体骨骼关键点、手指关键点
2     系统依赖说明2.1  RK3399Pro系统依赖
在RK3399Pro平台上,SDK所提供的库和应用程序需要RKNN驱动版本为0.9.6。在RK3399Pro Android/Linux平台上运行Demo应用以后,通过日志能够看到如下的驱动信息,请确保DRV版本为0.9.6。

  1. ==============================================
  2. RKNNVERSION:
  3.    API: 0.9.5 (a949908 build: 2019-05-0722:20:52)
  4.    DRV: 0.9.6 (c12de8a build: 2019-05-0620:10:17)
  5. ==============================================
复制代码


3     示例应用
Rock-XSDK中附带的示例应用能够帮助开发者评估SDK的基本功能和理解SDK接口,开发者可以直接基于示例应用进行修改或参考开发。示例应用代码包括命令行执行程序示例和Android程序示例。
3.1 命令行执行程序示例
Rock-X SDK提供了所有接口的命令行执行程序代码示例,示例程序支持在RK3399Pro Android/Linux平台,编译和运行方法请参见“demo/command_line_demo”目录下的README文件。
3.2 Android程序示例
Android示例程序支持在RK3399Pro Android平台上运行。所有的Android示例程序代码位于“demo/rk3399pro_android_demo”目录下。将对应的Android示例程序解压,再通过Android Studio打开后,可以直接进行编译、运行和开发。
4     性能指标4.1 模块精度指标4.1.1   目标检测
表4-1 检测类性能表
  
模块
  
数据集
性能指标
人头检测
Brainwash
mAP@IOU0.5 =  0.704
车牌检测
CCPD
mAP@IOU0.5 =  0.983
人车物检测
MSCOCO_VAL2017
mAP@IOU0.5 = 0.565
注:
2)       Brainwash是用于人头检测的公开数据集,主要场景为咖啡店,共5007张。
3)       CCPD(Chinese City ParkingDataset)是国内车牌数据集,从中随机抽取10000张进行测试。
4)       MSCOCO_VAL2017是目标检测公开数据集,使用该数据集中的5000张验证集测试,共91类别。
5)       人头检测模块的最小检测尺寸为图像分辨率的1/19。
6)       车牌检测模块支持检测国内蓝色、黄色和绿色车牌。
4.1.2   人脸检测
表4-2 人脸检测性能
  
参数
  
性能指标
适应角度
平面内人脸左右旋转±45°
  
侧脸左右偏转±60°
  
侧脸上偏转60°
  
侧脸下偏转45°
最大距离
11(测试摄像头FOV=60°)
mAP
mAP@IOU0.5=0.857
注:
1)       图像质量较差时,支持的检测角度会减小。
2)       最大检测距离与摄像头FOV等参数有关。
3)       检测的最小人脸尺寸为图像分辨率的1/19。
4.1.3   人脸识别
表4-3 人脸识别性能
  
参数
  
性能指标
识别角度
平面内人脸左右旋转±45°
  
侧脸左右偏转±60°
  
侧脸上偏转60°
  
侧脸下偏转45°
识别距离
11(测试摄像头FOV=60°)
识别精度(LFW标准数据集)
99.65%±0.00088
参考精度
TPR=0.992@FAR=0
  
TPR=0.995@FAR=0.001
注:
1)       实际应用中,对距离和角度稍加限制,能获得更好的识别结果,用户可根据实际情况进行质量筛选。
4.1.4   车牌识别
表4-4 车牌识别性能表
  
数据集
  
性能指标
CCPD
83.31%(8331/10000)
注:
1)       CCPD(Chinese City ParkingDataset)是国内车牌数据集,从中随机抽取10000张进行测试。
2)       支持识别国内蓝色、绿色和黄色车牌。
3)       可识别的车牌字符如表4-5所示。
表4-5 车牌识别字符表
  
字符类别
  
可识别字符
省份中文字符
数字和字母
0 1 2 3 4 5 6 7 8 9 A B C D E F G H J K L M N P  Q R S T U V W X Y Z
车牌用途中文字符
使 广
4.1.5   人脸属性分析
表4-6 性别年龄性能
  
数据集
  
年龄精度
性别精度
UTK_asian
4.823283
92.96%(2220/2388)
注:
1)       UTK_asian是UTK公开数据集的亚洲人部分,使用7-70岁数据进行测试,共2388张。
2)       年龄精度为平均年龄偏差。
4.1.6   人脸特征点定位
表4-7 人脸特征点定位(68点)性能
  
数据集
  
误差
300w_cropped
6.01%
注:
1)       误差计算公式如下
                              
  表是第j个检测点与标注点之间的欧式距离。
d表示左外眼角和右外眼角的欧式距离。
4.1.7   人体骨骼点关键点
表4-8 人体骨骼关键点定位性能
  
数据集
  
性能指标
MSCOCO_VAL2017
mAP@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多张有关键点。
4.2 模块运行性能
各模块运行时间和所需内存如表4-9所示。
表4-9 模块运行时间和消耗内存
  
模块
  
运行时间(ms)
消耗NPU内存(MB)
人车物检测
49
66
人头检测
38
43
人脸检测
41
24
人脸特征点定位(68点)
11
34
人脸姿态
2
21
人脸矫正对齐
9
20
人脸识别特征提取
44
117
人脸属性分析
16
19
车牌检测
46
39
车牌矫正对齐
21
22
车牌识别
39
21
身体骨骼关键点
106
119
手指关键点(21点)
153
89
手指关键点(3点)
23
21
检测目标跟踪
1
18
注:
1)       图中所测的内存值为峰值内存。
5     SDK使用说明5.1 SDK库引入
各平台的Rock-X SDK库位于sdk目录下,如下所示:


  1. sdk/
  2. ├── rockx-rk3399pro-Android
  3. └── rockx-rk3399pro-Linux
复制代码

开发者只需要在自己工程的CMakeLists.txt中引入对应平台的库即可,下面以RK3399Pro Android平台为例:

  1. #Find RockX Package
  2. set(RockX_DIR <path-to-rockx-sdk>/sdk/rockx-rk3399pro-Android)
  3. find_package(RockX REQUIRED)
  4. #Include RockX Header
  5. include_directories(${RockX_INCLUDE_DIRS})
  6. #Link RockX Libraries
  7. target_link_libraries(target_name ${RockX_LIBS})
复制代码


5.2 SDK裁减说明
SDK提供的库文件并不需要完全导入,开发者可以根据自己所用到的模块来引入所需的库,这样可以减少应用的体积。表5-1列出了SDK库文件说明,除了librockx.so和librknn_api.so两个库文件,对于没有使用的模块,可以直接移除相应的库文件。
表5-1 SDK库文件说明
  
库文件名
  
对应模块
可裁剪
libcarplate_align.so
ROCKX_MODULE_CARPLATE_ALIGN
libcarplate_detection.so
ROCKX_MODULE_CARPLATE_DETECTION
libcarplate_recognition.so
ROCKX_MODULE_CARPLATE_RECOG
libface_attribute.so
ROCKX_MODULE_FACE_ANALYZE
libface_detection.so
ROCKX_MODULE_FACE_DETECTION
libface_landmark5.so
ROCKX_MODULE_FACE_LANDMARK_5
libface_landmarks68.so
ROCKX_MODULE_FACE_LANDMARK_68
libface_recognition.so
ROCKX_MODULE_FACE_RECOGNIZE
libhead_detection.so
ROCKX_MODULE_HEAD_DETECTION
libobject_detection.so
ROCKX_MODULE_OBJECT_DETECTION
libpose_body.so
ROCKX_MODULE_POSE_BODY
libpose_finger.so
ROCKX_MODULE_POSE_FINGER_3
libpose_hand.so
ROCKX_MODULE_POSE_FINGER_21
librockx.so
SDK基础库
librknn_api.so
SDK依赖库
5.3 初始化和释放
Rock-X各个模块都通过rockx_create函数进行初始化,通过传入不同的rockx_module_t枚举值来初始化不同的模块,示例代码如下所示:

  1. rockx_ret_tret;
  2. rockx_handle_tface_det_handle;
  3. ret= rockx_create(&face_det_handle,
  4.                    ROCKX_MODULE_FACE_DETECTION,
  5.                     nullptr, 0);
  6. if(ret != ROCKX_RET_SUCCESS) {
  7.     printf("init rockx module error%d\n", ret);
  8. }
复制代码


创建完成之后将得到一个rockx_handle_t类型的句柄,后面可以使用该句柄来调用相应的接口函数。
如果不再需要使用该模块,可以通过调用rockx_destroy函数来释放掉该句柄,示例代码如下所示:

  1. rockx_destroy(face_det_handle);
复制代码


5.4 接口调用
Rock-X SDK所包含模块的接口函数如表5-2所示。

表5-2 RockX各模块接口函数
  
类别
  
函数名
函数功能
目标检测
rockx_object_detect
人车物检测
rockx_head_detect
人头检测
人脸
rockx_face_detect
人脸检测
rockx_face_landmark
人脸特征点定位
rockx_face_pose
人脸姿态
rockx_face_align
人脸矫正对齐
rockx_face_recognize
人脸识别特征提取
rockx_face_feature_similarity
人脸特征对比
rockx_face_attribute
人脸属性分析
车牌
rockx_carplate_detect
车牌检测
rockx_carplate_recognize
车牌识别
rockx_carplate_align
车牌矫正对齐
人体关键点
rockx_pose_body
身体骨骼关键点定位
rockx_pose_finger
手指关键点定位
其他
rockx_object_track
检测目标跟踪
模块接口函数示例代码如下:

  1. rockx_object_array_tface_array;
  2. memset(&face_array,0, sizeof(rockx_object_array_t));
  3. rockx_ret_tret = rockx_face_detect(face_det_handle, &input_image,
  4.                                       &face_array, nullptr);
  5. if(ret != ROCKX_RET_SUCCESS) {
  6.     printf("rockx_face_detect error %d\n",ret);
  7.     return -1;
  8. }
复制代码


5.5 API参考指南详细的接口描述请参考API文档(doc\rockx_api_doc\html\index.html)

对Rock-X或相关算法有定制化需求请联系toybrick@rock-chips.com

















本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

yaowei

中级会员

积分
375
沙发
发表于 2019-6-12 16:34:34 | 只看该作者
第一时间支持
回复

使用道具 举报

lappaport

中级会员

积分
290
板凳
发表于 2019-6-12 21:58:51 | 只看该作者
下载试了下,非常好。
请问有没有可以调整THRESHOLD的参数或者配置的地方。
回复

使用道具 举报

AI_liu

注册会员

积分
138
地板
发表于 2019-6-14 10:15:38 | 只看该作者
本帖最后由 AI_liu 于 2019-6-24 15:37 编辑

我在测试的时候,发现rockx_face_recognition_demo里面/*************** FACE Landmark ***************/
rockx_image_t out_img;
out_img.width = 112;
out_img.height = 112;
out_img.pixel_format = ROCKX_PIXEL_FORMAT_RGB888;
out_img.data = (uint8_t*)malloc(112*112*3*sizeof(char));
rockx_face_feature_t outfeature;
rockx_face_landmark_t in_landmark;
for (int i = 0; i < face_array.count; i++) {
    rockx_face_align(face_5landmarks_handle, in_image, &face_array.object.box, nullptr, &out_img);
    /*************** FACE Recognize ***************/
    rockx_face_recognize(face_recognize_handle, &out_img, &outfeature);
    out_feature->push_back(outfeature);
}
rockx_face_align是不是会有内存泄露,或者我使用的有问题。发现把这里都屏蔽掉,就不会内存增长了。
回复

使用道具 举报

嘻嘻哈哈

注册会员

积分
87
5#
发表于 2019-6-24 17:05:49 | 只看该作者
linux调用相关库的时候出现,库找不到或者路径不存在的情况,但是核对路径什么的没有问题,
回复

使用道具 举报

troy

版主

积分
2374
6#
 楼主| 发表于 2019-6-25 08:48:31 | 只看该作者
嘻嘻哈哈 发表于 2019-6-24 17:05
linux调用相关库的时候出现,库找不到或者路径不存在的情况,但是核对路径什么的没有问题, ...

你说的调用是编译时链接不到库,还是运行的时候找不到库?
回复

使用道具 举报

yhc

注册会员

积分
177
7#
发表于 2019-6-25 09:01:22 | 只看该作者
AI_liu 发表于 2019-6-14 10:15
我在测试的时候,发现rockx_face_recognition_demo里面/*************** FACE Landmark ***************/
r ...

可以改成这样,内部会自己对out_img分配内存,外面不需要malloc了

  1.    
  2. /*************** FACE Landmark ***************/
  3.     rockx_image_t out_img;
  4.     for (int i = 0; i < face_array.count; i++) {
  5.         rockx_face_align(face_5landmarks_handle, in_image, &face_array.object[i].box, nullptr, &out_img);
  6.     }

  7.     /*************** FACE Recognize ***************/
  8.     rockx_face_recognize(face_recognize_handle, &out_img, out_feature);

  9.     rockx_image_release(out_img);
复制代码
回复

使用道具 举报

嘻嘻哈哈

注册会员

积分
87
8#
发表于 2019-6-25 09:19:41 | 只看该作者
troy 发表于 2019-6-25 08:48
你说的调用是编译时链接不到库,还是运行的时候找不到库?

编译的时候,编译不通过。这些库需要重新编译吗
回复

使用道具 举报

yhc

注册会员

积分
177
9#
发表于 2019-6-25 09:25:10 | 只看该作者
嘻嘻哈哈 发表于 2019-6-25 09:19
编译的时候,编译不通过。这些库需要重新编译吗

请问你是在toybrick板子上编译吗,请确定链接的库是否是ARM aarch64 的,可以用file librockx.so命令查看
回复

使用道具 举报

嘻嘻哈哈

注册会员

积分
87
10#
发表于 2019-6-25 10:00:49 | 只看该作者
yhc 发表于 2019-6-25 09:25
请问你是在toybrick板子上编译吗,请确定链接的库是否是ARM aarch64 的,可以用file librockx.so命令查看 ...

库和系统应该是匹配的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

产品中心 购买渠道 开源社区 Wiki教程 资料下载 关于Toybrick


快速回复 返回顶部 返回列表