🔍 智能 OCR 进阶配置
深入掌握 OCR 引擎切换、语言模型选择与精度优化技巧。
OCR 引擎对比
智能 OCR 内置 4 种引擎,各有优劣:
| 引擎 | 速度 | 精度 | 离线 | 适用场景 |
|---|---|---|---|---|
| Native OCR(系统原生) | ⚡ 极快 | ⭐⭐⭐ | ✅ 完全离线 | 清晰印刷体、实时截屏识别 |
| Tesseract.js(本地) | 🚀 快 | ⭐⭐⭐⭐ | ✅ 完全离线 | 多语言文档、扫描件 |
| 云端 OCR | 🐢 取决于网络 | ⭐⭐⭐⭐ | ❌ 需联网 | 高精度需求、百度云等专业服务 |
| VLM(视觉语言模型) | 🐌 较慢 | ⭐⭐⭐⭐⭐ | ❌ 需联网 | 复杂排版、手写体、模糊图片 |

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 替代) |
前置条件
- 在 设置 → OCR 服务 中配置云端 OCR 账号
- 确保配置的服务已启用
- 在控制面板中选择对应的云端服务
注意:如果控制面板显示"请先在设置中配置云端 OCR 服务"的黄色提示,说明还没有配置任何云端 OCR 账号。
百度云 OCR 配置
- 前往 百度云控制台 创建 OCR 应用
- 获取 API Key 和 Secret Key
- 在设置中填入凭证,选择识别端点(通用文字识别等)
自定义 OCR 配置
适合对接自有 OCR 服务的场景:
- 设置请求 URL 模板(支持变量替换,如
{{imageBase64}}) - 配置请求头和请求体模板
- 指定响应中提取文字结果的 JSONPath
VLM(视觉语言模型)引擎
适用场景
- 复杂排版:表格、多栏、图文混排
- 手写体:笔记、信件、签名
- 低质量图片:模糊、倾斜、光照不均
- 非常用语言:Tesseract 不支持的小语种
前置条件
- 在 设置 → LLM 服务 中配置支持视觉能力的模型(如 GPT-4o、Claude、Gemini 等)
- 确保模型标注了
vision: true的视觉能力 - 在控制面板中选择对应的视觉模型
关键参数调优
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 温度 | 0 ~ 0.3 | OCR 识别建议用较低温度,输出更确定 |
| 最大 Token | 4096 ~ 8192 | 根据需要识别的文字量调整 |
| 并发数 | 1 ~ 5 | 提高吞吐量,注意 API 限流风险 |
| 请求延迟 | 0 ~ 1000ms | 如果触发限流错误,适当增加延迟 |
识别提示词
默认提示词:
请识别图片中的所有文字内容,直接输出文字,不要添加任何解释。可根据场景自定义:
请逐行识别图片中的表格文字,保持表格结构,用 | 分隔列。识别并翻译这段日文文字为中文。智能切图配置
对于长图(如截图、聊天记录、代码片段),智能切图能将其按空白区域自动分割,逐个识别后再合并,大幅提升识别质量。
工作原理
原图 → 计算每行颜色方差 → 寻找空白间隙 → 生成切割线 → 切分识别 → 合并结果参数详解
| 参数 | 默认值 | 范围 | 说明 |
|---|---|---|---|
| 长宽比阈值 | 3 | 2~10 | 高宽比超过此值才触发切图。设为 10≈关闭切图,设为 2≈激进切图 |
| 空白行阈值 | 0.3 | 0.01~1.0 | 检测空白行的敏感度。值越高越容易识别为空白行 |
| 最小空白高度 | 20px | 10~50 | 空白区域低于此高度不切割,避免切碎 |
| 最小切割高度 | 680px | 20~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。