5.8 KiB
5.8 KiB
开源/本地方案示例
本文件只给授权场景下的离线求解和诊断示例。真实网页点击、拖动、提交前必须回到 references/verification-workflow.md 做确认。
通用准备
建议先把证据整理成文件:
- 图片验证码:精确裁剪后的图片。
- 滑块:背景图、滑块图、轨道宽度、元素显示尺寸。
- 点选/九宫格/区域:完整截图、题面文本、元素边界。
- 音频:音频文件、语言、答案格式。
依赖示例:
python -m pip install ddddocr opencv-python pillow numpy
只在需要时安装对应库,不要把依赖路径写进 skill。
text
开源优先:
- 用 OpenCV 做灰度、二值化、降噪、去干扰线。
- 用 ddddocr 或 Tesseract 识别。
- 用字符集、长度、大小写规则约束结果。
示例思路:
import ddddocr
ocr = ddddocr.DdddOcr(show_ad=False)
with open("captcha.png", "rb") as f:
text = ocr.classification(f.read())
print(text)
适合切到平台的情况:扭曲强、背景噪声强、字符粘连、样本通过率低。
math
流程:
- 按
text识别表达式。 - 归一化
x/X/×为*,÷为/。 - 只允许数字、括号和基础运算符进入安全求值。
输出必须包含原始 OCR、归一化表达式和结果。遇到歧义时不要猜。
slider
开源优先:
- 先确认图片模式:双图、单图、canvas。
- 双图优先用 ddddocr
slide_match或 OpenCV 模板/边缘匹配。 - 单图用缺口边缘、局部对比、差分或 VLM 辅助。
- 用
scripts/map_coordinates.py把图片偏移换算成 DOM/CSS 坐标。 - 用
scripts/generate_motion_track.py生成滑块轨迹 JSON。
示例思路:
import ddddocr
det = ddddocr.DdddOcr(det=False, ocr=False, show_ad=False)
with open("target.png", "rb") as f:
target = f.read()
with open("background.png", "rb") as f:
background = f.read()
print(det.slide_match(target, background))
注意:视觉偏移正确不等于验证一定成功;厂商可能绑定行为采集、challenge id、浏览器状态或加密参数。
click-select
开源优先:
- OCR/VLM 解析题面,保留原始顺序词。
- 文字点选用 OCR + 模板/轮廓定位。
- 物体点选用 YOLO/目标检测、CLIP/VLM 或模板匹配。
- 输出截图坐标和元素相对坐标。
需要多轮时,每轮单独保存题面和截图。
rotate
开源优先:
- 用 OpenCV 主方向、特征匹配或边缘方向估计角度。
- 用 VLM 做正向判断复核。
- 按轨道宽度和角度范围换算拖动距离。
输出角度、轨道宽度、换算公式、固定偏移和置信度。
grid
开源优先:
- 分割格子,记录每格边界和中心点。
- 用题面选择分类器:YOLO、CLIP、VLM 或专用图片分类模型。
- 返回格子编号、中心坐标和每格置信度。
reCAPTCHA/hCaptcha/AWS WAF 可能多轮,不要只保存最后一轮。
audio
开源优先:
- 提取音频文件。
- 做降噪、音量归一化和静音裁剪。
- 用 Whisper/faster-whisper 转写。
- 用答案格式做数字/字符纠错。
示例依赖:
python -m pip install faster-whisper
不要处理电话语音 OTP、短信、邮箱或 MFA。
图像/坐标类组合
这些类型通常共享一组能力:
drag-drop:目标检测源对象和目标区域,再生成拖放轨迹。trace-draw:OpenCV 提取路径,骨架化后重采样成点列。scratch:生成覆盖轨迹,观察刮开前后状态。image-restore:先判断是否为切片乱序;页面顺序优先,图片边缘/纹理匹配次之。area-select:检测/分割/SAM/YOLO/VLM 输出框或多边形。difference-click:图像配准后差分定位。font-identify:OCR 内容 + 字形特征或 VLM 字体关系判断。semantic-reasoning:目标检测 + 关系推理或 VLM。
优先输出离线坐标和置信度;真实页面操作前必须确认。
image-restore 切片乱序
当图片被分割成多块后顺序打乱时,保持主类型 image-restore,补充 captcha_variant: tile-scramble。第一版优先使用 scripts/analyze_tile_restore.py:
python scripts/analyze_tile_restore.py --image scrambled.png --rows 3 --cols 3 --order-source-by-target "1,2,0,4,5,3,7,8,6" --output-image restored.png --pretty
处理顺序:
- 页面逻辑优先:从
tileOrder、pieceOrder、sliceOrder、CSSbackground-position、sprite、canvasdrawImage或接口字段还原每个目标位置对应的来源切片。 - 只有图片时:按
rows/cols或tile-width/tile-height切片,用左右/上下边缘连续性、颜色/纹理连续性、特征点匹配或 VLM 得到候选顺序。 - 输出
order_source_by_target、confidence、restore_strategy和还原图;低置信度时不要硬猜。 - 如果还原结果还要换算拖动距离或交换动作,再回到
references/motion-and-coordinate.md处理坐标和轨迹。
边界:
- 普通九宫格选择题是
grid,不是切片乱序。 - 普通缺口滑块是
slider,不是切片乱序。 - 纯色块、重复纹理、随机裁剪或顺序字段加密时,本地边缘匹配通过率会低,应切人工/平台复核或厂商授权测试环境。
pow-challenge
PoW 类不是图片识别题。对 ALTCHA、FriendlyCaptcha、Cap.js、mCaptcha 等:
- 阅读官方接入方式。
- 检查 challenge、payload、difficulty、nonce、TTL、防重放和服务端签名。
- 自有系统优先修正集成和校验逻辑。
不要把 PoW 当成 OCR 或滑块任务。