尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

YOLOv26药品铝塑板缺粒检测实战:Python训练、验证与推理完整代码

发布时间:2026/9/6 2:55:59

资讯中心
01
ARTICLE

YOLOv26药品铝塑板缺粒检测实战:Python训练、验证与推理完整代码

YOLOv26药品铝塑板缺粒检测实战:Python训练、验证与推理完整代码
文章来源说明本文由 ZeroOne AI 整理发布官网与 CSDN 双端同步首发原文见 www.zeroone-ai.com。一、项目目标针对药品铝塑板视觉检测本项目使用500万彩色工业相机 穹顶漫射光 YOLOv26实现药品铝塑板的药粒有无检测药粒缺失检测药粒破损检测药粒异常检测药粒位置检测后续扩展颜色检测整体流程工业相机 ↓ 采集铝塑板图片 ↓ 人工标注 ↓ YOLO数据集 ↓ YOLOv26训练 ↓ 模型验证 ↓ 单张图片测试 ↓ 实时相机检测 ↓ OK / NG二、Python环境建议单独建立虚拟环境conda create -n yolo26_drug python3.11 -y conda activate yolo26_drug安装 Ultralyticspip install -U ultralytics检查版本python -c import ultralytics; print(ultralytics.__version__)检查 YOLOyolo checks如果使用 NVIDIA GPU还需要根据 CUDA 环境安装对应版本的 PyTorch。三、项目目录建议先建立一个非常简单的项目drug_yolo26/ │ ├── datasets/ │ └── blister/ │ ├── images/ │ │ ├── train/ │ │ ├── val/ │ │ └── test/ │ │ │ ├── labels/ │ │ ├── train/ │ │ ├── val/ │ │ └── test/ │ │ │ └── data.yaml │ ├── train.py ├── val.py ├── predict.py └── test_camera.py四、建立YOLO数据集例如采集 1000 张铝塑板图片。建议训练集80%验证集10%测试集10%最终images/train、images/val、images/test分别对应labels/train、labels/val、labels/test。例如images/train/ 000001.jpg 000002.jpg 000003.jpg labels/train/ 000001.txt 000002.txt 000003.txt图片和标签必须一一对应。五、检测类别设计第一阶段建议不要把类别设计得过于复杂。例如0 normal 1 missing 2 damaged对应names: 0: normal 1: missing 2: damaged后期如果增加颜色检测可以扩展0 normal 1 missing 2 damaged 3 color_error 4 foreign_object不过实际项目中我仍然推荐YOLO 负责目标和缺陷Lab 负责精确颜色评价。不要一开始就让 YOLO 承担所有颜色判断。六、data.yaml创建datasets/blister/data.yaml内容path: ./datasets/blister train: images/train val: images/val test: images/test names: 0: normal 1: missing 2: damaged如果数据集使用绝对路径也可以path: D:/AI/drug_yolo26/datasets/blister train: images/train val: images/val test: images/test names: 0: normal 1: missing 2: damaged七、YOLO标签格式YOLO 标签一行表示一个目标class x_center y_center width height例如0 0.215 0.318 0.085 0.092所有坐标都是 0~1 归一化坐标。例如图片 2448 × 2048药粒中心 x600、y700那么x_center 600 / 2448 y_center 700 / 2048八、Python训练程序创建train.py代码尽量保持简单方便调试from ultralytics import YOLO def main(): # 加载YOLOv26模型 model YOLO(yolo26n.pt) # 开始训练 results model.train( datadatasets/blister/data.yaml, # 输入尺寸 imgsz640, # 训练轮数 epochs100, # Batch batch16, # GPU device0, # 工作线程 workers4, # 项目名称 projectruns/drug, # 实验名称 nameyolo26n_blister, # 保存周期 save_period10, # 预训练 pretrainedTrue, # 训练完成后进行验证 valTrue, ) print(训练完成) if __name__ __main__: main()运行python train.py九、第一次调试不要直接训练几百轮第一次建议epochs5例如model.train( datadatasets/blister/data.yaml, imgsz640, epochs5, batch4, device0, workers2, )目的不是获得最终模型而是检查数据集是否正确标签是否正确模型是否能正常训练GPU 是否正常类别是否正确图片是否能够读取如果 5 轮可以正常完成再增加到 50、100、200甚至 200~300 轮。十、CPU调试如果电脑没有 GPU可以devicecpumodel.train( datadatasets/blister/data.yaml, imgsz640, epochs5, batch2, devicecpu, workers2, )CPU 主要用于验证程序能不能跑通正式训练还是建议使用 GPU。十一、训练结果训练完成后通常可以看到runs/ └── drug/ └── yolo26n_blister/ ├── weights/ │ ├── best.pt │ └── last.pt │ ├── results.csv ├── results.png ├── confusion_matrix.png └── ...其中best.pt是后续推理最重要的模型。十二、Python验证模型创建val.pyfrom ultralytics import YOLO def main(): model YOLO( runs/drug/yolo26n_blister/weights/best.pt ) results model.val( datadatasets/blister/data.yaml, imgsz640, batch16, device0, ) print(results) if __name__ __main__: main()运行python val.py重点关注 Precision、Recall、mAP50、mAP50-95。但是工业检测不能只看 mAP真正应该重点关注缺粒有没有漏检。十三、为什么工业检测不能只看mAP例如正常药粒 10000 个、缺粒 100 个模型可能获得非常漂亮的整体 mAP。但是如果缺粒漏检 20 个对于药品包装来说仍然可能是无法接受的。所以实际项目应该单独统计缺粒 Recall破损 Recall颜色异常 Recall特别是缺陷漏检率。十四、单张图片推理创建predict.pyfrom ultralytics import YOLO def main(): model YOLO( runs/drug/yolo26n_blister/weights/best.pt ) results model.predict( sourcetest.jpg, # 输入尺寸 imgsz640, # 置信度 conf0.25, # IoU iou0.45, # GPU device0, # 保存结果 saveTrue, # 保存标签 save_txtTrue, # 显示结果 showTrue, ) for result in results: print(检测结果) for box in result.boxes: cls_id int(box.cls[0]) conf float(box.conf[0]) print( fclass{cls_id}, fconfidence{conf:.3f} ) if __name__ __main__: main()运行python predict.py十五、获取YOLO检测框实际工业软件开发时我们通常不只是需要画框而是需要获得 X、Y、W、H、Class、Confidence。例如for result in results: boxes result.boxes for box in boxes: cls_id int(box.cls[0]) conf float(box.conf[0]) x1, y1, x2, y2 box.xyxy[0].tolist() print( cls_id, conf, x1, y1, x2, y2, )这样就可以继续做颗粒定位、模板匹配、颜色分析、完整度分析、PLC 控制。十六、建立铝塑板颗粒位置模板这是实际项目中非常重要的一步。假设一板药有 20 颗可以建立P01 P02 P03 ... P20例如○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○YOLO 识别以后P01 → normal P02 → normal P03 → missing P04 → normal ...最终P03 缺粒整板 NG。十七、颜色检测YOLO 检测到药粒以后取得对应 ROIx1, y1, x2, y2 map(int, box.xyxy[0]) roi image[y1:y2, x1:x2]然后ROI ↓ RGB ↓ Lab ↓ 颜色特征 ↓ ΔE ↓ 颜色是否异常Python 可以使用 OpenCVimport cv2 lab cv2.cvtColor( roi, cv2.COLOR_BGR2LAB, )注意OpenCV 读取图片默认是 BGR而不是 RGB所以程序中一定要注意通道顺序。十八、为什么使用LabRGB 更适合图像显示Lab 更适合颜色差异评价。因此相机 ↓ BGR ↓ Lab ↓ L* a* b* ↓ ΔE可以建立正常药粒颜色标准例如正常颜色中心 L 72 a 8 b 31 当前药粒 L 70 a 11 b 21计算颜色距离超过设定阈值即为 Color NG。十九、完整检测逻辑最终建议使用下面的判断流程彩色工业相机 ↓ 图像 ↓ YOLOv26 ↓ ┌────────┴────────┐ ↓ ↓ 药粒检测 异常检测 ↓ ↓ 位置模板匹配 缺粒/破损 ↓ 获得ROI ↓ Lab颜色分析 ↓ ΔE ↓ ┌─────┴─────┐ ↓ ↓ 完整度OK 颜色异常 ↓ ↓ └─────┬─────┘ ↓ 颗粒级结果 ↓ 整板OK / NG二十、建议第一阶段先不要做颜色训练这是实际调试时非常重要的一点。第一阶段只训练normal missing damaged先解决药粒有没有、位置对不对、是否破损。等模型稳定以后再加入 Lab ΔE 处理颜色。这样调试会简单很多。二十一、推荐的开发顺序整个项目不要一次性全部开发建议按照以下阶段推进第一阶段图片读取 → YOLOv26 训练 → 单张图片推理第二阶段药粒位置模板 → 缺粒判断 → 整板 OK/NG第三阶段ROI 提取 → Lab 颜色分析 → ΔE第四阶段工业相机实时采集 → YOLOv26 实时推理第五阶段PLC → 剔除机构第六阶段MES → 批次 → 产品 → 检测结果二十二、最终工程架构最终 Python 调试程序可以形成drug_yolo26/ │ ├── datasets/ │ └── blister/ │ ├── models/ │ └── best.pt │ ├── train.py ├── val.py ├── predict.py │ ├── vision/ │ ├── color.py │ ├── completeness.py │ └── template.py │ └── camera/ └── camera.py其中train.py负责训练predict.py负责 YOLO 推理color.py负责颜色检测completeness.py负责颗粒完整度template.py负责铝塑板颗粒位置判断最终可以进一步将 Python 算法迁移到 C#、Qt/C、OpenVINO、Intel NPU、NVIDIA GPU 进行工业部署。二十三、总结本项目最终采用500万像素彩色工业相机 穹顶漫射光 YOLOv26。其中相机负责获得高质量彩色图像穹顶漫射光负责降低铝塑板反光和光照不均YOLOv26 负责药粒定位、缺粒和破损检测位置模板负责判断每一个规定位置是否存在药粒Lab ΔE 负责药粒颜色检测最终输出颗粒数量、缺粒数量、破损数量、颜色异常数量、完整度、整板 OK/NG。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。