
树莓派5进车间这台小东西我前后折腾了快一个月。先说结论板子本身很强但真正让它稳定跑起来的全靠把细节抠到位。这篇文章不聊跑分不聊参数表就把我在车间里实际踩过的坑、验证过的方案、最终能稳定运行的配置全部摊开讲尤其是树莓派5上部署自己训练的yolov5模型和树莓派5安装ubuntu这两条主线想抄作业的直接照着做就行。1. 为什么把树莓派5搬进车间而不是用现成工控机车间里做视觉检测大多数人第一反应是用工控机加独立显卡或者直接买现成的工业视觉套件。但真到了产线旁你会发现很多场景根本不需要那么高的算力——比如仪表读数巡检、指示灯状态识别、传送带上的目标计数这些任务对实时性的要求远没有想象中那么夸张反而对成本、体积、功耗和部署灵活度更敏感。树莓派5进入这个场景核心优势有四个体积小一个巴掌大的板子找个铁盒就能装进去不需要专门的电气柜功耗低满载也就10W左右车间里拉一根普通电源线就能带不用担心散热和电费接口丰富CSI摄像头接口、PCIe、GPIO、USB 3.0全都有接传感器、接屏幕、接PLC都很方便软件生态成熟Raspberry Pi OS和Ubuntu都有官方支持Python环境、OpenCV、ONNX Runtime这些库安装简单不用像某些嵌入式平台那样交叉编译到怀疑人生。我当时的替代方案也对比过方案优点缺点工控机 GPU算力强可以跑大模型成本高、体积大、功耗高产线上部署麻烦现成工业视觉套件稳定可靠开箱即用价格动辄上万算法定制不灵活升级依赖厂商树莓派5 轻量模型成本低、体积小、完全自主可控算力有限不能跑太重模型环境适应需要自己调教我的选择逻辑很简单项目只需要单路摄像头、检测速度5~10 FPS就够模型本身就是自己训练的小目标检测模型树莓派5的性能完全够用。如果你需要跑大模型、高帧率的场景那别犹豫直接上工控机但如果就是看得清、认得准、跑得稳这种需求树莓派5能给你省下大几千块。还有个容易忽略的点车间环境通常比较恶劣用几万块的设备装在那里出了问题反而更心疼。树莓派5成本低坏了就换压力小很多。2. 树莓派5装Ubuntu Server的取舍与实操细节热词里树莓派5安装ubuntu这条我专门试过。树莓派5目前可以跑Raspberry Pi OSBookworm和Ubuntu Server 24.04我最终选了Ubuntu Server原因是我需要无头运行、SSH远程管理而且要跟现有的运维体系对齐。2.1 为什么选Ubuntu Server而不是桌面版很多人在树莓派上装了Ubuntu Desktop觉得有图形界面更方便。但车间部署不一样设备装好后基本不会有人去碰它桌面版反而带来几个麻烦桌面环境占用内存和CPU资源留给推理程序的有效算力变少无头运行不需要GUI出问题时图形界面还会增加排查复杂度Server版更新策略更稳不会因为桌面组件的安全补丁影响业务。当然如果你需要在树莓派上直接接显示器调试图像效果那桌面版更方便。我的建议是调试开发用桌面版正式部署用Server版两不冲突。2.2 烧录与初始化的完整步骤烧录工具我用的是 Raspberry Pi Imager 它内置了Ubuntu Server镜像选好SD卡直接写省去手动下载的麻烦。具体操作打开Imager选择Other general-purpose OS - Ubuntu - Ubuntu Server 24.04选择目标SD卡烧录烧录完成后重新插拔SD卡在boot分区创建ssh文件无扩展名同时编辑user-data文件如果存在用cloud-init写入用户名、密码插卡上电从路由器后台或IP扫描工具找到树莓派的IPSSH登录。启动介质这里我要重点说一句如果是正式部署别用SD卡直接用NVMe SSD。树莓派5原生支持PCIe接口加一块NVMe SSD转接板系统装在SSD上读写速度和稳定性都比SD卡强太多。车间振动环境对SD卡极不友好我就遇到过SD卡接触不良导致文件系统损坏的情况重烧系统白白浪费一下午。2.3 系统初始化与性能调优清单登录进去之后有几件事必须做sudo apt update sudo apt upgrade -y sudo apt install -y python3-pip python3-venv git cmake python3 -m venv ~/env source ~/env/bin/activate pip install onnxruntime opencv-python numpy然后针对车间无人值守的场景做优化关闭蓝牙和Wi-Fi如果用有线网络减少无线干扰和功耗设置自动登录编辑/etc/systemd/system/gettytty1.service.d/autologin.conf方便调试时直接进tty开启看门狗在/boot/firmware/config.txt或config.txt里加dtparamwatchdogon系统卡死自动重启禁用IPv6车间内网环境一般用不到顺手关掉减少干扰。提示树莓派5的Ubuntu镜像默认固件和Raspberry Pi OS的固件路径略有差异改配置前先ls /boot看清楚有没有firmware目录别照抄网上的老教程。3. CSI接口摄像头的坑帧率和画质双翻车树莓派视觉方案离不开摄像头。我一开始图省事用USB摄像头插上去能出画面但CPU占用高、帧率不稳而且USB带宽跟其他设备抢资源。后来换回CSI接口摄像头模块问题消失了大半。但CSI这条路也有自己的坑。3.1 排线长度和屏蔽质量决定帧率上限树莓派5的CSI接口用的是FPC排线。我最初用了一根比较长的普通排线结果画面帧率怎么调都上不去偶尔还会花屏。排查了一圈发现是排线太长导致信号衰减加上车间里电机、变频器的电磁干扰画面就直接受影响。换成带屏蔽的短排线之后问题立马消失。从实践出发给三条排线建议长度尽量控制在15cm以内越长信号衰减越严重优先选带屏蔽层的排线车间电磁干扰重的场景尤其重要走线避开变频器、伺服驱动器、电源模块至少隔开10cm以上。3.2 摄像头对焦与固定别让画面虚焦车间摄像头建议选可手动调焦的版本。我一开始用了固定焦距的模块装上去之后发现视野里的仪表刻度是模糊的因为实际安装距离和角度不是理想值。换上手调焦版本后调焦逻辑是这样的先松开镜头固定螺丝用实时预览画面观察找一个纹理清晰的参照物比如仪表盘上的数字、卡尺刻度慢慢旋转焦环直到画面中心和边缘都清晰再锁紧螺丝。调好焦之后必须用热熔胶或者金属支架把镜头位置固定死。车间有振动摄像头角度偏一点整个识别框就全歪了。经验俯拍仪表时镜头尽量垂直于仪表盘表面倾斜角度不要超过15度否则小目标识别精度会明显下降。我最初因为安装角度太斜模型在测试集上mAP有0.83现场实测却频繁漏检重新调整安装角度之后效果立刻好转。3.3 CSI接口的物理保护树莓派5的CSI接口非常脆弱插拔时要小心不能斜插不能用力过猛。车间环境有粉尘、油污建议在接口周围做物理防护用3D打印一个接口保护罩或者用热缩管把排线根部包住走线时用波纹管保护防止被挂断定期检查排线是否松动尤其是设备振动大的区域。不要用普通电工胶布裹CSI排线胶布老化后会有粘性残留反而吸灰。要用专门的理线带或波纹管。4. 模型推理跑得动与跑得准是两个问题树莓派5的算力比前代提升明显但跑YOLOv5依然不能无脑上原版权重。原版YOLOv5s模型在树莓派5上推理一帧大约需要300~500毫秒如果输入分辨率高一些帧率会掉到个位数。车间场景对实时性有要求必须做模型压缩和推理框架优化。4.1 选轻量模型YOLOv5s vs YOLOv5n我一开始直接用了YOLOv5s因为PC上训练AP值更好看。但在树莓派5上实测后发现推理帧率只有2~3 FPS完全不够用。后来换成YOLOv5n模型参数只有s的约1/4推理帧率能到7~9 FPS。这里给出一组实测数据模型参数量CPU推理时间适合场景YOLOv5s7.2M300~500ms/帧离线分析、高精度场景YOLOv5n1.9M120~180ms/帧实时检测、低功耗场景YOLOv5m21.2M800ms以上/帧不推荐在树莓派5上跑提示如果非要YOLOv5s的精度可以考虑FP16量化在mAP下降不超过2%的前提下推理速度能提升2~3倍。树莓派5的GPU是VideoCore VII生态还不够成熟目前主流方案还是CPU推理或外接NPU。我的选择仪表识别场景精度要求不是极致YOLOv5n加适当分辨率完全够用。模型文件只有几MB部署和更新都很轻量。4.2 推理框架选型ONNX Runtime为主树莓派5上推理YOLOv5常见方案有ONNX RuntimeCPU兼容性最好PyTorch导出ONNX后直接可用不需要额外编译V3D APIGPU加速树莓派5的GPU可以尝试但要自己封装底层逻辑坑多外接NPU加速卡比如Hailo-8L、Google Coral性能提升明显但成本高、调试复杂。我的建议先用ONNX Runtime把流程跑通确认模型和数据的正确性再根据实时性需求决定要不要上硬件加速。不要一上来就折腾NPU否则问题排查会非常痛苦。4.3 输入分辨率的取舍输入分辨率直接决定检测精度和推理速度的平衡。我踩过一个坑为了看清仪表上的小字把输入分辨率设成1280x720结果帧率掉到不足2 FPS而且小目标检测精度并没有显著提升——因为模型训练时用的是640x640推理时分辨率差异过大反而导致精度下降。正确做法训练和推理时尽量保持一致的分辨率。如果要在推理时提升小目标检测效果应该在训练阶段就使用对应的分辨率做数据增强而不是推理时临时改输入尺寸。我的最终配置输入分辨率640x640推理框架ONNX RuntimeCPU模型YOLOv5n自训练帧率7~9 FPS满足周期性巡检需求。提示车间场景的仪表读数变化往往不频繁用定时抓拍检测的模式每2秒取一帧10 FPS都绰绰有余。5. 自己训练YOLOv5模型数据采集与标注的坑树莓派5上部署自己训练的yolov5模型这条热词点到了关键。自己训练模型最花时间的其实不是训练而是数据采集、清洗和标注。5.1 数据采集车间场景的多样性我一开始只在白天采集了仪表盘照片训出来的模型在晚上或者强光下几乎没法用。后来重新采集了不同光照、不同角度、不同背景干扰的数据模型鲁棒性才上来。数据采集清单不同光照条件白天、傍晚、灯光不足、逆光不同拍摄角度正面、左侧、右侧各不超过30度不同仪表类型数字表、指针表、带玻璃反光的表不同背景纯色、复杂背景、有遮挡物的场景不同分辨率采集时保留原图训练前统一缩放。推荐采集数量每个目标类别至少500张原始图片场景变化大建议1000张以上。数据不够的情况下先做图像增强翻转、旋转、亮度变化、加噪声撑起来。5.2 标注工具与标注规范标注用LabelImg或者Labelme都可以我用的LabelImg操作简单导出YOLO格式的txt标注文件很方便。标注规范有几个细节特别重要框要贴合目标不要把背景包进去太多只框仪表盘核心读数区域类别不要过细如果只是检测仪表一个类别就没必要细分压力表温度表类别过多会稀释训练数据遮挡目标也要标仪表被手或工具挡住一部分依然要标出来真实场景本来就有遮挡模糊图片直接删模糊到人眼都看不清的图模型更难学会别浪费时间。我的数据情况标注约2000张图片2个类别数字仪表、指针仪表训练200个epoch最终mAP约0.78~0.85现场实测误检率约5%左右。5.3 训练参数与模型导出训练用的是Ultralytics YOLOv5官方仓库关键训练参数如下python train.py --img 640 --batch 16 --epochs 200 --data dataset.yaml --weights yolov5n.pt --cache--img 640训练分辨率尽量和推理分辨率一致--batch 16显存有限就调小太小容易训练不稳定--epochs 200200轮基本收敛数据量大可适当减少--weights yolov5n.pt用预训练权重做迁移学习收敛更快--cache把图片缓存到内存训练速度更快。训练完成后导出ONNXpython export.py --weights runs/train/exp/weights/best.pt --include onnx --img 640导出后在树莓派5上用ONNX Runtime加载核心逻辑import onnxruntime as ort import cv2 import numpy as np session ort.InferenceSession(best.onnx, providers[CPUExecutionProvider]) def preprocess(img): img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img cv2.resize(img, (640, 640)) img img.astype(np.float32) / 255.0 img np.transpose(img, (2, 0, 1)) img np.expand_dims(img, axis0) return img cap cv2.VideoCapture(0) while True: ret, frame cap.read() if not ret: break input_tensor preprocess(frame) outputs session.run(None, {images: input_tensor})[0] # 解析输出、画框、显示逻辑根据模型输出格式自行实现 cv2.imshow(result, frame) if cv2.waitKey(1) 0xFF ord(q): break cap.release() cv2.destroyAllWindows()提示ONNX Runtime的providers参数建议明确写[CPUExecutionProvider]不要省略否则某些环境会默认加载CUDA导致报错。6. 系统与开机自启最后一公里的稳定性模型能跑起来只算完成一半车间场景需要开机自启、无人值守、异常恢复。这一步我踩了不少坑。6.1 系统优化关键点树莓派5的Ubuntu Server装好之后有几个针对车内间运行的优化点通过cloud-init或user-data配置自动登录方便开机自启脚本调用禁用不必要的蓝牙、桌面服务减少内存和CPU占用开启watchdog硬件看门狗系统卡死自动重启如果用了SD卡强烈建议换NVMe SSD车间振动环境下SD卡太容易出问题。6.2 开机自启systemd服务的正确写法网上很多教程教你在rc.local里面写启动脚本但树莓派5上最规范、最稳定的方式是systemd。我写了一个简单的服务单元[Unit] DescriptionYOLOv5 Detection Service Afternetwork-online.target Wantsnetwork-online.target [Service] Typesimple Userubuntu ExecStart/home/ubuntu/env/bin/python /home/ubuntu/detect.py Restartalways RestartSec10 [Install] WantedBymulti-user.target把文件保存到/etc/systemd/system/detect.service然后sudo systemctl daemon-reload sudo systemctl enable detect.service sudo systemctl start detect.service说明Restartalways进程崩溃自动拉起RestartSec10崩溃后10秒重启避免疯狂重启WantedBymulti-user.target开机进入多用户模式后自动启动。补充经验如果脚本里有图像显示或GUI操作务必确认DISPLAY环境变量否则OpenCV的cv2.imshow会直接报错。车间场景我一般不显示画面只保存检测结果或上传服务器减少故障点。6.3 异常监控与日志无人值守的保障树莓派在车间里无人值守一旦卡死或者断网没有监控手段会非常痛苦。我的方案日志落盘检测脚本运行日志和错误日志分开写用logging模块按天滚动状态上报脚本每隔30秒向服务器发一个心跳包HTTP POST服务器端做超时告警看门狗开启系统级watchdog卡死自动重启远程维护配置好SSH走公司内网VLAN远程登录排查。这里有个很实际的问题树莓派5跑YOLOv5时温度会升高如果散热不好会触发降频推理速度明显变慢。我实测的情况不加散热CPU温度轻松上85°C推理时间从120ms涨到300ms以上加散热片加风扇温度稳定在60°C左右推理时间稳定在130~150ms。注意不要把树莓派放在密闭配电箱里除非有主动风道。需要防水防尘的话宁可开孔加风扇也不要完全密闭。7. 车间部署中的常见故障与排查链路最后把我在车间部署过程中遇到的问题汇总一下按排查顺序给出解决方案方便你遇到类似问题时快速定位。7.1 系统反复重启或启动失败现象上电后系统启动一半就重启或者卡在启动界面。排查步骤检查SD卡/NVMe SSD是否接触良好查看日志journalctl -b定位是硬件错误还是软件错误检查供电适配器是否足瓦树莓派5需要5V/5A官网推荐的27W电源别省检查磁盘空间是否满了尤其是日志写满的情况。7.2 推理结果乱跳检测框不稳定现象同一个画面检测框时有时无或者类别在跳动。排查方向数据问题训练集里该类别样本不足、背景差异过大阈值问题conf_thres设置太低导致误检增加光照变化车间灯光的频闪会影响摄像头曝光建议开启自动曝光或固定曝光参数画面抖动支架不稳、摄像头固定不牢。7.3 CSI摄像头无图像或花屏现象cv2.VideoCapture(0)打开不了或者画面是绿色/花屏。排查步骤先用官方命令测试摄像头libcamera-hello或rpicam-hello -t 5000检查排线是否插反、是否松动CSI接口要先掀开卡扣再插入最后压紧检查供电电压是否稳定摄像头供电不足也会花屏更换排线测试排除排线质量问题。7.4 ONNX Runtime报错现象加载模型时提示Invalid provider或No module named onnxruntime。排查步骤确认安装的onnxruntime版本支持ARM架构树莓派5用pip install onnxruntime会自动匹配arm64版本老版本wheel可能不兼容建议装最新版确认Python版本Ubuntu 24.04默认Python 3.12某些版本需要指定用python -c import onnxruntime as ort; print(ort.__version__)验证导入。7.5 数据采集时摄像头曝光不准现象逆光时仪表盘过暗强光时过曝。解决摄像头开启自动曝光设置曝光补偿或者固定曝光时间和增益保证训练和推理时光照条件尽可能一致。8. 这套方案的实际效果与扩展方向最后说点真实数据免得大家觉得我在空谈。8.1 实际效果目前这套方案在一条小型产线上跑了3个月负责仪表定期巡检和异常读数报警。具体效果如下检测准确率正常光照条件下仪表识别准确率约92%实时性YOLOv5n ONNX Runtime CPU推理单帧检测时间约130~150ms结合定时抓拍模式完全满足巡检需求稳定性3个月运行期间系统意外崩溃3次均在watchdog自动重启后恢复正常人工介入0次成本整机约1200元树莓派5加摄像头加散热加NVMe SSD加电源相比市售工业检测设备成本优势明显。8.2 可扩展的方向增加OCR识别YOLOv5负责检测仪表位置再用PaddleOCR或Tesseract识别读数数字组成检测加识别完整流水线接入MQTT上报检测结果实时推送到云端或中控系统代替人工抄表多路摄像头通过USB扩展或多CSI接口同时监控多个仪表模型升级后续可以试YOLOv8n或YOLOv10n树莓派5跑这些轻量级模型问题不大记录留存检测结果和图片保存到本地数据库便于追溯和审计。上面这些就是我把树莓派5搬进车间的全部过程。回头看真正花时间最多的不是模型训练而是供电、散热、排线、固件这些看着不起眼的环节。尤其是供电和散热车间现场它们带来的麻烦往往比模型精度问题更让人头疼。最后再分享一个小技巧去车间部署前先在办公桌上跑够72小时日志和硬件问题基本都会在办公室暴露出来。希望这篇分享能让你少走一些弯路。如果你也在车间或工控场景里折腾树莓派和其他视觉方案欢迎多交流我自己也很想听听别人在工业现场遇到的那些意外情况。