树莓派上跑YOLO系列模型并部署
树莓派4B yolo部署教程
今天我们将会以树莓派为例,完成一个yolo模型的构建,并且在树莓派上构建一个图形化的系统,利用树莓派完成图片的检测和视频的检测。
首先,我们还是需要看一下你会做成一个什么样子的内容,如下图所示,首先第一张图是我们的硬件图,我们有一个树莓派的板子,并且这个板子上面添加了一个树莓派的(Camera Serial Interface)摄像头。树莓派的hdmi接口插在一个显示器上,这里有我们制作的图形化的系统,在这个系统中,你可以使用树莓派去做YOLO模型的加载、利用模型进行图像的预测或者是利用模型去做视频的预测。

前期准备
树莓派(Raspberry Pi)是一款由英国树莓派基金会开发的低成本、信用卡大小的单板计算机,旨在促进计算机科学教育。它具备基本的计算功能,可用于编程、电子项目、媒体中心等多种用途。
树莓派的基础使用常识
对于更多的树莓派的基础知识,大家可以查看树莓派的官方文档。
这里是官方文档的地址:入门 | Raspberry Pi 树莓派
在树莓派上运行YOLO模型
我们今天的目的主要是希望在一个新的树莓派板子上成功运行yolo模型。那首先你要有一个板子,以我自己为例,我将我提前准备好的内容的列表放在下面。
树莓派主板(具体型号: 树莓派4B 8GB)
- List item支持HDMI协议的显示器
- 64GB的TF卡和读卡器
- 散热片 micro HDMI线 网线(也可以直接通过WIFI进行联网)
- typec开关的电源
- 亚克力的外壳
- 500w像素的广角摄像头
邮件配置(可选)
因为我们的系统有一个发送邮件的功能,发送邮件是通过邮箱的smtp服务来支持的,所以需要提前配置一下你邮箱的smtp服务,我这里以qq邮箱为例进行演示。
首先登录你的qq邮箱,找到对应的设置部分。
找到下方的服务部分,如果没开启的需要你开启这个服务,然后完成后面的手机验证部分。

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
class EmailSender:
def __init__(self, smtp_server, smtp_port, sender_email, sender_password):
"""
初始化邮件发送器
:param smtp_server: SMTP服务器地址
:param smtp_port: SMTP服务器端口
:param sender_email: 发送方邮箱地址
:param sender_password: 发送方邮箱密码或授权码
"""
self.smtp_server = smtp_server
self.smtp_port = smtp_port
self.sender_email = sender_email
self.sender_password = sender_password
def send_text_email(self, receiver_email, subject, content):
"""
发送纯文本邮件
"""
try:
# 创建邮件对象
message = MIMEText(content, 'plain', 'utf-8')
message['From'] = Header(self.sender_email)
message['To'] = Header(receiver_email)
message['Subject'] = Header(subject, 'utf-8')
# 连接SMTP服务器并发送
with smtplib.SMTP_SSL(self.smtp_server, self.smtp_port) as server:
server.login(self.sender_email, self.sender_password)
server.send_message(message)
print(f"邮件发送成功!收件人:{receiver_email}")
return True
except Exception as e:
print(f"邮件发送失败:{str(e)}")
return False
def send_html_email(self, receiver_email, subject, html_content):
"""
发送HTML格式邮件
"""
try:
message = MIMEText(html_content, 'html', 'utf-8')
message['From'] = Header(self.sender_email)
message['To'] = Header(receiver_email)
message['Subject'] = Header(subject, 'utf-8')
with smtplib.SMTP_SSL(self.smtp_server, self.smtp_port) as server:
server.login(self.sender_email, self.sender_password)
server.send_message(message)
print(f"HTML邮件发送成功!收件人:{receiver_email}")
return True
except Exception as e:
print(f"邮件发送失败:{str(e)}")
return False
# 使用示例
if __name__ == "__main__":
# 配置信息(以QQ邮箱为例)
smtp_server = "smtp.qq.com"
smtp_port = 465
sender_email = "your_email@qq.com"
sender_password = "your_authorization_code" # QQ邮箱使用授权码
# 创建邮件发送器
email_sender = EmailSender(smtp_server, smtp_port, sender_email, sender_password)
# 发送普通文本邮件
email_sender.send_text_email(
receiver_email="receiver@example.com",
subject="测试邮件",
content="这是一封测试邮件的内容"
)
# 发送HTML邮件
html_content = """
<html>
<body>
<h2>HTML邮件测试</h2>
<p>这是一封<strong>HTML格式</strong>的邮件</p>
<ul>
<li>列表项1</li>
<li>列表项2</li>
</ul>
</body>
</html>
"""
email_sender.send_html_email(
receiver_email="receiver@example.com",
subject="HTML测试邮件",
html_content=html_content
)
烧录系统
接下来就是拿着我们的内存卡来进行系统镜像的烧录了。(注意:系统镜像的烧录指的是把你的内存卡通过读卡器插在你自己的windows电脑上进行操作。)
镜像的烧录我们直接使用官方的烧录软件进行即可,这个软件的下载地址是:https://www.raspberrypi.com/software/
历史镜像的下载地址:https://downloads.raspberrypi.com/raspios_arm64/images/
为了保险起见,防止后面的好朋友看的时候时间已经过去很长时间,为了保证你可以按照教程复现出来,这里我使用的是这个版本。
https://downloads.raspberrypi.com/raspios_arm64/images/raspios_arm64-2024-11-19/2024-11-19-raspios-bookworm-arm64.img.xz
软件安装启动之后长这个样子,第一个按钮是用来选择树莓派板子的型号的,第二个是选择操作系统的, 第三个则是用来选择你要进行烧录的内存卡的,这个内存卡后面将会类似于硬盘一样插在你的树莓派的板子上面。
需要注意的是!!!你的操作系统这里的选择,如果你想要避免一些不必要的麻烦,请你务必和我的版本选择一致,这样就可以减少后面版本不一致导致的各种库的安装问题。我们在这里选择的是64位的系统,64位系统占用的资源会更多,响应的能力也会更强,32位的系统虽然占用的资源少,但是遇到的麻烦会更多,尤其是在找对应的库的时候要踩的坑超级多,本次我们就来使用这个官方的树莓派64位系统!

