前言
首先放张图片表达此时的心情,同志们节日快乐!!!
滑块缺口验证码
滑动验证码滑块缺口的位置识别是破解滑块验证码的关键,这里我们尝试使用YOLOV8训练目标检测模型,识别出滑块图片的缺口
验证码示例
模型通过大批量生成随机数据后进行深度网络训练,本身并非针对任何一家验证码厂商而制作,模型使用效果完全靠玄学,可能可以识别,可能不能识别,仅做学习交流使用,如有侵权,请联系本人删除
滑块验证码征集:如果有其他种类的滑块验证码,在评论区留言哦😄
训练步骤
- 采集滑块图片,保留滑块图和缺口背景图
- 打标签,我目前使用labelme打标签
- 标签文件转换
labelme标签文件为json格式, 可使用labelme2yolo转为yolo支持的txt格式
# 安装labelme2yolo
pip install labelme2yolo
# 转换格式,并分割数据集(train, test, val)
labelme2yolo --json_dir /path/to/labelme_json_dir/ --val_size 0.15 --test_size 0.15
# /path/to/labelme_json_dir/ 为标签文件夹
# --val_size 0.15 验证集占比15%
# --test_size 0.15 测试集占比15%
# 分割后的文件结构
"""
/path/to/labelme_json_dir/YOLODataset/labels/train/
/path/to/labelme_json_dir/YOLODataset/labels/test/
/path/to/labelme_json_dir/YOLODataset/labels/val/
/path/to/labelme_json_dir/YOLODataset/images/train/
/path/to/labelme_json_dir/YOLODataset/images/test/
/path/to/labelme_json_dir/YOLODataset/images/val/
/path/to/labelme_json_dir/YOLODataset/dataset.yaml
"""
- 训练模型
from ultralytics import YOLO
# yolov8s.pt是yolov8提供的目标检测预训练模型
model = YOLO("yolov8s.pt")
results = model.train(data="/path/to/labelme_json_dir/YOLODataset/dataset.yaml", epochs=100, imgsz=[380, 165])
# data为上一步labelme2yolo生成的dataset.yaml配置文件
# epochs为训练次数
# imgsz为训练图片宽高
- 模型效果测试
from ultralytics import YOLO
# Load a model
model = YOLO("<训练的模型>.pt")
results = model(["test_img1.jpg", "test_img2.jpg"]) # return a list of Results objects
# Process results list
for i. result in enumerate(results):
boxes = result.boxes # Boxes object for bounding box outputs
masks = result.masks # Masks object for segmentation masks outputs
keypoints = result.keypoints # Keypoints object for pose outputs
probs = result.probs # Probs object for classification outputs
obb = result.obb # Oriented boxes object for OBB outputs
result.show() # display to screen
result.save(filename=f"result{i}.jpg") # save to disk
模型正在训练中,等明天训练完成,在这里补充训练效果
总结
以上就是今天要讲的内容,本文介绍了基于YOLOv8训练滑块验证码缺口检测模型的通用步骤,如果你有新的滑块验证码类型,请在评论区留言,后续我会增加对应的训练集到模型中。明天见!!!