Skip to content

🔍 智能 OCR 进阶配置

深入掌握 OCR 引擎切换、语言模型选择与精度优化技巧。


OCR 引擎对比

智能 OCR 内置 4 种引擎,各有优劣:

引擎速度精度离线适用场景
Native OCR(系统原生)⚡ 极快⭐⭐⭐✅ 完全离线清晰印刷体、实时截屏识别
Tesseract.js(本地)🚀 快⭐⭐⭐⭐✅ 完全离线多语言文档、扫描件
云端 OCR🐢 取决于网络⭐⭐⭐⭐❌ 需联网高精度需求、百度云等专业服务
VLM(视觉语言模型)🐌 较慢⭐⭐⭐⭐⭐❌ 需联网复杂排版、手写体、模糊图片

![引擎选择界面](TODO: 截图 - 控制面板的引擎类型下拉框)


Tesseract.js 引擎

适用场景

  • 中英文混合文档
  • 扫描版 PDF(图片格式)
  • 离线工作环境

语言包选择

Tesseract 引擎支持多种语言,系统会自动扫描可用语言包:

语言选项代码
简体中文 + 英文chi_sim+eng(默认)
繁体中文 + 英文chi_tra+eng
简体中文chi_sim
英文eng
日文jpn
韩文kor

提示:语言包文件位于 public/tesseract-lang/ 目录,支持添加更多语言包文件(.traineddata.gz),系统会自动识别。

并发数调优

Tesseract 使用 Worker 池实现并发识别:

  • 默认:4 个并发 Worker
  • 范围:1 ~ 24
  • 建议:CPU 核心数 × 2。例如 8 核 CPU 可设为 16
  • 效果:增加并发数可显著缩短批量处理时间,但会占用更多内存

Native OCR 引擎

适用场景

  • Windows 系统原生 OCR(Windows.Media.Ocr)
  • 需要快速识别的实时场景
  • 清晰的印刷体英文/中文

特点

  • 速度最快:无需加载模型,直接调用系统 API
  • 完全离线:不依赖网络
  • 精度有限:对复杂排版和手写体支持较弱
  • 无需配置:切换即可使用,无需选择语言或模型

云端 OCR 引擎

适用场景

  • 需要专业 OCR 服务的高精度场景
  • 有现成的百度云等 OCR 账号

支持的服务商

服务商状态说明
百度云 OCR✅ 已实现需要 API Key + Secret
自定义 OCR✅ 已实现支持任意 HTTP API,通过请求模板配置
腾讯云 OCR⏳ 占位暂未实现(被 VLM 替代)
阿里云 OCR⏳ 占位暂未实现(被 VLM 替代)

前置条件

  1. 设置 → OCR 服务 中配置云端 OCR 账号
  2. 确保配置的服务已启用
  3. 在控制面板中选择对应的云端服务

注意:如果控制面板显示"请先在设置中配置云端 OCR 服务"的黄色提示,说明还没有配置任何云端 OCR 账号。

百度云 OCR 配置

  1. 前往 百度云控制台 创建 OCR 应用
  2. 获取 API KeySecret Key
  3. 在设置中填入凭证,选择识别端点(通用文字识别等)

自定义 OCR 配置

适合对接自有 OCR 服务的场景:

  1. 设置请求 URL 模板(支持变量替换,如 {{imageBase64}}
  2. 配置请求头和请求体模板
  3. 指定响应中提取文字结果的 JSONPath

VLM(视觉语言模型)引擎

适用场景

  • 复杂排版:表格、多栏、图文混排
  • 手写体:笔记、信件、签名
  • 低质量图片:模糊、倾斜、光照不均
  • 非常用语言:Tesseract 不支持的小语种

前置条件

  1. 设置 → LLM 服务 中配置支持视觉能力的模型(如 GPT-4o、Claude、Gemini 等)
  2. 确保模型标注了 vision: true 的视觉能力
  3. 在控制面板中选择对应的视觉模型

关键参数调优

参数推荐值说明
温度0 ~ 0.3OCR 识别建议用较低温度,输出更确定
最大 Token4096 ~ 8192根据需要识别的文字量调整
并发数1 ~ 5提高吞吐量,注意 API 限流风险
请求延迟0 ~ 1000ms如果触发限流错误,适当增加延迟

识别提示词

默认提示词:

请识别图片中的所有文字内容,直接输出文字,不要添加任何解释。

可根据场景自定义:

请逐行识别图片中的表格文字,保持表格结构,用 | 分隔列。
识别并翻译这段日文文字为中文。

智能切图配置

对于长图(如截图、聊天记录、代码片段),智能切图能将其按空白区域自动分割,逐个识别后再合并,大幅提升识别质量。

工作原理

原图 → 计算每行颜色方差 → 寻找空白间隙 → 生成切割线 → 切分识别 → 合并结果

参数详解

参数默认值范围说明
长宽比阈值32~10高宽比超过此值才触发切图。设为 10≈关闭切图,设为 2≈激进切图
空白行阈值0.30.01~1.0检测空白行的敏感度。值越高越容易识别为空白行
最小空白高度20px10~50空白区域低于此高度不切割,避免切碎
最小切割高度680px20~1000切出的块低于此高度会与相邻块合并
切割线偏移0.2-1~1切割线位置微调。负值向上,正值向下,0 居中对齐

调优场景示例

场景一:聊天记录 / 代码截图

  • 长宽比阈值:3(触发切图)
  • 空白行阈值:0.2(聊天记录行间距大,严格检测即可)
  • 最小空白高度:15px(细小的空行也能识别)
  • 最小切割高度:500px(切割块不要太小)
  • 切割线偏移:0(居中切割,避免吞掉文字)

场景二:试卷 / 文档扫描件

  • 长宽比阈值:2(A4纸竖拍,接近 1.4 比例,适当降低触发条件)
  • 空白行阈值:0.4(文档空白较多,可放宽容错)
  • 最小空白高度:30px(不要被细小的段落间距干扰)
  • 最小切割高度:800px(保证每个块包含完整的题目)
  • 切割线偏移:0.2(稍微向下,防止切割线吃掉上一行的底部)

贴士:切图配置改变后,需要重新切割图片才能生效。在预览区域点击"切割当前图片"或"切割全部"即可。


精度优化 Checklist

如果识别结果不理想,按以下顺序排查:

步骤操作预期效果
1️⃣切换引擎试试不同引擎擅长不同场景
2️⃣调整切图参数减少误切割或过分割
3️⃣增加 Tesseract 并发加速但不影响精度
4️⃣使用 VLM + 自定义提示词最灵活,适配复杂场景
5️⃣重新识别失败块有时只是临时网络波动
6️⃣手动编辑结果最终手段,逐块修正

历史记录管理

OCR 历史记录采用"索引 + 分离文件"模式:

  • 索引文件history-index.json — 存储列表元数据,用于快速展示
  • 详情文件history/{recordId}.json — 存储完整识别结果

每条历史记录包含:

  • 原始图片(通过资产管理器存储)
  • 使用的引擎配置
  • 完整的识别结果
  • 时间戳

删除历史记录时,关联的图片资产也会同时清理(如果未被其他模块引用)。


💡 推荐组合:日常使用 Tesseract.js + 智能切图;遇到复杂排版切到 VLM;追求速度选 Native OCR

Released under the Apache-2.0 License.