选第二个




打开树莓派
一、打开 VNC 服务
首先使用显示器键盘或者远程 putty 登录后打开树莓派命令行终端,输入以下命
令打开树莓派设置:
sudo raspi-config
弹出的界面选择第 5 Interfacing Options

二、安装 VNC Viewer
到 VNC 官网上下载 VNC Viewer 软件
https://www.realvnc.com/en/connect/download/viewer/
或者直接解压附件里已经下载好的软件


三、VNC 远程登录
打开软件界面



同样的打开SSH连接
下面我们需要对软件进行一次更新,首先为了确保大家和我这里的树莓派系统一致,我将我的系统版本信息的截图放在下面。
源的切换我们这里参考树莓派实验室:Raspberry Pi OS 中国软件源 | 树莓派实验室
备份原始文件(可选步骤)
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo cp /etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/raspi.list.bak
修改树莓派时间
一、在树莓派上,打date命令可以看到系统的日期时间:
date

二、如果显示时间比当前时间慢了8小时,那就要设置一下时区
sudo dpkg-reconfigure tzdata
选择Asia
选择Shanghai

三、树莓派没有电池,断电后无法保存时间。树莓派默认安装了NTP(Network Time Protocol)服务来获取互联网上ntp服务器提供的时间。如果这个时间不准,可以用这个命令校准一下。
sudo ntpd -s –d
四、如果还是不准,就用这个命令强制设置
sudo date --s="2018-10-19 14:54:00"
编辑软件源配置
1、编辑 /etc/apt/sources.list 文件(软件源),参考如下命令:
sudo chmod 777 /etc/apt/sources.list
sudo nano /etc/apt/sources.list
2、删除原文件所有内容,bookworm 系统用以下内容取代:
deb https://mirrors.tuna.tsinghua.edu.cn/debian bookworm main contrib non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian bookworm-updates main contrib non-free-firmware
Ctrl+o 保存,之后回车确认,然后 Ctrl+x 退出。
编辑系统源配置
1、编辑 /etc/apt/sources.list.d/raspi.list 文件(系统更新源),参考如下命令:
sudo chmod 777 /etc/apt/sources.list.d/raspi.list
sudo nano /etc/apt/sources.list.d/raspi.list
2、同样修改首行网址,修改后文件如下:
deb https://mirrors.tuna.tsinghua.edu.cn/raspberrypi bookworm main
bookworm、bullseye、buster、stretch、jessie、wheezy 版本的系统按照之前修改软件源的的规则修改即可,这里不再赘述。
Ctrl+o 保存,之后回车确认,然后 Ctrl+x 退出。
配置好了可以尝试更新,用下面的命令分别更新软件源列表、软件版本和系统内核版本,完整的更新过程需要等挺久的。一般只用更新软件源列表即可。
如果更新过程总提示出现了下面的进程锁定的错误,可以按照下面的截图杀死对应的进程重新进行更新。
#更新软件源列表
sudo apt-get update
#更新软件版本
sudo apt-get upgrade
sudo apt-get dist-upgrade
下面是安装完毕之后的截图。
然后pip设置一下清华的镜像,方便后面安装python的库使用。
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
树莓派摄像头测试
第一种 rpicam
在我们的这个版本中,我们需要通过libcam-hello来对我们的摄像头进行测试,首先安装对应的软件,请执行下面的指令。
sudo apt install -y libcamera-dev libepoxy-dev libjpeg-dev libtiff5-dev libpng-dev libopencv-dev
sudo apt install libcamera-apps
sudo apt install libcamera-tools
执行完成之后,可以对摄像头进行一个简单的测试。(注意:由于需要显示图像,这里的测试请通过vnc连接树莓派的方式来进行完成)
rpicam-jpeg是一个简单的静态图像捕捉应用程序。要捕获全分辨率 JPEG 图像,请使用以下指令,这将显示大约五秒钟的预览,然后将全分辨率 JPEG 图像捕获到文件中test.jpg。
rpicam-jpeg -o test.jpg # 如果你是可视化屏幕则执行这个
rpicam-jpeg -o test.jpg -n

