当前位置: 首页 > java >正文

树莓派采集、计算机推理:基于GStreamer的YOLOv5实现方案

〇、写在前面

树莓派因为生态完善、玩法丰富,一直是 DIY 和机器人爱好者的常用设备,可以说是 Linux 边缘设备的代表。不过,如果想让树莓派自己跑人工智能算法(比如 YOLOv5),就会发现一个明显问题:算力完全不够用,运行速度慢、延迟高,几乎无法满足实际需求。

这其实也是边缘人工智能(Edge AI)的典型问题——它的优势在于响应快、实时性强,但劣势也很明显:算力有限、硬件成本高、系统升级麻烦。如果我们换个思路:让树莓派只负责“看”(也就是实时视频采集和传输),而把“想”(复杂的模型推理)交给性能更强的电脑来完成,就能两全其美:既能用上树莓派的灵活性,又能发挥电脑的算力优势。

本文就带大家实现这样一个思路:
👉 树莓派通过 GStreamer 采集摄像头画面并推送视频流
👉 计算机端接收流并运行 YOLOv5 做目标检测
👉 最终效果是:树莓派负责实时采集,电脑负责高效推理,延迟大幅降低

为简化称呼,本教程将Windows 11个人计算机简称为PC,将树莓派4B+简称为Pi。

一、前置教程

在开始学习本教程之前,强烈建议阅读前置教程。在实现前置教程的学习成果之后,有利于理解本教程的主要操作与核心思想。

GStreamer无线图传:从树莓派到计算机的实现方案-CSDN博客文章浏览阅读701次,点赞14次,收藏25次。本教程介绍通过Wi-Fi实现树莓派(Pi)向计算机(PC)的无线图传方法。系统采用GStreamer框架,需在Pi(64bit无桌面版)和PC(Windows11)上分别安装配置GStreamer。关键步骤包括:检查摄像头参数(v4l2-ctl命令)、获取PC的IP地址、按顺序启动服务(先PC后Pi)。PC端使用udpsrc接收视频流,Pi端通过指定摄像头参数和PC地址推送视频。测试表明在640×480分辨率、30fps下,树莓派4B能实现低延迟稳定传输。该方案适用于需要实时无线视频传输的场景。 https://blog.csdn.net/weixin_43034503/article/details/150535232?fromshare=blogdetail&sharetype=blogdetail&sharerId=150535232&sharerefer=PC&sharesource=weixin_43034503&sharefrom=from_link

二、知识学习

关于GStreamer的基本应用,前置教程已做完整介绍,在此不再赘述。唯一需要关注的是,在使用GStreamer推流时,Pi向PC传输的数据流格式是TCP或UDP,但是,YOLOv5的推理指令不包括这两种格式的数据流。

以下展示了官方编写的YOLOv5目标检测指令集。

如上所示,与前置教程已实现的GStreamer推流最相关的数据格式是RTSP/RTMP/HTTP stream,本教程采用的是RTSP格式。

因此,Pi在推流之前,应当将TCP或UDP数据流转换为RTSP格式,再传输给PC,PC即可直接使用官方推理程序(detect.py)执行实时目标检测。

三、设置Pi

在前置教程中,Pi的设置并不包括将TCP或UDP转换为RTSP的操作。

1、在系统上安装gi和gst-rtsp-server

sudo apt install python3-gi gir1.2-gst-rtsp-server-1.0

2、编写test-launch.py

直接复制以下Python代码,将其保存为test-launch.py

#!/usr/bin/env python3
import gi, sys
gi.require_version('Gst', '1.0')
gi.require_version('GstRtspServer', '1.0')
from gi.repository import Gst, GstRtspServer, GLibGst.init(None)import argparse
parser = argparse.ArgumentParser(description='GStreamer RTSP server test-launch (Python)')
parser.add_argument('-p', '--port', default="8554", help='server port (default 8554)')
parser.add_argument('-m', '--mount', default="/test", help='mount point (default /test)')
parser.add_argument('pipeline', help='GStreamer pipeline to stream', nargs='+')
args = parser.parse_args()server = GstRtspServer.RTSPServer()
server.set_service(args.port)
mounts = server.get_mount_points()
factory = GstRtspServer.RTSPMediaFactory()
factory.set_launch(' '.join(args.pipeline))
factory.set_shared(True)
mounts.add_factory(args.mount, factory)
server.attach(None)print(f"Stream ready at rtsp://127.0.0.1:{args.port}{args.mount}")
loop = GLib.MainLoop()
loop.run()

