Skip to main content

Module ocr

Module ocr 

Source
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))+ 置信度。
ClickHit
点选命中:某目标字被指派到的检测框 + 点击点(原图像素)+ 亲和度(0–1,越高越可信)。 由 ClickWord::solve 返回;affinity 供调用方设阈值决定“点击 / 换图重试“(置信度低多半误配)。
ClickWord
点选 / 文字点选验证码求解器:检测主图所有字符/图标(common_det.onnx)→ 逐框裁剪 OCR (common.onnx)→ 按提示顺序匹配出依次点击点。配合浏览器可信点击即可自动点选。
Det
ddddocr 目标检测器(common_det.onnx,YOLOX)。定位图中字符/图标区域 → BBox 列表; 配合 Ocr::recognize 逐框识别即可做点选/文字点选验证码(检测 → 逐框 OCR → 按提示顺序匹配)。
GlyphMatcher
字形模板匹配器(持一份 CJK 字体)。由 GlyphMatcher::from_system 探测系统字体加载。
Ocr
验证码 OCR 识别器(持模型 + 字符集,可复用)。
SampleBank
真样本模板库:载入已标注的真实字图(每字若干张),按最近邻给“某框是某字“的相似度。 比渲染字体模板更贴合目标验证码的具体字体——对小固定字表(如易盾试用 ~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_ocrcamoufox or cdp
热替换 tab.ocr_image 用的进程级识别器:传入自训 Ocr(自定义模型 + 字符集)即全局生效, 之后所有后端的 tab.ocr_image 都走它,无需重启进程。后端无关(camoufox / cdp 均生效)。 传入前用 Ocr::from_files / Ocr::from_model_path_with_charset 构造。