赞
踩
本文章是关于树莓派部署YOLOv5s模型,实际测试效果的FPS仅有0.15,不够满足实际检测需要,各位大佬可以参考参考。
1、在树莓派中安装opencv(默认安装好python3)
- # 直接安装
- # 安装依赖软件
- sudo apt-get install -y libopencv-dev python3-opencv
- sudo apt-get install libatlas-base-dev
- sudo apt-get install libjasper-dev
- sudo apt-get install libqtgui4
- sudo apt-get install python3-pyqt5
- sudo apt install libqt4-test
- # 安装Python 包
- pip3 install opencv-python
2、导出onnx模型
从YOLOv5官网下载源代码和YOLOv5s.pt文件
按照作者提示安装环境,使用它自带的export.py将YOLOv5s.pt转为YOLOv5s.onnx,安装好环境后,在终端输入以下命令即可自动生成。
python export.py --weights yolov5s.pt --include onnx
3.测试
可以先在电脑上测试一下,使用如下代码测试上述转换的模型能否使用,假如成功即可将下述代码和上述生成的YOLOv5s.onnx模型直接移动到树莓派中进行测试。
- # 图片检测
- import cv2
- import numpy as np
- import time
- def plot_one_box(x, img, color=None, label=None, line_thickness=None):
- """
- description: Plots one bounding box on image img,
- this function comes from YoLov5 project.
- param:
- x: a box likes [x1,y1,x2,y2]
- img: a opencv image object
- color: color to draw rectangle, such as (0,255,0)
- label: str
- line_thickness: int
- return:
- no return
- """
- tl = (
- line_thickness or round(0.002 * (img.shape[0] + img.shape[1]) / 2) + 1
- ) # line/font thickness
- color = color or [random.randint(0, 255) for _ in range(3)]
- c1, c2 = (int(x[0]), int(x[1])), (int(x[2]), int(x[3]))
- cv2.rectangle(img, c1, c2, color, thickness=tl, lineType=cv2.LINE_AA)
- if label:
- tf = max(tl - 1, 1) # font thickness
- t_size = cv2.getTextSize(label, 0, fontScale=tl / 3, thickness=tf)[0]
- c2 = c1[0] + t_size[0], c1[1] - t_size[1] - 3
- cv2.rectangle(img, c1, c2, color, -1, cv2.LINE_AA) # filled
- cv2.putText(
- img,
- label,
- (c1[0], c1[1] - 2),
- 0,
- tl / 3,
- [225, 255, 255],
- thickness=tf,
- lineType=cv2.LINE_AA,
- )
-
- def post_process_opencv(outputs,model_h,model_w,img_h,img_w,thred_nms,thred_cond):
-
- conf = outputs[:,4].tolist()
- c_x = outputs[:,0]/model_w*img_w
- c_y = outputs[:,1]/model_h*img_h
- w = outputs[:,2]/model_w*img_w
- h = outputs[:,3]/model_h*img_h
- p_cls = outputs[:,5:]
- if len(p_cls.shape)==1:
- p_cls = np.expand_dims(p_cls,1)
- cls_id = np.argmax(p_cls,axis=1)
-
- p_x1 = np.expand_dims(c_x-w/2,-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。