2025-07-22 01:37:39 +08:00
2024-11-01 01:18:01 +08:00
2024-11-01 01:18:01 +08:00
2024-11-01 01:18:01 +08:00
2024-11-01 01:18:01 +08:00
2025-07-02 13:45:47 +08:00
2025-07-02 14:48:49 +08:00
2024-11-01 01:18:01 +08:00
2024-11-02 02:22:29 +08:00
2025-03-21 05:22:45 +08:00
2025-03-21 05:24:49 +08:00
2024-11-02 02:22:29 +08:00
2024-11-01 01:18:01 +08:00

九宫格+点选测试代码

本项目仅供学习交流使用,请勿用于商业用途,否则后果自负。

本项目仅供学习交流使用,请勿用于商业用途,否则后果自负。

本项目仅供学习交流使用,请勿用于商业用途,否则后果自负。

参考项目

模型及V4数据集https://github.com/taisuii/ClassificationCaptchaOcr

点选检测模型https://github.com/Peterande/D-FINE

apihttps://github.com/ravizhan/geetest-v3-click-crack

运行步骤

1.安装依赖本地必选使用docker跳至5-b

可选a.如果要训练paddle的话还得安装paddlex及图像分类模块安装看项目https://github.com/PaddlePaddle/PaddleX 可选b.d-fine训练看项目https://github.com/Peterande/D-FINE * 必选c.模型需要在项目目录下新建一个model文件夹然后把模型文件放进去具体命名可以是resnet18.onnx或者PP-HGNetV2-B4.onnx默认使用PP-HGNetV2-B4模型如果用resnet则use_v3_model设置为False因为模型的输入输出不一样可以自行修改d-fine的模型同样放置此路径用于通过点选

pip install -r requirements.txt

仅推理

pip install -r requirements_without_train.txt

2.自行准备数据集V3和V4有区别可选点选可以自己生成要有旋转、重叠、换色

a. 训练resnet18可选
  • 数据集详情参考上面标注的项目但是上面项目是V4数据集V3没有demo自行发挥吧用V4练V3不改代码正确率有点感人
  • 主要是V4的尺寸和V3有差别V4的api直接给两张图一张是目标图一张是九宫格V3放在一起要切目标且V3目标图清晰度很低V4九宫格切了之后是100 * 86的图去掉黑边但是V3九宫格切的是112 * 112不确定V4九宫格内容在V3基础上做了什么变换反正改预处理就完事了
b. 训练PP-HGNetV2-B4可选

在paddle上随便找的数据集格式如下如果拿V4练V3建议是多整点变换

   dataset
   ├─images   #所有图片存放路径
   ├─label.txt #标签路径,每一行数据格式为 <序号>+<空格>+<类别>如15 地球仪
   ├─train.txt #训练图片,每一行数据格式为 <图片路径>+<空格>+<类别>如images/001.jpg 0
   └─验证集和测试集同上
b. 训练d-fine可选

数据集格式如d-fine中标识如果不修改源码则num_classes需+1采用coco格式即可我用的320*320dataloader注释掉了RandomZoomOut、RandomHorizontalFlip、RandomIoUCrop这些我全写在数据集生成中了

c. 如果要切V3的九宫格图用crop_image.py的crop_image_v3切V4则使用crop_image自行编写切图脚本

3.训练模型(可选)

  • 训练resnet18运行 python train.py
  • 如果训练PP-HGNetV2-B4运行python train_paddle.py
  • 训练d-fine参照原项目一个模型拿下比ddddocr+相似性检测资源开销小点

4-a.PP-HGNetV2-B4模型和resnet模型转换为onnx可选

4-b.d-fine转换为onnx可选

  • 依原项目转换
  • 推理时图像预处理应于训练时一致d-fine仓库中onnx推理的预处理和训练不一致……

5-a.启动fastapi服务必须要有训练完成的onnx格式模型

运行 python main.py默认用的paddle的onnx模型如果要用resnet18可以自己改注释或者uvicorn main:app --host 0.0.0.0 --port 9645 --reload

由于轨迹问题可能会出现验证正确但是结果失败所以建议增加retry次数训练后的paddle模型正确率在99.9%以上

5-b.使用docker启动服务

镜像地址为luguoyixiazi/test_nine:25.7.2

运行时只需指定绑定的port和两个环境变量use_pdluse_dfine1为启用模型0为不启用默认均启用api端口为/pass_uni必填参数gt、challenge单独的pass_nine和pass_icon也写了有更多可选参数

6.api调用

python调用如

import httpx

def game_captcha(gt: str, challenge: str):
	res = httpx.get("http://127.0.0.1:9645/pass_uni",params={'gt':gt,'challenge':challenge},timeout=10)
	# 或者依旧使用pass_nine路径
	# res = httpx.get("http://127.0.0.1:9645/pass_nine",params={'gt':gt,'challenge':challenge,'use_v3_model':True,"save_result":False},timeout=10)
	datas = res.json()['data']
    if datas['result'] == 'success':
        return datas['validate']
    return None # 失败返回None 成功返回validate

在snap hutao中的服务端口为/pass_hutao,返回值已做对齐填写api如(http://127.0.0.1:9645/pass_hutao?gt={0}&challenge={1})即可

具体调用代码看使用项目此处示例仅为API url和参数示例

--宣传--

欢迎大家支持我的其他项目(搭配使用)喵~~~~~~~~

Description
九宫格图片检验测试,使用resnet18或者PP-HGNetV2-B4,杂糅项目,仅供参考
Readme 884 KiB
Languages
Python 100%