Available on crate feature
ocr only.Expand description
验证码 OCR(字符型验证码识别)。feature = "ocr"。
用 ddddocr 预训练模型(对常见 4~6 位字母/数字扭曲验证码开箱即用)+ 纯 Rust 推理引擎
tract(不引原生 onnxruntime,跨平台干净)。流水线对齐 ddddocr:
解码图 → 灰度 → 等比缩放到高 64 → 归一化 (p/255-0.5)/0.5 → CNN-LSTM 推理 → CTC 贪心解码。
- 模型(beta
common.onnx,~54MB)首次使用自动下载到缓存目录(可用DRISSION_OCR_MODEL指定本地路径、DRISSION_OCR_MODEL_URL换下载源);字符集 8210 字内置于库。 - 核心(后端无关):
Ocr::new(异步,确保模型就绪)→Ocr::recognize(同步,传 PNG/JPEG 字节 → 文本)。 - 便捷(两后端,
--features cdp,ocr或--features camoufox,ocr):Tab::ocr_image(定位元素 → 取图(<img>data:URL 直接解码,否则元素截图)→ 识别)。camoufox 的Tab::ocr_image与 cdp 的ChromiumTab::ocr_image都走共享识别器,故set_default_ocr对两后端即时生效。
use drission::ocr::Ocr;
let ocr = Ocr::new().await?; // 首次会下载 ~54MB 模型到缓存
let png = std::fs::read("captcha.png")?;
println!("验证码 = {}", ocr.recognize(&png)?);注:大小写——多数字母在验证码里上下形同(S/s、C/c、W/w…),模型可能输出小写;验证码登录通常 大小写不敏感,如需可
.to_uppercase()。实测 apizero 登录 4 位字母数字 16/16 命中。
Structs§
- BBox
- 检测框(原图像素坐标,左上
(x1,y1)/ 右下(x2,y2))+ 置信度。 - Click
Hit - 点选命中:某目标字被指派到的检测框 + 点击点(原图像素)+ 亲和度(0–1,越高越可信)。
由
ClickWord::solve返回;affinity供调用方设阈值决定“点击 / 换图重试“(置信度低多半误配)。 - Click
Word - 点选 / 文字点选验证码求解器:检测主图所有字符/图标(
common_det.onnx)→ 逐框裁剪 OCR (common.onnx)→ 按提示顺序匹配出依次点击点。配合浏览器可信点击即可自动点选。 - Det
- ddddocr 目标检测器(
common_det.onnx,YOLOX)。定位图中字符/图标区域 →BBox列表; 配合Ocr::recognize逐框识别即可做点选/文字点选验证码(检测 → 逐框 OCR → 按提示顺序匹配)。 - Glyph
Matcher - 字形模板匹配器(持一份 CJK 字体)。由
GlyphMatcher::from_system探测系统字体加载。 - Ocr
- 验证码 OCR 识别器(持模型 + 字符集,可复用)。
- Sample
Bank - 真样本模板库:载入已标注的真实字图(每字若干张),按最近邻给“某框是某字“的相似度。
比渲染字体模板更贴合目标验证码的具体字体——对小固定字表(如易盾试用 ~10 字)几张真样本即奏效,
无需训练/torch。目录结构:
{dir}/{字}/任意.png(子目录名即该字)。
Functions§
- calc_
answer_ string - 把求值结果格式化成填空用字符串:整数不带小数点(
8.0→"8"),小数去尾零。 - eval_
calc - 从一段含算术式的文本解出并求值。返回
None表示无法解析为(含运算的)算术式。 - load_
charset_ file - 读字符集文件(用于自训模型热替换):自动识别三种格式 ——
{"charset":[...]}(ddddocr / dddd_trainer 的charsets.json)、纯 JSON 数组[...]、 每行一字的纯文本(首个空行即 CTC blank 占位)。 - set_
default_ ocr camoufoxorcdp - 热替换
tab.ocr_image用的进程级识别器:传入自训Ocr(自定义模型 + 字符集)即全局生效, 之后所有后端的tab.ocr_image都走它,无需重启进程。后端无关(camoufox / cdp 均生效)。 传入前用Ocr::from_files/Ocr::from_model_path_with_charset构造。