孙亮亮
返回 小企业智能化

小企业智能化

小微企业机器视觉质检实战:用 OpenCV + YOLOv8 在边缘盒子部署工业缺陷检测

2026年11月13日

从标注到边缘部署,用 YOLOv8 在国产盒子跑通工业缺陷检测。

机器视觉边缘计算YOLOv8缺陷检测

小微企业机器视觉质检实战:用 OpenCV + YOLOv8 在边缘盒子部署工业缺陷检测

摘要:人工目检成本高、夜班易漏检,机器视觉正从小厂"用不起"变成"用得上"。本文给出一条可落地的路径:用工业相机采集样本、labelImg 标注、YOLOv8 训练缺陷模型,再导出 ONNX 部署到国产 NPU 边缘盒子,最后用 MQTT 把不良率上报看板,全程不依赖云端。

一、为什么小厂也该上机器视觉质检

螺丝漏装、瓶盖歪斜、PCB 虚焊、布料破洞——这类"看得见"的缺陷,人工每小时看上千件就会疲劳,漏检率随之上升。一台几千元的边缘盒子 + 一个 USB/网口工业相机,就能 7×24 守住关键工位,单件判定只要几十毫秒。对订单量刚起来的小厂,这是投入产出比很高的改造。

二、整体方案:采集—训练—部署—上报四段式

架构分四层:

  1. 采集层:工业相机(推荐全局快门,避免运动模糊)通过 USB3 或 GigE 取流,配环形光源压低反光。
  2. 训练层:在开发机用 YOLOv8 训练,产出 .pt 权重。
  3. 边缘层:把模型转 ONNX,跑在国产 NPU 盒子(瑞芯微 RK3588、昇腾 Atlas、飞腾等)上做实时推理。
  4. 上报层:推理结果经 MQTT 发到 Grafana 看板,超阈值触发声光报警或停线。

整套不连公网也能跑,数据不出厂,符合小厂对工艺保密的要求。

三、数据采集与标注:样本比算法更关键

先拍够样本。缺陷类任务最忌"正常多、缺陷少",建议正常与缺陷样本比例不低于 3:1,且缺陷要覆盖各种形态(位置、大小、光照)。用 labelImg 框出缺陷并保存为 YOLO 格式的 .txt(每行 class x_center y_center width height,坐标归一化)。

标注三条铁律:

  • 框要贴边,别留大块背景,否则模型学偏
  • 同一类缺陷用同一个 class id,别按"大破洞/小破洞"分两类
  • 留出 20% 样本做验证集,训练时模型没见过,才能真实评估

四、YOLOv8 训练:环境、数据与命令

开发机装 ultralytics:

pip install ultralytics

数据描述文件 data.yaml:

path: /dataset
train: images/train
val:   images/val
names: ['defect']

训练命令(小厂样本通常几百到几千张,用 n 或 s 模型足够):

yolo detect train model=yolov8n.pt data=data.yaml epochs=100 imgsz=640 batch=16

imgsz=640 平衡精度与速度;batch 视显存定,8G 显存用 16 基本稳。训练完看 results.png 里的 mAP50 和 precision/recall,缺陷检测 mAP50 能到 0.9 以上才算可用。

五、导出与边缘部署:ONNX + 国产 NPU 盒子

训练出的 .pt 先转 ONNX,跨平台兼容性好:

yolo export model=best.pt format=onnx imgsz=640

RK3588 这类盒子用官方 rknn-toolkit2 把 ONNX 再量化成 .rknn,NPU 算力能跑满;昇腾用 atc 转 .om。这一步的坑是输入尺寸必须和训练一致(640),且预处理(除以 255、BGR→RGB)要和训练时完全对齐,否则精度断崖下跌。

六、推理代码:OpenCV 取流 + 模型推理

边缘盒子上用 OpenCV 拉流并推理(示意):

import cv2
from ultralytics import YOLO  # 或各 NPU 的推理 SDK

cap = cv2.VideoCapture("rtsp://相机地址/stream")
model = YOLO("best.onnx")
while True:
    ok, frame = cap.read()
    if not ok: break
    res = model(frame, imgsz=640, conf=0.5)
    for b in res[0].boxes:
        x1,y1,x2,y2 = map(int, b.xyxy[0])
        cv2.rectangle(frame, (x1,y1), (x2,y2), (0,0,255), 2)
    cv2.imshow("qa", frame)
    if cv2.waitKey(1) == 27: break

