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),按以下步骤标注:

  1. 打开 LabelImg,点击「Open Dir」导入验证码图片文件夹,「Change Save Dir」设置标注文件保存路径。

  2. 点击左侧「Create RectBox」,用鼠标框选每个文字区域,标签统一设为「text」(无需区分具体字符,只需定位文字位置)。

  3. 每张图标注完成后点击「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)
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