树莓派部署YOLOv5实时检测

树莓派5 部署YOLOv5s

环境配置方式:🚀 整个过程采用远程的方式,记录树莓派部署YOLOv5s的过程。

准备:

  • 树莓派5-4B
  • 树莓派系统(安装的官方64位系统)
  • USB摄像头

一、 获取yolov5s.pt权值文件

使用的是轻量的yolov5s模型,在本地训练后,通过命令发送发到树莓派上:

  1. 首先查看树莓派地址:
    ifconfig  # 查看地址

在这里插入图片描述

连接的wify,可以看到所属的地址端口。
2. 将本地训练好的yolov5s.pt权值文件发送到树莓派上:

    scp yolov5s.pt <用户名>@<树莓派地址>:<保存文件地址>  

二、 树莓派环境搭建

本打算参考其他博主的方法,将pt权值文件转为ONNX再利用OpenVINO转为IR模型部署到树莓派上。

在本地成功得到IR模型后,树莓派配置OpenVINO环境加速推理时,遇到问题有点多😤,准备有空再进行尝试。

树莓派中运行yolov5s的环境使用Anaconda配置和管理,步骤如下:

  • 安装Anaconda
  • 创建虚拟环境
  • 下载yolov5源码
  • 安装依赖库
  1. 安装Anaconda🌱
    下载并安装Anaconda以管理Python环境,分别在终端执行:
wget https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh
bash Anaconda3-2021.05-Linux-x86_64.sh
  1. 创建虚拟环境并安装YOLOv5 🌱
    conda create -n yolov5 python=3.9 -y                # 创建名为yolov5的虚拟环境,并指定Python版本为3.9
    conda activate yolov5                               # 激活虚拟环境
    git clone https://github.com/ultralytics/yolov5.git # 克隆YOLOv5源码
    cd yolov5
    pip install -r requirements.txt                     # 安装YOLOv5所需的依赖库

三、 检测图片
  1. 运行程序🌱
    python detect.py \
    --weights yolov5s.pt \   # 没有准备可省略该行,自动下载官方权值文件
    --img 320 \              # 指定图片大小,压缩图片,加快检测速度,但是清晰度降低
    --source /image/1.jpg \  # 指定图片路径
    --device cpu \           # 使用cpu进行推理

使用的cpu进行推理,速度较慢,看资料显示树莓派也是有GPU的,但是因为树莓派GPU的算力太低,所以还是使用cpu进行推理,如果想使用GPU进行推理,需要安装CUDA,而且树莓派安装CUDA比较麻烦。

  1. 检测效果如下🌱:

在这里插入图片描述


四、 开启摄像头实时检测

检测视频流,遇到无法弹出实时检测界面,终端打印的实时监测结果看起来太空洞无趣😳,之后通过安装lightdm来解决的。

lightdm 能够提供图形界面服务,使 OpenCV cv2.imshow() 能通过 VNC 的虚拟显示端口渲染窗口。

  1. 安装lightdm🌱
    sudo apt install lightdm                # 安装图形界面管理器
    sudo dpkg-reconfigure lightdm          # 绑定显示服务到 VNC
    sudo systemctl restart lightdm          # 重启服务使配置生效
  1. 查看摄像头🌱
    使用v4l2-ctl指令查看所有视频设备
    v4l2-ctl --list-devices

在这里插入图片描述

可以看到识别到的USB摄像头/dev/video0/dev/video1,使用0作为source参数。

  1. 运行程序🌱
    python detect.py \
    --weights yolov5s.pt \
    --source 0 \             # 使用摄像头(0 表示第一个摄像头)
    --view-img \             # 启用实时画面显示--img-size 320
    --device cpu
  1. 检测效果如下🌱:

2

🍀最终,通过远程的方式,在树莓派上成功部署了yolov5s模型,实现了实时检测的功能。检测速度差不多8-9帧/s,后续会尝试加速推理。

