本帖最后由 szh12123 于 2026-6-9 21:51 编辑
本文章中所有内容仅供学习交流使用,不用于其他任何目的,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!若有侵权,请联系作者删除。
由于对上一篇逆向分析中,使用滑块手动验证一直耿耿于怀,觉得不够优雅,于是花了点时间点上了训练模型的技能点,这次就分享一下使用yolo训练模型识别滑块拼图是一件多么简单的事情。
先看结果:
只想到成功率会很高,没想到是全过,识别速度也是相当快,
之前的手动滑块验证其实只获取了拼图框左下角的像素点X轴,而yolo识别图片刚好就可以做这个事情,
先下载尽量多的验证图片,这个两三百张应该差不多了,不需要png的小拼图,手动标注30-50个数据,我使用的是X-AnyLabeling,
标注后的文件是这样的,
需要将json转为txt,并且准备训练集,文件夹结构如下,
classes.txt是标注的标签名称,
data.yaml是配置信息,
其实整个json转训练集可以直接请教AI老师要个代码文件直接就转了,不用手动建文件写参数,然后给就给yolo训练,
[Python] 纯文本查看 复制代码 from ultralytics import YOLO
def main():
model = YOLO('/path/to/yolo26x.pt') # 下载的yolo模型
res = model.train(
data='/path/to/data.yaml', # 数据配置路径
epochs=100, # 训练轮数
imgsz=320, # 图片长边尺寸
workers=4 #多进程数量
)
res = model('/path/to/test') # 测试图片路径(也可以不要测试但为了方便查看实际效果)
for item,i in enumerate(res):
i.save(filename=f'./results/result_{item}.jpg')
if __name__ == '__main__':
main()
训练后就生成很多文件,weights里面就是训练好的模型,其他坐标图是训练的过程,会看的话可以用来判断训练的好不好,
因为训练集少效果肯定是不算很理想的,但没有关系,这个模型主要是用来偷懒标注的,
保存的模型是pt格式,使用X-AnyLabeling的自动标注需要转为onnx格式,使用cmd命令,
yolo export model=path/to/best.pt format=onnx
再创建一个yaml文件,文件名不重要,用来将模型和参数导入X-AnyLabeling自动标注,
主要参数可自行调整:
然后就可以执行自动标注了,先将标注的文件导入进来,再导入模型,
标注完后检查一下,有没有错误的或者漏标的(肯定是有的)手动标注一下,要偷懒也可以不检查,但是准确率可能会有所下降,然后你就获得了几百张的数据集,然后再用这套数据集重复之前的训练步骤,重新训练一个更好的识别模型,
这个模型的训练曲线就比之前的好多了,这样最后的模型就完成了,然后加载模型进行识别,
[Python] 纯文本查看 复制代码 from PIL import Image
from ultralytics import YOLO
def yolo_image_from_url(image_url):
model = YOLO('/path/to/best.pt')
response = requests.get(image_url)
response.raise_for_status()
image = Image.open(BytesIO(response.content))
results = model(image, conf=0.1, max_det=1)
boxes = results[0].boxes
if len(boxes) > 0:
box = boxes[0].xyxy[0].cpu().numpy()
x1, y1, x2, y2 = box
bottom_left_x = x1
return bottom_left_x
else:
print("未检测到任何目标")
return None
返回值是拼图左下角的像素点X轴,实测之后就有了之前的成功率,
再搭配上一篇的逆向分析,就有了全自动登录流程。
|