Trustbustinggleefulness546/Argus
GitHub: Trustbustinggleefulness546/Argus
基于视觉模型的验证码识别工具,提供命令行与 HTTP API 双模式,支持点选、滑块、拖拽匹配等多种验证码类型的自动化识别。
Stars: 0 | Forks: 0
# Argus
Argus,取名自希腊神话里的百眼巨人。
一个用于验证码识别的 Python 项目,支持两种调用方式:
- 命令行模式:读取本地图片,输出标注结果图
- HTTP API 模式:上传图片并返回统一 JSON 结构
## 环境准备
本项目使用 `uv` 管理依赖与运行环境。
uv sync
## 目录说明
Argus/
├─ app/ # 核心业务代码
│ ├─ main.py # CLI 实际实现
│ ├─ api_server.py # API 实际实现
│ ├─ recognition.py # 识别流程复用模块
│ └─ config.yaml # 服务端配置文件
├─ other/ # 杂项文件与历史脚本归档
├─ main.py # CLI 兼容入口(转发到 app/main.py)
├─ api_server.py # API 兼容入口(转发到 app/api_server.py)
└─ recognition.py # 兼容导出(转发到 app/recognition.py)
## 命令行模式
命令行入口复用 `app/recognition.py` 中的同一识别流程。
uv run python main.py --image image.png --api-key
也可直接使用新目录入口:
uv run python -m app.main --image image.png --api-key
常用参数:
- `--base-url`:OpenAI 兼容接口地址,默认 `https://api.amethyst.ltd/v1`
- `--model`:模型名称,默认 `gpt-5.4`
- `--retries`:重试次数,默认 `3`
- `--output`:输出标注图路径,默认 `captcha_result.png`
- `--log`:日志路径,默认 `captcha_test.log`
## API 服务
### 启动服务
uv run python api_server.py
也可直接使用新目录入口:
uv run python -m app.api_server
默认监听 `0.0.0.0:8000`,可通过环境变量修改:
- `CAPTCHA_API_HOST`
- `CAPTCHA_API_PORT`
- `CAPTCHA_API_KEY`
- `CAPTCHA_BASE_URL`
- `CAPTCHA_MODEL`
- `CAPTCHA_RETRIES`
- `CAPTCHA_TIMEOUT`
- `CAPTCHA_MAX_IMAGE_BYTES`
默认配置文件路径:`app/config.yaml`
### 健康检查
curl http://127.0.0.1:8000/health
### 识别接口
- 方法:`POST`
- 路径:`/api/v1/recognize`
- 请求体:`multipart/form-data`
- 必填字段:`file`(图片文件)
- 认证与模型配置:仅由服务端 `config.yaml` 或环境变量维护(客户端不可覆盖)
- 安全边界:若请求携带 `api_key`、`base_url`、`model` 等额外字段,接口将直接返回 400
示例请求:
curl -X POST "http://127.0.0.1:8000/api/v1/recognize" \
-F "file=@image.png;type=image/png"
### 预览接口(返回标注图)
- 方法:`POST`
- 路径:`/api/v1/recognize/preview`
- 请求体:`multipart/form-data`
- 必填字段:`file`(图片文件)
- 返回:`image/png`(已标记识别结果的图片)
示例请求:
curl -X POST "http://127.0.0.1:8000/api/v1/recognize/preview" \
-F "file=@image.png;type=image/png" \
--output preview.png
### 成功响应结构
统一字段:
- `success`: `true`
- `data.captcha_type`: `click` / `slide` / `drag_match`
- `data.action`: 与验证码类型匹配
不同类型字段:
- `click`:`data.clicks` 为坐标数组
- `slide`:`data.gap`、`data.slider`、`data.drag_distance`
- `drag_match`:`data.pairs` 为 from/to 坐标映射数组
点选示例:
{
"success": true,
"data": {
"captcha_type": "click",
"action": "click",
"clicks": [
{
"x": 210,
"y": 360
}
],
"gap": null,
"slider": null,
"drag_distance": null,
"pairs": []
},
"error": null
}
滑块示例:
{
"success": true,
"data": {
"captcha_type": "slide",
"action": "slide",
"clicks": [],
"gap": {
"x": 580,
"y": 300
},
"slider": {
"x": 160,
"y": 840
},
"drag_distance": 420,
"pairs": []
},
"error": null
}
拖拽匹配示例:
{
"success": true,
"data": {
"captcha_type": "drag_match",
"action": "drag_match",
"clicks": [],
"gap": null,
"slider": null,
"drag_distance": null,
"pairs": [
{
"id": 1,
"from": {
"x": 650,
"y": 320
},
"to": {
"x": 180,
"y": 290
}
}
]
},
"error": null
}
### 错误响应结构
统一格式:
{
"success": false,
"data": null,
"error": {
"code": "ERROR_CODE",
"message": "可读错误信息",
"details": "错误详情"
}
}
常见错误:
- 携带额外入参(如 `api_key/base_url/model`):400 `EXTRA_PARAMETERS_NOT_ALLOWED`
- 缺少 `file` 字段:422 `VALIDATION_ERROR`
- 文件不是图片:415 `UNSUPPORTED_MEDIA_TYPE`
- 图片内容无法解析:422 `INVALID_IMAGE`
- 模型调用失败:502 `MODEL_CALL_FAILED`
## 项目文件
- `app/`:核心程序目录(CLI/API/识别流程/配置)
- `other/`:杂项文件与归档脚本目录
- 根目录 `main.py`、`api_server.py`、`recognition.py`:兼容入口,内部转发到 `app/`
标签:Argus, AV绕过, FastAPI, GPT, HTTP API, OCR, Python, Python脚本, uv包管理, 人工智能, 图像标注, 图像识别, 多模态大模型, 文本提取, 无后门, 漏洞管理, 用户模式Hook绕过, 逆向工具, 验证码识别