Toybrick

RK3588 PythonSDK + rknntoolkit-lite 推理的 SampleCode

jefferyzhang

版主

积分
13414
发表于 2023-2-8 15:30:52    查看: 6224|回复: 8 | [复制链接]    打印 | 显示全部楼层
本帖最后由 jefferyzhang 于 2023-2-9 09:03 编辑

Note:

1. 因为3588 PythonSDK是按最高性能设计,其中很多操作是0拷贝的实现,不像其他Python库返回都是多次拷贝,所以会产生很多逻辑陷阱。
2. 本示例从HDMI-IN获取数据,缩放后送入RKNNLite推理,并显示
3. 主要展示容易出问题的asarray()的用法,因为是0拷贝的实现,必须要保证源变量没有被析构,否则他所指向的内存就已经被释放了
4. 送入rknn前先缩放成模型输入尺寸避免性能消耗,这里由于rknnlite参数是numpy array类型,在rknn内部会有一次memcpy无法避免。


  1. from rknnlite.api import RKNNLite
  2. import toybrick as toy
  3. import numpy as np

  4. def init_rknn(model):
  5.     rknn_lite = RKNNLite()
  6.     ret = rknn_lite.load_rknn(model)
  7.     if ret != 0:
  8.         print('Load RKNN model failed')
  9.     exit(ret)

  10.     print('--> Init runtime environment')
  11.     ret = rknn_lite.init_runtime(core_mask=RKNNLite.NPU_CORE_0_1_2)
  12.     if ret != 0:
  13.         print('Init runtime environment failed')
  14.         exit(ret)
  15.     print('done')

  16.     return rknn_lite

  17. if __name__ == '__main__':
  18.     rknn = init_rknn('./model.rknn')

  19.     hdmi = toy.HdmiCapture()
  20.     disp = toy.Display('', 1920, 1080, False)
  21.     print("Connect display width = " + str(disp.width) + " ; height = " + str(disp.height))

  22.     while True:
  23.         ret, frame = hdmi.read(1920, 1080, toy.FMT_RGB888)
  24.         if frame is not None:
  25.             img = frame.resize(320, 320)  # 这里的img是一个dma buffer
  26.             npimg = img.asarray()  # 必须要单独再用一个变量,保证img变量引用计数不会为0,因为这里的asarray是0拷贝构造,如果img被析构,npimg指向的内存空间就是错的了
  27.             outputs = rknn.inference(inputs=[npimg])
  28.             print(outputs)
复制代码



回复

使用道具 举报

mike841211

注册会员

积分
69
发表于 2023-3-21 08:44:22 | 显示全部楼层
为什么toybrick 不搞个面向通用的一个包呢?只能在toybrick的板上用
回复

使用道具 举报

jefferyzhang

版主

积分
13414
 楼主| 发表于 2023-3-21 08:47:27 | 显示全部楼层
mike841211 发表于 2023-3-21 08:44
为什么toybrick 不搞个面向通用的一个包呢?只能在toybrick的板上用

对外发布的EdgeSDK里都包含该包,但我们是toybrick论坛,我们当然只维护toybrick板子,其他板子请联系板商支持。
回复

使用道具 举报

dff

新手上路

积分
24
发表于 2023-8-4 17:29:28 | 显示全部楼层
环境:
rknn_toolkit2 1.4.0
rknn_toolkit_lite2-1.4.0-cp39
rknn driver 0.8.2
根据官方链接:https://gitee.com/yanyitech/rknn ... xamples/onnx/yolov5,在PC上模型测试时转换、推理都正常。将转换出的未做量化的yolov5s.rknn上传到板子上,与pc端推理结果相比,利用rknn_toolkit_lite2推理的结果置信度普遍变高了,原本0.5、0.6、0.7的置信度变成了0.9以上,这种情况不正常吧? 可能是什么情况导致的?500张图片量化后的模型也有这个问题,麻烦帮忙解答一下。
回复

使用道具 举报

hiCrystal

中级会员

积分
250
发表于 2023-8-28 14:20:13 | 显示全部楼层
jefferyzhang 发表于 2023-3-21 08:47
对外发布的EdgeSDK里都包含该包,但我们是toybrick论坛,我们当然只维护toybrick板子,其他板子请联系板 ...

请问PythonSDK必须是板商在固件上支持吗?可以在刷好系统的板子自己安装PythonSDK吗?
回复

使用道具 举报

jefferyzhang

版主

积分
13414
 楼主| 发表于 2023-8-28 15:35:32 | 显示全部楼层
hiCrystal 发表于 2023-8-28 14:20
请问PythonSDK必须是板商在固件上支持吗?可以在刷好系统的板子自己安装PythonSDK吗? ...

PythonSDK是开放免费用的,
但我们只对toybrick板子和edge sdk编写和测试,其他板子我们没办法顾及,
如果你移过去能用那就可以,但环境不一致以及硬件不同等各种问题造成不能正常使用的话我们也没办法。
回复

使用道具 举报

hiCrystal

中级会员

积分
250
发表于 2023-8-29 11:19:50 | 显示全部楼层
jefferyzhang 发表于 2023-8-28 15:35
PythonSDK是开放免费用的,
但我们只对toybrick板子和edge sdk编写和测试,其他板子我们没办法顾及,
如 ...

请问PythonSDK的源代码开放吗?如果其他板子想要支持PythonSDK是不是只能在编译固件时就要操作?
回复

使用道具 举报

jefferyzhang

版主

积分
13414
 楼主| 发表于 2023-8-29 11:26:52 | 显示全部楼层
hiCrystal 发表于 2023-8-29 11:19
请问PythonSDK的源代码开放吗?如果其他板子想要支持PythonSDK是不是只能在编译固件时就要操作? ...

不开放
回复

使用道具 举报

hiCrystal

中级会员

积分
250
发表于 2023-8-30 09:50:15 | 显示全部楼层

目前的系统不支持PythonSDK, 如果要使用必须要重新编译系统吗?
回复

使用道具 举报

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

本版积分规则

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


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