rk3588 多线程异步提高RK3588的NPU占用率,yolov5s目标检测-python摄像头实时检测65fps,c++实时检测120fps

简单说点记录,python要在rk3588安装虚拟环境,
首先我们要知道rk3588环境配置:

Ubuntu 18.04 python3.6/7
Ubuntu 20.04 python3.8/9
Ubuntu 22.04 python3.10/11  

我的板子ubantu22.04 所以装python10,,tensorflow2.8.0要单独先下载,转出1.6.0的模型,转的时候要把代码改成rk3588平台,rk3588板子要升级1.6.0版本哦:

sudo cp /home/orangepi/xushuanglong/rknn-toolkit2-master2/rknpu2/runtime/Linux/librknn_api/aarch64/librknnrt.so /usr/lib/librknnrt.so
sudo cp /home/orangepi/xushuanglong/rknn-toolkit2-master2/rknpu2/runtime/Linux/librknn_api/aarch64/librknn_api.so /usr/lib/librknn_api.so

pc端  linux  rknn-toolkit2;   rk3588板子  aarch  rknn_toolkit_lite2

清华源:-i https://pypi.tuna.tsinghua.edu.cn/simple

yolov5 训练的时候选noautoanchor,改激活函数relu,不然一堆乱框。

####### export.py导出onnx时要改,训练不改

    def forward(self, x):

        z = []  # inference output

        for i in range(self.nl):

            x[i] = self.m[i](x[i])  # conv

        return x

pc上 rknn-toolkit2,onnx导出rknn,要改:

rknn.config(mean_values=[[0, 0, 0]], std_values=[[255, 255, 255]], target_platform='rk3588')

到此,rknn3588模型转换然后到python部署没啥问题了。

c++的话,代码里把CMakeLists.txt里的位置填对,bash编译就完事了。把什么1.6.0 的opencv库, 及librknnrt.so等,粘过来。

要提高摄像头实时fps的话,要写多线程异步提高RK3588的NPU占用率,还有提高NPU,CPU定频命令
查看npu使用率:sudo cat /sys/kernel/debug/rknpu/load

然后就是摄像头,要能支持高频的摄像头才行,比如120fps的摄像头,要把opencv默认的yuyv改为mjep

c++:

    // 设置摄像头捕获格式为 MJPG
    capture.set(cv::CAP_PROP_FOURCC, cv::VideoWriter::fourcc('M', 'J', 'P', 'G'));

    // 设置摄像头分辨率
    capture.set(cv::CAP_PROP_FRAME_WIDTH, 640);
    capture.set(cv::CAP_PROP_FRAME_HEIGHT, 480);

    // 设置摄像头帧率
    capture.set(cv::CAP_PROP_FPS, 120);
 

python:

# 定义摄像头捕获分辨率和帧率
WIDTH, HEIGHT, FPS = 1280, 720, 120

# 初始化摄像头
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*'MJPG'))
cap.set(cv2.CAP_PROP_FRAME_WIDTH, WIDTH)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, HEIGHT)
cap.set(cv2.CAP_PROP_FPS, FPS)
有问题可联系
最后放结果:
python:

python 摄像头实时检测rk3588 65fps

c++:

rk3588,c++摄像头实时检测120fps

python全部源码:

rk3588 多线程异步提高RK3588的NPU占用率,yolov5s-python摄像头实时65fps,c++实时120fps

c++全部代码:

在rk3588上使用多线程npu加速读码器120fps c++代码

### RK3588 平台上的网络摄像头推理配置 对于希望在RK3588平台上执行基于SSD-MobileNet的目标检测推理操作,特别是涉及网络摄像头的情况,有几个关键点需要注意。由于该平台通常运行Linux操作系统版本,在此环境中部署模型相对直接。 #### 1. 安装必要的依赖项和工具链 确保安装了所有必需的软件包以及针对RK3588优化过的TensorFlow版本或其他适合嵌入式的框架如TFLite[^1]。这可能涉及到下载预编译好的二进制文件或是从源码构建适用于ARM架构的版本。 #### 2. 设置环境变量 正如在Windows环境下一样,正确设置`PATH` 和 `PYTHONPATH` 对于成功加载库至关重要。这些路径应该指向所安装的TensorFlow及相关组件的位置。 #### 3. 准备数据流管道 为了能够实时处理来自USB摄像头的数据并将其输入到神经网络中进行预测,建议采用OpenCV作为图像采集手段,并通过Python接口实现视频帧读取与显示功能: ```python import cv2 from tflite_runtime.interpreter import Interpreter def load_model(model_path): interpreter = Interpreter(model_path=model_path) interpreter.allocate_tensors() return interpreter model = 'ssd_mobilenet_v2_quantized_300x300_coco.tflite' interpreter = load_model(model) cap = cv2.VideoCapture(0) # 打开默认摄像设备 while True: ret, frame = cap.read() # 获取当前画面的一帧 if not ret: break input_data = preprocess(frame) # 假设有一个函数用于调整尺寸和其他预处理工作 output_details = run_inference(interpreter, input_data) # 运行推断过程 visualize_results(frame, output_details) # 将结果叠加到原始画面上 cv2.imshow('Detection', frame) key = cv2.waitKey(1) if key & 0xFF == ord('q'): break # 按下'q'键退出循环 cap.release() cv2.destroyAllWindows() ``` 上述代码片段展示了如何利用轻量级解释器(例如`tflite_runtime`)来进行高效的边缘计算任务。注意这里假设存在一个名为`preprocess()` 的辅助函数负责准备送入模型前的数据格式转换;同样地,`run_inference()` 和 `visualize_results()` 则分别代表实际调用模型获取输出及后续可视化的过程。 #### 4. 调整模型以适应硬件特性 考虑到RK3588具备强大的GPU加速能力,应当尽可能利用这一点来提升性能表现。可以通过量化感知训练等方式减小模型大小的同时保持较高的精度水平,从而更好地匹配目标平台资源限制。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值