YOLOv8 验证码文字检测模型训练简化步骤
YOLOv8 验证码文字检测模型训练简化步骤
以下步骤基于自定义标注的验证码数据集,目标是让模型精准识别带干扰、扭曲的验证码文字,适配真实场景的坐标检测需求。
1. 数据集准备(核心前提)
1.1 数据收集(利用自定义程序进行生成,附件已上传)
-
收集 1000张目标验证码图片(数量越多,模型越准,建议至少 500 张),需覆盖不同干扰样式(如线条、噪点、背景纹理)和文字扭曲程度。
-
图片格式统一为 JPG/PNG,尺寸建议调整为 640×640(YOLOv8 默认输入尺寸,减少预处理耗时)。
-
运行open-cv-python_func.py程序,自动生成符合上述要求的1000张验证码图片。

生成结果如下图:
1.2 标注文字坐标(先用自定义程序自动标注,再使用LabelImg软件人工标注)
1.2.1 程序自动标注
运行PaddleOCR.py程序,实现对上一步生成的样本集进行自动标注,启用GPU加速会显著提高标注速度。

1.2.2 人工核查+标注
使用免费标注工具 LabelImg(需提前安装:pip install labelImg),按以下步骤标注:
-
打开 LabelImg,点击「Open Dir」导入验证码图片文件夹,「Change Save Dir」设置标注文件保存路径。
-
点击左侧「Create RectBox」,用鼠标框选每个文字区域,标签统一设为「text」(无需区分具体字符,只需定位文字位置)。
-
每张图标注完成后点击「Save」,会生成对应 XML 格式标注文件(包含文字的 x1,y1,x2,y2 坐标)。

标注后XML文件内容示例:
1.3 数据集划分
将图片和标注文件按 7:2:1 比例分为训练集(train)、验证集(val)、测试集(test),文件夹结构如下:
captcha_dataset/
├─ train/ # 训练集(700张图+700个XML)
│ ├─ img1.jpg
│ ├─ img1.xml
│ └─ ...
├─ val/ # 验证集(200张图+200个XML)
└─ test/ # 测试集(100张图+100个XML)
分组如图
2. 配置 YOLO 训练文件
2.1 转换标注格式(规整处理)
YOLOv8 需 TXT 格式标注,而非 XML。运行以下代码将 XML 转为 YOLO 格式(坐标归一化到 0-1 范围):
2.2 编写 YOLO 配置文件
在 ultralytics/cfg/datasets/ 目录下,新建 captcha.yaml 文件,内容如下(需替换为自己的数据集实际路径):
# 数据集路径配置
path: /your/path/to/captcha_dataset # 数据集根目录
train: train # 训练集图片文件夹(相对于path)
val: val # 验证集图片文件夹(相对于path)
test: test # 测试集图片文件夹(相对于path)
# 类别配置
names:
0: text # 仅1个类别“text”
nc: 1 # 类别总数
3. 启动模型训练
如果要使用GPU进行加速,需要依据自己之前的帖子(大模型训练时GPU的超详细配置流程!!!-CSDN博客)配置GPU,配置后pip命令安装pytorch后便可开始训练。
运行以下代码,使用 YOLOv8 轻量版(yolov8n.pt)训练,平衡速度和精度:
from ultralytics import YOLO
# 1. 加载预训练模型(yolov8n.pt轻量版,yolov8s.pt精度更高但更慢)
model = YOLO("yolov8n.pt")
# 2. 启动训练(关键参数说明)
results = model.train(
data="captcha.yaml", # 刚才编写的配置文件路径
epochs=50, # 训练轮次(50-100足够,多了易过拟合)
imgsz=640, # 输入图片尺寸
batch=16, # 批次大小(CPU建议8,GPU建议16-32)
lr0=0.001, # 初始学习率
device="0", # 训练设备(CPU用"cpu",GPU用"0")
project="captcha_train", # 训练结果保存文件夹
name="v8n_run1" # 本次训练名称
)
# 3. 训练完成后,模型会保存在 "captcha_train/v8n_run1/weights/best.pt"
训练监控
- 训练过程中,会自动生成损失曲线、精度指标(mAP50,目标检测核心指标,越高越好,建议≥0.8)。
- 若验证集损失上升,说明过拟合,可提前停止训练(epochs 设小些),或增加数据集多样性。
4. 用训练好的模型检测坐标
训练后的模型为best.pt,如图所示:
将之前的 “核心代码” 中 model_path 替换为训练生成的 best.pt,即可精准检测验证码文字坐标:
# 替换为自己的训练模型路径
text_coords = detect_text_coords(image_path="test_captcha.png", model_path="captcha_train/v8n_run1/weights/best.pt")
print("精准识别的文字坐标:", text_coords)
更多推荐
所有评论(0)