增加d-fine检测点选+docker镜像

This commit is contained in:
luguoyixiazi
2025-07-02 13:43:42 +08:00
committed by GitHub
parent 1beae61927
commit 6cb5b3587d

View File

@@ -10,6 +10,8 @@
模型及V4数据集https://github.com/taisuii/ClassificationCaptchaOcr
点选检测模型https://github.com/Peterande/D-FINE
apihttps://github.com/ravizhan/geetest-v3-click-crack
## 运行步骤
@@ -17,8 +19,8 @@ apihttps://github.com/ravizhan/geetest-v3-click-crack
### 1.安装依赖本地必选使用docker跳至[5-b](#docker)
可选a.如果要训练paddle的话还得安装paddlex及图像分类模块安装看项目https://github.com/PaddlePaddle/PaddleX
* 必选!)b.模型需要在项目目录下新建一个model文件夹然后把模型文件放进去具体命名可以是resnet18.onnx或者PP-HGNetV2-B4.onnx默认使用PP-HGNetV2-B4模型如果用resnet则use_v3_model设置为False因为模型的输入输出不一样可以自行修改
可选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
@@ -29,7 +31,7 @@ pip install -r requirements.txt
pip install -r requirements_without_train.txt
```
### 2.自行准备数据集V3和V4有区别可选
### 2.自行准备数据集V3和V4有区别可选,点选可以自己生成,要有旋转、重叠、换色
##### a. 训练resnet18可选
@@ -48,28 +50,39 @@ pip install -r requirements_without_train.txt
└─验证集和测试集同上
```
##### c. 如果要切V3的图用crop_image.py的crop_image_v3切V4则使用crop_image自行编写切图脚本
##### 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.模型转换为onnx可选
### 4-a.PP-HGNetV2-B4模型和resnet模型转换为onnx可选
- 运行 `python convert.py`自行进去修改需要转换的模型一般是选loss小的
- paddle模型转换要装paddle2onnx详情参见https://www.paddlepaddle.org.cn/documentation/docs/guides/advanced/model_to_onnx_cn.html
### 4-b.d-fine转换为onnx可选
- 依原项目转换
- 推理时图像预处理应于训练时一致d-fine仓库中onnx推理的预处理和训练不一致……
### 5-a.启动fastapi服务必须要有训练完成的onnx格式模型
运行 `python main.py`默认用的paddle的onnx模型如果要用resnet18可以自己改注释
运行 `python main.py`默认用的paddle的onnx模型如果要用resnet18可以自己改注释或者`uvicorn main:app --host 0.0.0.0 --port 9645 --reload`
由于轨迹问题可能会出现验证正确但是结果失败所以建议增加retry次数训练后的paddle模型正确率在99.9%以上
### 5-b.使用docker启动服务
镜像地址为<span id="docker">luguoyixiazi/test_nine:25.6.20</span>
镜像地址为<span id="docker">luguoyixiazi/test_nine:25.7.2</span>
运行时只需指定绑定的port即可api端口为/pass_nine必填参数gt、challenge
运行时只需指定绑定的port和两个环境变量`use_pdl``use_dfine`1为启用模型0为不启用默认均启用api端口为/pass_uni必填参数gt、challenge单独的pass_nine和pass_icon也写了有更多可选参数
### 6.api调用
@@ -79,15 +92,19 @@ python调用如
import httpx
def game_captcha(gt: str, challenge: str):
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)
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和参数示例
#### --宣传--
欢迎大家支持我的其他项目喵~~~~~~~~
欢迎大家支持我的其他项目(搭配使用)喵~~~~~~~~