USB摄像头
测试树莓派的USB摄像头主要分三步:连接硬件 → 安装工具 → 执行测试。目前主流的USB摄像头基本都是“免驱”的(支持UVC协议),插上就能用。
下面是一份可以直接上手的完整测试流程。
🚀 第一步:连接并检查设备
连接摄像头:将USB摄像头插入树莓派的任意USB接口。
检测设备:打开终端,输入以下命令查看系统是否识别到了新设备:
lsusb
如果看到类似 Logitech, Inc. Webcam C310 或 HD Web Camera 这样的信息,就说明硬件已被成功识别。
查找设备节点:再输入下面这个命令,确认摄像头的设备文件名称(通常是 /dev/video0):
ls -l /dev/video*
📸 第二步:安装并拍照测试
最快捷的测试方法是使用轻量级工具 fswebcam。
安装 fswebcam:
sudo apt update
sudo apt install fswebcam -y
拍一张照片试试:
输入下面这个命令,它会拍一张照片并保存为 test.jpg:
fswebcam -r 1280x720 --no-banner test.jpg
-r 1280x720 是设置分辨率。
–no-banner 用于去掉图片下方的信息横幅,让画面更干净。
查看照片:
你可以通过桌面环境直接打开 test.jpg 文件,或者在终端下使用 ls -l test.jpg 确认文件已生成。
进阶调试:如果遇到问题,可以用 v4l2-ctl --list-formats-ext 命令查看摄像头所有支持的视频格式和分辨率,这能帮助你排除参数设置不匹配的问题。
🎥 第三步:进阶测试(实时视频与编程)
如果拍照正常,可以试试实时视频或编程调用,这能让你的项目更酷。
方法一:用 OpenCV 查看实时视频流
OpenCV 是强大的视觉库,适合做后续的图像处理。
安装 OpenCV:
sudo apt install python3-opencv -y
运行测试脚本:
创建一个Python文件(比如 test_video.py),写入以下代码并运行,就可以看到摄像头实时画面了:
import cv2
# 0 通常代表第一个USB摄像头
cap = cv2.VideoCapture(0)
if not cap.isOpened():
print("无法打开摄像头")
exit()
while True:
# 逐帧读取
ret, frame = cap.read()
if not ret:
break
# 在窗口中显示画面
cv2.imshow('Raspberry Pi USB Camera', frame)
# 按 'q' 键退出
if cv2.waitKey(1) == ord('q'):
break
# 释放资源
cap.release()
cv2.destroyAllWindows()

