树莓派部署YOLOv8手势检测实战:USB IMX378摄像头 + Python + PyTorch + ONNX Runtime + Systemd开机自动运行
本文面向树莓派AI视觉、Python人工智能、YOLOv8目标检测初学者,以树莓派部署手势检测项目为案例,完整介绍从USB IMX378摄像头安装、Miniconda环境配置、Python虚拟环境创建、YOLOv8依赖安装,到手势检测程序Systemd开机自动运行的完整流程。在Raspberry Pi 5 / ARM64(aarch64)环境下建立独立的yolov8-env环境,安装PyTorch、Ultralytics、ONNX Runtime、NumPy等AI视觉组件,最后通过Linux systemd使fatigueDetect.py开机自动运行,实现无需手工登录的AI视觉自动检测,为后续手势识别、人体检测、疲劳驾驶检测、工业视觉检测与边缘AI视觉系统打下基础。
一、项目介绍
近年来,树莓派已经不仅仅是一块学习 Linux 和 Python 的开发板。
结合:
- USB 摄像头
- Python
- YOLO
- PyTorch
- ONNX Runtime
- OpenCV
- Linux Systemd
就可以搭建一个小型的边缘 AI 视觉检测终端。
本文以树莓派部署手势检测为例,实现下面的系统结构:
USB IMX378摄像头
│
▼
Linux /dev/video
│
▼
Python视觉程序
│
▼
YOLOv8
│
▼
手势目标检测
│
▼
fatigueDetect.py
│
▼
Systemd服务
│
▼
开机自动运行
最终目标不是每次开机之后手动执行:
python fatigueDetect.py
而是:
树莓派开机
↓
Linux启动
↓
Systemd启动服务
↓
Python虚拟环境
↓
fatigueDetect.py
↓
AI视觉检测自动运行
这也是树莓派从"开发测试程序"走向"实际部署设备"的重要一步。
二、本文使用的树莓派系统环境
本次环境为 Raspberry Pi ARM64 系统。
系统信息:
Linux rpi5-251213-0003 6.12.47+rpt-rpi-2712 #1
SMP PREEMPT Debian 1:6.12.47-1+rpt1 (2025-09-16)
aarch64 GNU/Linux
其中最重要的是:
aarch64
说明当前系统是 ARM64 架构。
因此后面安装 Python、Miniconda 以及 AI 相关依赖时,需要考虑:
树莓派 ARM64
而不是直接按照普通 Windows x86 或 Intel Linux 环境处理。
三、第一步:安装 USB IMX378 摄像头
手势检测首先需要图像输入。
本文使用:
USB IMX378摄像头
树莓派通过 USB 接口连接摄像头。
连接之后,需要先确认 Linux 系统是否能够识别摄像头。
整个过程:
USB摄像头
↓
树莓派USB接口
↓
Linux USB设备
↓
/dev/video*
↓
Python / OpenCV / AI视觉程序
四、安装 FSWebcam
首先安装:
sudo apt install fswebcam
fswebcam 可以用于快速验证 USB 摄像头是否能够正常工作。
对于 AI 视觉项目来说,这一步非常重要。
因为:如果摄像头基础采集都没有成功,后面的 YOLO 程序自然无法正常工作。
所以建议将整个项目拆成几个阶段:
第一阶段:摄像头能不能工作?
第二阶段:Python环境能不能工作?
第三阶段:YOLO模型能不能运行?
第四阶段:程序能不能自动启动?
不要一开始就直接运行完整 AI 程序。
五、添加用户到 video 用户组
执行:
sudo usermod -a -G video rpi5
然后查看当前用户组:
groups
这里的作用是让用户具备访问视频设备相关资源的权限。
Linux 下 USB 摄像头通常会对应:
/dev/video0
/dev/video1
...
因此用户需要具备相应的视频设备访问权限。
如果修改用户组之后权限没有立即生效,可以重新登录系统。
六、查看 USB 摄像头
首先查看 USB 设备:
lsusb
然后查看视频设备:
ls /dev/video*
如果系统正常识别摄像头,通常可以看到类似:
/dev/video0
这说明 Linux 已经创建视频设备节点。
整个判断过程非常简单:
lsusb
↓
有没有USB摄像头?
ls /dev/video*
↓
有没有/dev/video0?
fswebcam image.jpg
↓
能不能正常拍照?
七、使用 fswebcam 拍照测试
执行:
fswebcam image.jpg
如果正常,就会生成:
image.jpg
此时可以将图片打开查看。
如果能够看到摄像头拍摄的画面,说明:
USB连接正常
+
Linux识别正常
+
视频设备正常
+
摄像头采集正常
这样就可以进入下一阶段。
八、为什么一定要先测试摄像头?
AI 视觉开发中非常容易出现一个误区:程序运行不了,就认为是 YOLO 模型有问题。
实际上可能只是:
摄像头没有识别
或者:
/dev/video0不存在
甚至可能只是:
用户没有视频设备权限
因此建议养成一个习惯:
硬件测试
↓
操作系统设备测试
↓
Python采集测试
↓
AI模型测试
↓
完整程序测试
这套排查方法同样适用于工业相机、USB 相机和边缘视觉设备。
九、第二步:安装 Miniconda
摄像头测试完成之后,开始配置 Python AI 开发环境。
本文使用 Miniconda。
Miniconda 最大的作用是方便管理多个 Python 环境。
例如:
系统Python
│
├── yolov8-env
│
├── mqtt-env
│
└── other-env
不同项目可以使用不同 Python 版本和依赖,这样可以减少不同 AI 项目之间的依赖冲突。
十、下载 ARM64 版本 Miniconda
本文树莓派是:
aarch64
因此使用 Linux ARM64 版本 Miniconda。
下载:
wget https://repo.anaconda.com/anaconda/Miniconda3-py312_25.11.1-1-Linux-aarch64.sh
然后执行安装:
bash Miniconda3-py312_25.11.1-1-Linux-aarch64.sh
安装完成以后,可以检查 Conda 是否正常。
十一、为什么树莓派要特别注意 ARM64?
普通电脑可能是:
x86_64
而树莓派 5 运行的是:
aarch64
两者 CPU 架构不同。
因此:
Windows x64
Linux x86_64
ARM64
不能完全按照相同方式处理。
在树莓派部署 AI 模型的时候,经常需要关注:
Python版本
CPU架构
PyTorch版本
ONNX Runtime版本
NumPy版本
Ultralytics版本
因此:边缘 AI 部署的第一步不是安装 YOLO,而是确认硬件架构和操作系统环境。
十二、Conda 配置软件源
安装完成后,可以配置 Conda 源:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
继续:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
然后:
conda config --set show_channel_urls yes
这样可以让 Conda 显示实际使用的软件源。
对于国内网络环境,配置镜像源通常能够改善 Python 环境安装体验。
十三、第三步:创建 YOLOv8 虚拟环境
接下来创建专门用于 YOLO 的 Python 环境:
conda create -n yolov8-env python=3.10
创建完成后激活:
conda activate yolov8-env
此时命令行环境就进入:
yolov8-env
建议以后运行 YOLO 程序之前都确认一下:
(yolov8-env)
是否存在。
十四、为什么要单独创建虚拟环境?
假设系统里面有:
Python 3.11
而 YOLO 项目使用:
Python 3.10
如果所有项目都安装到系统 Python 中,就容易出现:
numpy版本冲突
torch版本冲突
opencv版本冲突
onnxruntime版本冲突
使用 Conda 之后:
系统环境
│
├── yolov8-env
│
└── 其他Python环境
项目之间相对独立,这对于 AI 视觉项目尤其重要。
十五、查看当前 Python 环境
进入环境后:
conda list
可以查看当前环境已经安装的 Python 软件包。
建议在项目开始时记录:
Python版本
NumPy版本
PyTorch版本
Ultralytics版本
ONNX Runtime版本
OpenCV版本
后续如果程序出现问题,排查会方便很多。
十六、配置 pip 国内镜像源
接下来配置 pip:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/
然后使用 pip 安装 Python 依赖。
这样以后执行:
pip install xxx
就会使用配置的软件源。
十七、安装 NumPy
执行:
pip install numpy
NumPy 是 Python AI 视觉开发中非常重要的基础库。
它主要用于:
数组
矩阵
图像数据
模型输入
模型输出
数值计算
例如摄像头采集到的图像最终就可以转换成 NumPy 数组进行处理。
十八、安装 ONNX Runtime
继续:
pip install onnxruntime
ONNX Runtime 主要用于运行 ONNX 模型。
整个模型部署关系可以理解成:
YOLO训练模型
↓
ONNX
↓
ONNX Runtime
↓
树莓派CPU
因此 ONNX Runtime 非常适合用于模型部署阶段。
十九、安装 PyTorch
如果还需要直接运行 PyTorch 模型,可以安装:
pip install torch torchvision torchaudio
这里需要注意:ARM64 平台的 PyTorch 安装对版本和系统环境比较敏感。
本文提供的是实际部署流程中的安装命令,具体能够安装到哪个版本,应以当前树莓派系统、Python 版本以及对应 ARM64 软件包实际可用情况为准。
二十、安装 Ultralytics
继续:
pip install ultralytics
Ultralytics 提供 YOLO 模型训练和推理接口。
安装完成后,Python 程序就可以使用:
from ultralytics import YOLO
加载 YOLO 模型。
因此整个 Python AI 环境基本形成:
Python 3.10
│
├── NumPy
├── ONNX Runtime
├── PyTorch
├── TorchVision
├── TorchAudio
└── Ultralytics
二十一、树莓派上的 YOLO 部署架构
到这里可以把整个软件结构画成:
┌───────────────────────────────┐
│ Raspberry Pi 5 │
│ │
│ Debian ARM64 / aarch64 │
│ │ │
│ Miniconda │
│ │ │
│ yolov8-env │
│ │ │
│ ┌─────────┼──────────┐ │
│ │ │ │ │
│ NumPy PyTorch ONNX RT │
│ │ │ │ │
│ └─────────┼──────────┘ │
│ │ │
│ YOLOv8 │
│ │ │
│ 手势检测程序 │
└────────────┬──────────────────┘
│
▼
USB IMX378 Camera
这就是一个典型的:树莓派边缘 AI 视觉系统。
二十二、第四步:运行手势检测程序
本文最终运行程序:
fatigueDetect.py
虽然当前文件名为:
fatigueDetect.py
但实际项目可以根据模型任务修改成:
gestureDetect.py
或者:
yoloDetect.py
关键并不在文件名称,而在于:Python 程序负责调用摄像头和 AI 模型完成实时检测。
完整运行逻辑可以理解为:
摄像头
↓
读取图像
↓
图像预处理
↓
YOLO模型
↓
AI推理
↓
手势检测结果
↓
后续业务处理
二十三、为什么还需要 Systemd?
开发阶段,我们可以手动执行:
python fatigueDetect.py
但是如果真正部署到设备上,就会遇到一个问题:树莓派重启之后,谁来运行 Python 程序?
如果每次都需要:
SSH登录
↓
进入目录
↓
conda activate
↓
python fatigueDetect.py
那么这个设备还不能算真正的自动化部署。
因此我们使用 Linux Systemd,让程序变成一个系统服务。
二十四、创建 FatigueDelect.service
创建:
sudo nano /lib/systemd/system/FatigueDelect.service
写入:
[Unit]
Description=FatigueDetect Comm Server
After=network.target
Requires=network-online.target
[Service]
WorkingDirectory=/home/rpi5/FatigueDetection/
ExecStart=/bin/bash -c "source /home/rpi5/miniconda3/etc/profile.d/conda.sh && conda activate yolov8-env && python /home/rpi5/FatigueDetection/fatigueDetect.py"
Restart=always
User=root
Group=root
StandardOutput=journal+console
StandardError=journal+console
[Install]
WantedBy=multi-user.target
这里是整个自动运行功能的核心。
二十五、WorkingDirectory
配置:
WorkingDirectory=/home/rpi5/FatigueDetection/
表示程序工作目录:
/home/rpi5/FatigueDetection/
因此程序运行时涉及的相对路径会以这个目录作为工作路径。
例如模型:
model.onnx
或者:
weights/best.pt
如果程序使用相对路径,就需要特别注意当前工作目录。
二十六、ExecStart 是最关键的一行
配置:
ExecStart=/bin/bash -c "source /home/rpi5/miniconda3/etc/profile.d/conda.sh && conda activate yolov8-env && python /home/rpi5/FatigueDetection/fatigueDetect.py"
这一行实际上完成了三个动作。
第一步,加载 Conda:
source /home/rpi5/miniconda3/etc/profile.d/conda.sh
第二步,激活 YOLO 环境:
conda activate yolov8-env
第三步,运行 Python 程序:
python /home/rpi5/FatigueDetection/fatigueDetect.py
也就是说:
Systemd
↓
Bash
↓
Conda
↓
yolov8-env
↓
Python
↓
fatigueDetect.py
这样 Systemd 就可以运行指定的 Conda Python 环境。
二十七、为什么不能简单写 python?
例如直接:
ExecStart=python fatigueDetect.py
可能调用的是系统 Python。
但是我们真正需要的是:
/home/rpi5/miniconda3/
↓
yolov8-env
↓
Python 3.10
↓
YOLO依赖
因此本文采用:
source conda.sh
conda activate yolov8-env
python fatigueDetect.py
确保程序使用正确的虚拟环境。
二十八、Restart=always
配置:
Restart=always
它的作用是:如果程序异常退出,Systemd 会自动尝试重新启动。
对于长期运行的边缘 AI 视觉设备非常有意义。
例如:
AI程序
↓
运行
↓
异常退出
↓
Systemd检测
↓
重新启动
↓
AI程序恢复
这样可以减少设备无人值守时需要人工干预的情况。
二十九、日志输出
配置:
StandardOutput=journal+console
StandardError=journal+console
表示程序输出可以进入 Systemd 日志。
因此后续可以使用:
journalctl
查看运行日志。
对于 AI 视觉项目非常重要,因为真正部署之后最怕的就是:
程序停止了
但是不知道为什么停止
Systemd 日志可以帮助定位问题。
三十、重新加载 Systemd
修改服务文件以后:
sudo systemctl daemon-reload
这是让 Systemd 重新读取服务配置。
然后:
sudo systemctl enable FatigueDelect
设置开机自动启动。
三十一、启动 AI 视觉服务
执行:
sudo systemctl start FatigueDelect
这时候:
FatigueDelect.service
↓
conda
↓
yolov8-env
↓
fatigueDetect.py
↓
AI视觉检测
开始运行。
三十二、检查服务状态
部署完成以后,建议检查:
sudo systemctl status FatigueDelect
如果服务正常,可以看到:
active (running)
这时候说明 Python AI 程序已经由 Linux Systemd 接管。
三十三、查看 AI 程序运行日志
可以使用:
journalctl -u FatigueDelect
实时查看:
journalctl -u FatigueDelect -f
这样可以观察:
Python启动
模型加载
摄像头初始化
AI推理
异常信息
对于树莓派 AI 项目调试非常实用。
三十四、完整部署流程
现在整个项目已经可以总结成一条完整流程:
USB IMX378
↓
安装fswebcam
↓
测试摄像头
↓
lsusb /dev/video*
↓
Miniconda
↓
创建yolov8-env
↓
Python 3.10
↓
NumPy / ONNX Runtime
↓
PyTorch / Ultralytics
↓
YOLO手势检测程序
↓
fatigueDetect.py
↓
Systemd Service
↓
开机自动运行
三十五、从"程序"升级到"产品"
这一步非常关键。
很多 AI 项目做到:
python xxx.py
就结束了。
但是工业现场、边缘设备和实际项目往往需要:
设备上电
↓
系统启动
↓
服务启动
↓
摄像头初始化
↓
模型加载
↓
AI检测
用户不需要:
SSH
终端
Python命令
Conda命令
这才更加接近真正的 AI 设备。
因此:Systemd 并不是简单的"自动启动命令",而是把 Python AI 程序转换成 Linux 系统服务的一种部署方式。
三十六、后续可以继续升级什么?
本文完成的是基础的:
树莓派 + USB摄像头 + YOLOv8 + Systemd自动运行
在此基础上还可以继续扩展。
1. 手势识别
例如:
OK
点赞
握拳
手掌
数字1
数字2
数字3
2. 人体检测
摄像头
↓
YOLO
↓
人体检测
↓
人数统计
3. 疲劳驾驶检测
进一步结合:
闭眼
打哈欠
低头
疲劳
实现驾驶员状态分析。
4. 工业视觉
将 USB 摄像头换成工业相机,可以继续开发:
产品缺陷检测
零件检测
尺寸检测
装配检测
目标定位
5. MQTT 联网
树莓派可以将 AI 结果通过 MQTT 发送到服务器:
树莓派
↓
YOLO
↓
检测结果
↓
MQTT
↓
EMQX
↓
MES / AI平台
这就可以进一步形成:
边缘AI + MQTT + MES + 云平台
架构。
三十七、常见问题排查思路
摄像头不存在
首先:
lsusb
然后:
ls /dev/video*
如果没有视频设备,就不要急着检查 YOLO。
先解决:
USB
摄像头
驱动
权限
Conda 环境没有激活
检查:
conda env list
然后:
conda activate yolov8-env
再:
python --version
确认 Python 版本。
YOLO 程序手动运行正常,Systemd 运行失败
这是部署过程中非常常见的问题。
重点检查:
WorkingDirectory
ExecStart
Conda路径
模型路径
摄像头权限
Python路径
尤其注意:
手动运行环境
和:
Systemd运行环境
并不完全相同。
三十八、总结
本文从一个最基础的问题开始:如何让树莓派上的 USB 摄像头配合 YOLO 模型实现手势检测,并在设备启动后自动运行?
最终建立了完整的边缘 AI 部署流程:
USB IMX378摄像头
↓
fswebcam测试
↓
Linux视频设备
↓
Miniconda
↓
Python 3.10
↓
yolov8-env
↓
PyTorch
↓
Ultralytics
↓
ONNX Runtime
↓
YOLO AI检测
↓
fatigueDetect.py
↓
Systemd
↓
开机自动运行
对于刚开始学习树莓派 AI 视觉 + YOLOv8 的开发者来说,建议不要一开始就研究复杂的模型优化。
先完成:
摄像头能采集 → Python环境能运行 → YOLO能推理 → 程序能自动启动
这四个阶段。
当这套流程跑通以后,再进一步研究:
YOLO模型优化
ONNX部署
OpenCV加速
多线程
摄像头FPS优化
模型量化
NPU/GPU加速
MQTT数据上传
MES集成
边缘AI设备管理
最终就可以从一个简单的树莓派 AI 实验,逐步发展成真正可以部署到现场的边缘 AI 视觉终端。
推荐阅读
更多工业 AI、智能制造与技术实践文章
SOEM-EtherCAT 源代码解析(一):数据类型定义
逐段拆解开源 EtherCAT 主站库 SOEM 的核心头文件 ec_type.h:从基础数据类型、错误码、帧长与超时宏,到以太网头、数据包头结构体,再到状态/命令/数据类型枚举、SII 从站信息接口、邮箱协议与寄存器定义,一文打透 EtherCAT 主站的类型地基。
绿色设计:可持续发展的“始发站”——从施耐德电气“可持续灯塔工厂”看制造业减碳路径
世界经济论坛公布新一批灯塔工厂名单,施耐德电气北京园区凭端到端减碳成果获评“可持续灯塔工厂”。本文深入解读绿色设计为何是减碳的“始发站”:从源头锁定 80% 的环境影响,以干燥空气替代六氟化硫削减 41% 范围三排放,并结合“四维协同”实施框架,为制造企业提供可落地的绿色转型路径。
无人机AI识虫:用“空中巡检 + GIS地图 + AI识别”解决大规模种植虫害问题
大规模种植基地人工巡田难以做到及时、全面、持续覆盖,虫害早期漏检极易扩散成灾。本文系统讲解“无人机空中巡检 + GIS地图 + AI识别”的完整方案:先普查再精查的两级巡检、边缘AI + 农场服务器架构、虫害热力图与风险预测、GIS精准作业区域生成、植保无人机执行闭环,并给出 ZeroOne 棱壹智慧农业的产品定位。
树莓派推送RTSP视频流实战:FFmpeg + rtsp-simple-server(MediaMTX)搭建局域网视频直播服务
本文面向树莓派视频流、Python视觉开发、RTSP视频监控和边缘AI视觉初学者,介绍如何在Raspberry Pi上搭建简单、稳定的RTSP视频流服务。项目采用FFmpeg + rtsp-simple-server(MediaMTX)方式,将树莓派摄像头采集的视频转换并推送到RTSP服务器,再由电脑、NVR、VLC、OpenCV或AI视觉程序访问。文章从安装FFmpeg并验证版本开始,下载适用于ARM64架构的MediaMTX v1.8.1,配置Linux Systemd服务实现RTSP服务器开机自启,最后将摄像头视频推送到RTSP地址,形成树莓派摄像头 → FFmpeg → RTSP服务器 → 客户端播放/AI检测的完整视频流架构。
Linux系统篇(十二)——进程(二):深入剖析 Linux 进程:状态变迁、优先级及调度切换逻辑
深入 Linux 进程内核:六种进程状态与变迁、僵尸孤儿进程、优先级机制,以及 O(1) 调度器的位图与队列原理
C#调用Intel NPU实现YOLOv26极速推理:OpenVINO工业视觉加速实践
通过C# + OpenVINO Runtime调用Intel Core Ultra NPU运行YOLOv26模型,实现低功耗、毫秒级的工业边缘AI视觉推理,涵盖模型导出、环境配置、推理代码与FP16/INT8/异步推理等性能优化实践。
