Toybrick

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

 

troy

版主

积分
2352
楼主
发表于 2019-6-12 16:33:24    查看: 131951|回复: 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
回复

使用道具 举报

troy

版主

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

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

使用道具 举报

troy

版主

积分
2352
板凳
 楼主| 发表于 2019-6-25 10:19:57 | 显示全部楼层
嘻嘻哈哈 发表于 2019-6-25 10:04
我没有编译,直接拿sdk来用,出现这样的错误

自带的demo编译运行正常吗,你出错是在QT下要用的时候出错吗?
回复

使用道具 举报

troy

版主

积分
2352
地板
 楼主| 发表于 2019-7-1 15:23:28 | 显示全部楼层
vmnabix 发表于 2019-7-1 10:58
从摄像头采集数据为yuv420, 是不是需要通过 rockx_image_convert 转换为 rgb , 才能调用rockx_face_detec ...

rockx需要的是rgb的数据,因此YUV的数据要使用RGA库进行数据格式转换,转换成RGB888再送给rockx。RGA的使用参考wiki文档,http://t.rock-chips.com/wiki.php?mod=view&id=57#h1_2
回复

使用道具 举报

troy

版主

积分
2352
5#
 楼主| 发表于 2019-7-18 10:03:56 | 显示全部楼层
gufaning 发表于 2019-7-18 09:13
rockx_face_landmark函数的参数rockx_image_t有什么格式要求,我用opencv的mat 转成uchar* 结果返回ROCKX_R ...

Mat frame;
rockx_image_t input_image;

input_image.pixel_format = ROCKX_PIXEL_FORMAT_BGR888;
input_image.width = frame.cols;
input_image.height = frame.rows;
input_image.data = frame.data;

使用上面的步骤就可以实现cv::Mat到rockx_image_t 的转换,注意,使用该方式就不需要调用rockx_image_release释放内存,因为它使用的直接就是cv::Mat的数据内存,不是自己开辟的,所以无法释放。
回复

使用道具 举报

troy

版主

积分
2352
6#
 楼主| 发表于 2019-7-18 10:05:48 | 显示全部楼层
Ping. 发表于 2019-7-11 19:47
请问用Android Studio编译并成功安装好示例程序后,几个Demo运行时均会闪退并报如下错误,是什么原因导致的 ...

这个日志上看,是驱动版本不匹配导致的,你是运行在什么平台,运行在3399Pro吗?
回复

使用道具 举报

troy

版主

积分
2352
7#
 楼主| 发表于 2019-7-24 10:09:29 | 显示全部楼层

链接正常啊
回复

使用道具 举报

troy

版主

积分
2352
8#
 楼主| 发表于 2019-8-13 17:13:47 | 显示全部楼层
gufaning 发表于 2019-8-13 16:01
rockx_face_landmark输入图像的宽和高必须一样,否则就返回ROCKX_RET_PARAM_ERR

rockx_face_landmark的输入图像是正方形的人脸图像。正常都是从face_detect那边获取到的。
回复

使用道具 举报

troy

版主

积分
2352
9#
 楼主| 发表于 2019-8-15 10:50:18 | 显示全部楼层
zhanghq 发表于 2019-8-15 10:45
车牌检测效率有点低啊,竟然需要700ms,完全无法拿来商用,有解吗?图像的输入大小有要求吗?我们输入的是7 ...

RockX只是我们用来演示效果的Demo,不是用于商用。我们只是提供NPU平台和算力,具体的模型优化都需要自己完成。
回复

使用道具 举报

troy

版主

积分
2352
10#
 楼主| 发表于 2019-8-16 10:37:48 | 显示全部楼层
zhanghq 发表于 2019-8-15 17:55
你们上面写的效率可是没有这么低啊。。。难道是逗我们玩的?

你是怎么测出700ms的,不可能那么低
回复

使用道具 举报

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

本版积分规则

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


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