Python中如何基于darknet实现点选验证码的目标检测?
项目地址看这里:darknet_captcha
稍微有点标题党。
前几个月上传了一个工作中用到的使用 CNN 识别验证码的项目,star 不知不觉到了 300,也有很多大佬提出了一些 issue 让我能够把项目更加完善。
这次,其实我是封装了一下 darknet,用 python 写了一系列启动脚本,写了很详细的使用指引,提供点选验证码的样本和标签的生成器,方便学习和使用目标检测技术的同学,节省大家时间。
为了带你熟悉使用流程,此项目会带你训练两个点选验证码的识别模型,分别是单类和多分类点选验证码,验证码都是咱们自己生成的,比较简单。
另外也详细了讲了如何训练自己的样本、定位后的图片分割和分类。
最后,提供了使用http 调用识别接口的代码。
图片就不放在这里了。
大佬们轻喷...
Python中如何基于darknet实现点选验证码的目标检测?
核心思路: 用YOLO(Darknet框架)训练一个模型来识别验证码图片中需要点击的特定目标(比如文字、图标)。下面是一个完整的实现流程和关键代码。
1. 环境准备与数据标注
首先,你需要准备带有点选目标的验证码图片,并用标注工具(如LabelImg)框出目标,生成YOLO格式的标签文件(.txt,内容为:类别ID x_center y_center width height,坐标需归一化)。
2. 配置文件准备
obj.names:定义类别名称,每行一个(如target)。obj.data:配置文件路径:classes=1 train=train.txt valid=valid.txt names=obj.names backup=backup/yolov4-tiny-custom.cfg(示例网络配置):修改[yolo]和[convolutional]层中的classes和filters参数(filters=(classes+5)*3)。
3. 训练模型 使用Darknet训练命令:
./darknet detector train obj.data yolov4-tiny-custom.cfg yolov4-tiny.conv.29 -dont_show
4. 预测与点选坐标获取 训练完成后,用以下Python脚本加载模型进行预测,并计算点击坐标(这里假设使用OpenCV处理):
import cv2
import numpy as np
import subprocess
def predict_captcha(image_path, config_path, weights_path, names_path):
# 使用darknet命令行预测(或使用darknet的Python接口)
command = f"./darknet detector test {config_path} {weights_path} {image_path} -thresh 0.5"
result = subprocess.run(command, shell=True, capture_output=True, text=True)
# 解析输出结果,提取边界框坐标(示例解析逻辑,需根据实际输出调整)
lines = result.stdout.split('\n')
boxes = []
for line in lines:
if '%' in line: # 假设输出行包含类别和置信度,如 'target: 90%'
parts = line.split(':')
coords = parts[1].split()[0:4] # 假设坐标在后续字符串中
x, y, w, h = map(float, coords)
boxes.append((x, y, w, h))
# 计算点击坐标(取第一个检测框的中心点)
if boxes:
x_center, y_center, _, _ = boxes[0]
return int(x_center), int(y_center)
return None
# 使用示例
config_path = 'yolov4-tiny-custom.cfg'
weights_path = 'backup/yolov4-tiny-custom_final.weights'
names_path = 'obj.names'
image_path = 'captcha.jpg'
click_point = predict_captcha(image_path, config_path, weights_path, names_path)
if click_point:
print(f"点击坐标: {click_point}")
else:
print("未检测到目标")
5. 自动化点选 结合Selenium或PyAutoGUI,将预测坐标转换为屏幕坐标并执行点击操作。
总结: 标注数据、训练YOLO模型、解析预测结果并转换为点击坐标。
感谢大佬分享,围观中
向大佬学习,文档很全面