3、添加可执行权限

为上述python程序添加可执行权限。

chmod +x test-launch.py

四、设置PC

1、安装YOLOv5

由于YOLOv5的安装并非本教程的重点,且在网上有许多相关资源,在此仅提供简要安装指南。若需要详细指引,请在评论区提出。

首先,安装git。

Git - Downloadshttps://git-scm.com/downloads然后,安装miniconda。

Miniconda - Anacondahttps://www.anaconda.com/docs/getting-started/miniconda/main其次,创建pytorch虚拟环境。运行miniconda,粘贴以下命令行。

conda create -n pytorch python=3.10

最后,安装YOLOv5。

git clone https://github.com/ultralytics/yolov5.git

五、正式工作

1、Pi推流

运行以下指令。

/usr/bin/python3 test-launch.py "( v4l2src device=/dev/video0 ! video/x-raw,width=640,height=480,framerate=30/1 ! videoconvert ! x264enc tune=zerolatency bitrate=1000 speed-preset=ultrafast bframes=0 ! rtph264pay name=pay0 pt=96 )"

运行成功后,Pi将打印以下信息。

Stream ready at rtsp://127.0.0.1:8554/test

2、PC推理

首先,进入pytorch虚拟环境。

conda activate pytorch

然后,进入yolov5文件夹。

cd yolov5

最后,从Pi读取RTSP数据流,开启正式推理。

# 注意,192.168.8.243需改成自己树莓派的IP地址python detect.py --weights yolov5s.pt --source "rtsp://192.168.8.243:8554/test?tcp" --img-size 640 --conf 0.25 --device 0 --view-img
http://www.xdnf.cn/news/18479.html

相关文章:

  • 隧道代理无需手动获取IP的核心机制与技术优势
  • 纯手撸一个RAG
  • SSM从入门到实战: 2.6 MyBatis缓存机制与性能优化
  • skywalking-agent与logback-spring.xml中的traceId自动关联的原理
  • 三,设计模式-抽象工厂模式
  • 深入解析TCP/UDP协议与网络编程
  • Leetcode—120. 三角形最小路径和【中等】(腾讯校招面试题)
  • SSM框架基础知识-Spring-Spring整合MyBatis
  • 基于SpringBoot+Vue框架的高校论坛系统 博客论坛系统 论坛小程序
  • 图神经网络分享系列-LINE(三)
  • Oracle SYS用户无法登录数据库-ORA-12162
  • Chrome和Edge如何开启暗黑模式
  • 本地部署DeepSeek实战
  • CS 创世 SD NAND 助力 T-BOX:破解智能汽车数字中枢的存储密码
  • 【UniApp打包鸿蒙APP全流程】如何配置并添加UniApp API所需的鸿蒙系统权限
  • 使用隧道(Tunnel)连接PostgreSQL数据库(解决防火墙问题)
  • 【Ansible】变量与敏感数据管理:Vault加密与Facts采集详解
  • 使用PPT进行科研绘图过程中常用的快捷键
  • Matplotlib 可视化大师系列(八):综合篇 - 在一张图中组合多种图表类型
  • Android 广告轮播全实现:图片与视频混合展示的完整方案
  • 基于ERNIE 4.5的多智能体协作的自动化视频舆情分析报告生成器
  • 图像处理中的伪影
  • git新建项目如何推送到远程仓库
  • C#_面向对象设计的艺术
  • Python 网络编程实战指南:从 TCP_UDP 到 Socket 编程
  • 基于LangChain + Milvus 实现RAG
  • Linux学习-网络编程2
  • Zynq开发实践(fpga高频使用的两个场景)
  • Elasticsearch Rails 实战全指南(elasticsearch-rails / elasticsearch-model)
  • VLLM部署gpt-oss-20b踩坑记录