conf=0.5 是置信度阈值,缺陷漏检多就调低,误报多就调高。产线建议设双阈值:高于高阈值直接判废,介于之间的人工复检。

七、与 MES/看板对接:MQTT 上报不良率

每批次统计不良数,用 MQTT 上报:

import paho.mqtt.client as mqtt
client = mqtt.Client()
client.connect("内网broker", 1883)
client.publish("factory/line1/defect",
    json.dumps({"batch": "B20261113", "total": 200, "bad": 3}))

Grafana 订阅该主题画不良率趋势,连续超阈值自动弹报警。这样管理层手机上就能看到每条线质量,不必等班后报表。

八、踩坑清单与落地建议

  1. 光照是第一变量:换光源或调亮度后模型精度会掉,把"固定光源 + 遮光罩"当成设备一部分,别靠自然光。
  2. 样本要持续补:新出现的缺陷形态要回流标注、增量训练,模型才不过期。
  3. 帧率与判定解耦:相机 30fps,但判定可每 3 帧一次,留出 IO 余量。
  4. 误检兜底:高价值件保留"模型判废 + 人工确认"双保险,避免误杀良品。
  5. 先单点后推广:选一个最痛的工位跑通闭环,再复制到其他线,别一上来全线铺开。

九、小结

机器视觉质检对小厂不是"大厂专利"。从几百张标注样本、一个 YOLOv8 小模型、一台国产 NPU 盒子起步,用 OpenCV 取流、MQTT 上报,就能把关键工位的质量数据实时化。先把一个点跑通、看到不良率下降,再谈规模化,是风险最低的路径。

本模块其他文章

小微企业工厂能耗远程抄表实战:Modbus/DLT645 电表 + 边缘网关采集 + 峰谷优化看板小微企业自建 MQTT 物联网消息中枢:EMQX 与 Mosquitto 部署、设备认证与主题分层实战小微企业仓库条码出入库实战:ESP32 + 扫码枪 + 轻量 WMS 做库存台账与低库存告警小微企业一体化监控实战:Prometheus + node_exporter + Grafana 监控主机、服务与设备并微信告警小微企业室内定位与电子围栏实战:蓝牙 Beacon + ESP32 网关做资产/人员区域定位与越界告警小微企业设备预测性维护实战:ESP32 + 振动传感器做异常监测、FFT 频谱与企微告警小微企业安灯(Andon)系统实战:ESP32 驱动三色报警灯做产线异常呼叫与看板小微企业设备二维码巡检系统实战:扫码点检、异常上报与维护台账小微企业智能车间照明实战:ESP32 + 继电器 + 人体感应做分区节能灯控门店电子价签与促销信息屏实战:ESP32 + 墨水屏无线刷新、断网缓存与批量管理小微企业用 ESP32 + 称重传感器做原料出入库自动计量:HX711 标定与微信日报实战小微企业本地大模型落地:用 Ollama 在工控机部署 Qwen 做制度问答助手小微企业用 4G DTU 实现异地设备远程采集:无公网 IP 的分散站点组网与告警实战小微企业用 Wiegand 读卡器 + ESP32 搭建门禁考勤台账:刷卡上报、后台统计与异常告警小微企业冷库无线环境监测实战:LoRa 温湿度节点 + 网关上报 + 超限微信告警小微企业用 ThingsBoard 搭建设备物联网平台:MQTT 遥测上报、规则链告警与可视化看板小微企业用 Node-RED 搭建设备联动中台:从 MQTT 到企业微信告警小微企业设备数据采集与看板上墙:用边缘网关把 Modbus PLC 接入 Grafana门店 AI 视觉智能化落地:用摄像头 + 轻量模型做客流统计与区域安防小微企业低成本环境监控实战:ESP32 + 温湿度/水浸传感器 + 微信告警小企业经营异常自动告警实战:企业微信机器人把问题主动推到群里给小企业搭一套本地 AI 知识库客服:用 Ollama + 向量检索把老员工经验变成可查答案用二维码+手机扫码给小企业做轻量库存盘点:零设备成本的智能化落地当老系统没有接口:用 RPA 补上自动化用实时看板取代每天手填的日报
小微企业机器视觉质检实战:用 OpenCV + YOLOv8 在边缘盒子部署工业缺陷检测 · 孙亮亮