<think>好的,我现在需要帮助用户解决在树莓派上运行Ubuntu系统,使用YOLOv8模型通过USB摄像头进行图像处理的Python代码示例。首先,我要理清楚用户的需求,可能需要分步骤来解答。 首先,用户使用的是树莓派,安装的是Ubuntu系统,而不是常见的Raspberry Pi OS。这可能意味着需要确认一些依赖库的安装方式是否与Debian系有所不同。然后,用户需要连接USB摄像头,进行图像处理,这里可能需要用到OpenCV来处理摄像头输入。 接下来是YOLOv8模型的使用。YOLOv8由Ultralytics开发,通常使用他们的PyTorch实现。但树莓派的计算资源有限,特别是如果用户用的是较旧的型号,可能需要考虑模型的大小和推理速度。可能需要建议用户使用较小的模型,比如YOLOv8n(nano版),以在树莓派上获得实时性能。 然后,我需要考虑代码的结构。可能需要安装必要的库,比如opencv-python、torch、以及ultralytics库。不过,在树莓派上安装PyTorch可能会有问题,特别是ARM架构的支持。可能需要用户安装PyTorch的ARM版本,或者通过pip安装预编译的包。 另外,USB摄像头的访问在Ubuntu上通常通过/dev/video0设备,使用OpenCV的VideoCapture应该可以处理。但需要确认用户是否正确安装了摄像头驱动,并且是否有权限访问设备。可能需要提醒用户检查/dev/video0是否存在,或者使用lsusb、v4l2-ctl等命令确认摄像头被识别。 接下来是代码示例。可能需要导入必要的库,初始化摄像头,加载YOLOv8模型,然后循环读取帧,进行推理,绘制结果,并显示输出。同时,考虑到树莓派的性能,可能需要调整帧的分辨率,或者使用多线程处理来优化性能。 另外,Ultralytics的YOLO模型可能需要下载预训练权重,用户可能需要提前下载好,或者在代码中自动下载。但树莓派下载大文件可能较慢,所以建议用户事先准备好模型文件。 可能还需要处理模型推理后的结果,比如提取检测框、标签、置信度,并用OpenCV绘制到图像上。同时,处理按键事件,比如按q退出循环。 最后,需要生成相关问题,比如性能优化方法,处理摄像头无法识别的情况,或者在没有GPU的情况下如何加速推理。可能还需要提醒用户安装依赖时的注意事项,比如安装libjpeg-dev或其他可能的依赖库。 现在,我需要验证这些步骤是否正确。比如,安装ultralytics库时,是否会自动安装合适的PyTorch版本?或者是否需要用户手动安装?树莓派Ubuntu的软件源是否包含这些包?可能需要用户使用pip3安装,并确保Python版本是3.6以上。 另外,使用USB摄像头时,OpenCV的VideoCapture(0)有时候可能无法打开,可能需要尝试不同的索引,或者使用gstreamer管道。可能需要用户测试不同的参数,或者安装v4l-utils来调整摄像头设置。 性能方面,如果推理速度太慢,可能需要建议用户使用更小的模型,或者启用FP16推理,或者使用OpenCV的dnn模块加载导出的ONNX模型,这可能比PyTorch更快。不过YOLOv8的导出功能可能需要用户先导出模型,这可能增加步骤的复杂性。 总结来说,代码示例需要包括安装步骤、导入库、摄像头初始化、模型加载、循环处理帧、显示结果。同时,可能需要注意树莓派特定的问题,比如依赖安装、硬件加速等。</think>在树莓派Ubuntu系统上使用YOLOv8进行USB摄像头图像处理的完整步骤如下: ### 1. 环境准备 安装必要依赖: ```bash sudo apt-get install libjpeg-dev libopenblas-dev libatlas-base-dev pip3 install torch torchvision --extra-index-url https://download.pytorch.org/whl/cpu pip3 install ultralytics opencv-python-headless ``` ### 2. Python代码实现 ```python from ultralytics import YOLO import cv2 # 初始化模型(自动下载yolov8n.pt) model = YOLO('yolov8n.pt') # USB摄像头初始化 cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480) while cap.isOpened(): ret, frame = cap.read() if not ret: break # YOLOv8推理 results = model(frame, imgsz=320, half=True) # 半精度加速 # 绘制检测结果 annotated_frame = results[0].plot() # 显示输出 cv2.imshow('YOLOv8 Detection', annotated_frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() ``` ### 3. 关键优化说明 1. 使用`yolov8n.pt`(nano版)减小计算量 2. `half=True`启用FP16半精度推理加速[^1] 3. 限制输入分辨率至320x320降低计算负载 4. OpenCV使用headless版本减少资源占用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值