在树莓派上使用YOLO
首先需要将我们需要使用到的源码和轮子文件上传到树莓派上,我们这里使用winscp来进行上传,首先我们需要先建立一个文件夹。
安装python的库之前需要先解决一个bug,“externally-managed-environment”错误背后的原因:Manjaro、Ubuntu、Fedora 以及其他的最新发行版中,正在使用 Python 包来实现此增强功能。
这个更新是为了避免「操作系统包管理器 (如pacman、yum、apt) 和 pip 等特定于 Python 的包管理工具之间的冲突」。这些冲突包括 Python 级 API 不兼容和文件所有权冲突。
执行下列的指令即可, 如果你不喜欢这个方式,这里还有另外的可以参考的方式:深海游弋的鱼 – 默默的点滴
sudo mv /usr/lib/python3.11/EXTERNALLY-MANAGED /usr/lib/python3.11/EXTERNALLY-MANAGED.bak
然后将文件拖到这个文件夹即可,然后我们将已经编辑好的轮子文件进行安装即可,注意安装的时候你需要进入到对应的目录安装,安装执行下列指令,表示这个目录下的所有whl文件都安装,注意安装的时候需要按照主播这里提供的顺序安装,如果您不是按照顺序来安装的,会导致出现numpy的错误。
pip install cycler-0.12.1-py3-none-any.whl
pip install mpmath-1.3.0-py3-none-any.whl
pip install contourpy-1.3.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
pip install fonttools-4.59.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
pip install numpy-2.2.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
pip install matplotlib-3.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
pip install networkx-3.5-py3-none-any.whl
pip install PyYAML-6.0.2rc1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
pip install sympy-1.14.0-py3-none-any.whl
pip install scipy-1.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
pip install opencv_python-4.12.0.88-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
pip install torch-2.0.1-cp311-cp311-manylinux2014_aarch64.whl
pip install torchvision-0.15.2-cp311-cp311-manylinux2014_aarch64.whl
pip install torch-2.0.1-cp311-cp311-manylinux2014_aarch64.whl
pip install tqdm-4.59.0-py2.py3-none-any.whl
pip install shiboken6-6.6.3.1-cp38-abi3-manylinux_2_31_aarch64.whl
pip install PySide6_Addons-6.6.3.1-cp38-abi3-manylinux_2_31_aarch64.whl
pip install PySide6-6.6.3.1-cp38-abi3-manylinux_2_31_aarch64.whl
pip install numpy-1.23.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
如果您需要下载一些额外的库,可以去这个网站上寻找:https://pypi.tuna.tsinghua.edu.cn/simple/
torch安装完成之后,我们还需要安装一个摄像头拍摄的库,这个库为picamera2,注意这个库不能通过pip的方式来进行安装,需要通过apt install的方式来进行安装,如下所示,执行下列的命令,分别包含了qt的窗口界面以及picamera2这个库。
sudo apt-get update
sudo apt-get install libxcb-cursor0
sudo apt install -y python3-picamera2
sudo apt install -y python3-pyqt5 python3-opengl
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)