在医药生产流水线和实验室场景中,药片和胶囊的精确计数一直是个耗时且容易出错的工作。传统的人工计数方式不仅效率低下,长时间操作还容易导致视觉疲劳和计数误差。为了解决这一痛点,我们基于最新的YOLOv26目标检测算法和PyQt5框架,开发了一套高精度的药片胶囊自动计数系统。
这个系统能够实时识别并统计图像中的药片和胶囊数量,准确率超过90%,同时提供了直观的图形用户界面(GUI)方便操作。相比市面上的商业解决方案,我们的系统具有以下优势:
在选择技术方案时,我们重点考虑了以下几个因素:
基于这些考虑,我们最终确定了以下技术栈:
提示:YOLOv26相比前代版本在小型目标检测上有了显著提升,这对于药片这种密集小目标的检测尤为重要。
整个系统的工作流程可以分为以下几个阶段:
我们收集了超过2000张药片和胶囊的高清图像,涵盖了不同角度、光照条件和摆放方式。数据集的主要特征如下:
| 指标 | 数值 |
|---|---|
| 总图片数 | 2017 |
| 训练集 | 1804 |
| 验证集 | 135 |
| 测试集 | 78 |
| 标注类别 | 2(药片、胶囊) |
| 总标注框数 | 41235 |
| 标注工具 | LabelImg |
数据集中的标注遵循YOLO格式,每个标注文件包含:
为了提升模型的泛化能力,我们采用了多种数据增强技术:
注意:增强后的图像仍保持原有标注信息,确保训练数据的准确性。我们特别控制了增强幅度,避免过度扭曲导致图像失真。
我们使用以下环境进行模型训练:
以下是我们的主要训练参数配置:
yaml复制# 训练配置文件
model: yolov26n.yaml
data: dataset.yaml
epochs: 100
batch: 16
imgsz: 640
optimizer: AdamW
lr0: 0.001
lrf: 0.01
warmup_epochs: 3
weight_decay: 0.0005
训练过程中,我们重点关注以下指标的变化:
我们的最终训练结果如下:
| 指标 | 训练集 | 验证集 |
|---|---|---|
| mAP@0.5 | 90.7% | 91% |
| 精确度 | 85.9% | 86.2% |
| 召回率 | 85.7% | 86.5% |
从结果可以看出,模型在验证集上的表现略优于训练集,说明没有出现过拟合现象。
我们设计了简洁直观的GUI界面,主要包含以下功能区域:
界面采用响应式设计,可以适应不同尺寸的屏幕。
系统的主要功能代码如下:
python复制class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 初始化模型
self.model = YOLO('best.pt')
# 设置界面
self.initUI()
def initUI(self):
# 创建主窗口组件
self.image_label = QLabel()
self.result_table = QTableWidget()
self.run_button = QPushButton('开始检测')
# 布局设置
main_layout = QHBoxLayout()
left_panel = QVBoxLayout()
left_panel.addWidget(self.image_label)
right_panel = QVBoxLayout()
right_panel.addWidget(self.result_table)
right_panel.addWidget(self.run_button)
main_layout.addLayout(left_panel, 70)
main_layout.addLayout(right_panel, 30)
# 信号槽连接
self.run_button.clicked.connect(self.detect_objects)
def detect_objects(self):
# 执行检测
results = self.model(self.current_image)
# 处理结果
self.show_results(results)
bash复制conda create -n yolo26 python=3.8
conda activate yolo26
bash复制pip install torch==2.3.1 ultralytics==8.4.31 pyqt5
bash复制python gui.py
python复制results = model(image, half=True)
bash复制yolo export model=best.pt format=engine
在某制药厂的试运行中,我们的系统表现出色:
相比传统人工计数:
完整的项目资源包括:
这些资源可以帮助用户快速部署和使用该系统,也可以作为二次开发的基础。