尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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。
RELATED

相关推荐

4K 60fps Hi-Res无损视频技术解析与播放实践指南

4K 60fps Hi-Res无损视频技术解析与播放实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/11/11 21:14:10
紫悦/暮光闪闪AI绘画工具本地部署指南:从环境配置到功能测试

紫悦/暮光闪闪AI绘画工具本地部署指南:从环境配置到功能测试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/11/11 21:14:07
野猫集成失败?从Maven依赖冲突到NoSuchMethodError的排查指南

野猫集成失败?从Maven依赖冲突到NoSuchMethodError的排查指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/31 4:11:32
MORE NEWS

更多资讯

📰

工地穿线工用电工证吗通过率揭秘

工地穿线工用电工证吗通过率揭秘 之前考的证在外省能不能转过来?这个问题,我见过太多人问。很多人拿着外省的电工证,来到工地干穿线工,结果发现证件不被认可,甚至被要求重新考证。今天就从 工地穿线工用电工证吗 这个角度出发,结合 通过率揭秘…

📰

电工证6月1号改革后全国通用怎么办理和转证

电工证6月1号改革后全国通用怎么办理和转证 之前考的证在外省能不能转过来?这个是很多从事电工行业朋友最关心的问题。特别是像我们信阳浉河区的劳务班组负责人,经常需要跨省承接项目,手上持有的电工证是否还能用,直接影响到项目的推进和合规性。别急,…

📰

桂林电工证哪里考全流程办理指南多少钱

桂林电工证哪里考全流程办理指南多少钱 实操考试心里没底怕挂科?你不是一个人。很多人第一次报考电工证时,最担心的就是考试环节,尤其是实操部分,觉得自己动手能力不够,怕出错挂科。别急,这篇全流程指南就是为你量身打造的, 桂林电工证哪里考…

📰

大沥市电工证值不值得考?中小施工企业负责人必看

大沥市电工证值不值得考?中小施工企业负责人必看 你是不是也遇到过这样的情况:不知道去哪报名怕被中介坑?想考个【大沥市电工证】,但又担心流程复杂、费用高、不靠谱?别急,今天就给你一个 真实、靠谱、避坑…

📰

核电电工证办理流程官方回应:考证前这些细节必须知道

核电电工证办理流程官方回应:考证前这些细节必须知道 你是不是也遇到过这种情况:手里拿着一堆证书,但就是找不到合适的工作?或者好不容易找到机会,却因为没办对证而被拒之门外?别急,今天咱们就来聊一聊 核电电工证办理流程 ,还有 官方回应…

📰

2026河南最新政策下司机算特种工退休吗怎么考

2026河南最新政策下司机算特种工退休吗怎么考 你是不是也正愁没特种作业证,找工作处处碰壁?2026河南最新政策下,很多岗位明确要求持证上岗,司机算特种工退休吗?这个问题直接影响你能不能拿到退休金、能不能继续从事相关工作。如果你也在犹豫要不…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