乐于分享
好东西不私藏

当 AI 助手遇上 OCR:用 Tesseract 给 OpenClaw 装一双火眼金睛

当 AI 助手遇上 OCR:用 Tesseract 给 OpenClaw 装一双火眼金睛

一个法律从业者的 AI 工具链实录

故事要从一张"敏感图"说起

最近遇到一个头疼的问题——

把一份含法院公章和判决金额的扫描件发给 AI 助手,它回了一句:"图片内容无法处理。"

嗯?自己的电脑、自己的文件、自己的 AI 助手,怎么就"无法处理"了?

原因是:底层大模型 API 自带图像安全审查——公章、红五角星、银行账号、法律纠纷金额……这些在法律文档里再正常不过的东西,API 判定为"敏感内容",直接拒绝处理。

大模型的"安全"设计,在法律实务面前成了绊脚石。

解决方案:让 AI 助手先"读字"再看图

思路很简单:不让大模型直接看图,先用 OCR 把图片里的文字抽出来,再把纯文字喂给 AI。

这样既绕过了图像审查,又保留了文档内容。

而 Windows 上最好用的免费 OCR 引擎,非 Tesseract 莫属。

第一步:装 Tesseract

Tesseract 是 Google 开源的 OCR 引擎,免费、离线、本地运行,不联网、不上传数据。

下载安装

去 GitHub Releases[1] 下载 Windows 安装包,推荐装 5.5.0 以上版本。

安装时记得勾选你要的语言包——至少勾上:

  • • 简体中文(chi_sim)
  • • 英文(eng)

装完后验证:

tesseract --versiontesseract --list-langs

能看到语言列表就对了。

装 Python 绑定(可选)

如果你习惯用 Python 调用:

pip install pytesseract Pillow

第二步:写一个 OCR 脚本

核心脚本,专门处理法律文档的 OCR 需求:

import subprocessfrom pathlib import PathTESSERACT = r"C:\Program Files\Tesseract-OCR\tesseract.exe"def ocr(image_path: str, lang: str = "chi_sim+eng") -> str:    img = Path(image_path)    out_path = str(img.with_suffix(".ocr.txt"))    Path(out_path).unlink(missing_ok=True)    cmd = [        TESSERACT, str(img),        out_path.removesuffix(".txt"),        "-l", lang,        "--oem", "3",        "--psm", "6",    ]    subprocess.run(cmd, capture_output=True, timeout=120, text=True)    return Path(out_path).read_text(encoding="utf-8", errors="replace").strip()

核心参数说明:

参数
含义
推荐值
-l chi_sim+eng
中英文混合识别
法律文档常含英文案号
--oem 3
使用 LSTM + Legacy 混合引擎
准确率最高
--psm 6
假设为统一文本块
适合扫描件段落

第三步:集成到 OpenClaw

关键的一步:让 AI 助手在遇到图片时,自动判断要不要走 OCR 绕路。

在 OpenClaw 的 MEMORY.md 里加一条规则:

敏感图走 OCR 绕图审查:图片含公章/红头/红五角星/银行账号/法律纠纷金额/身份证/手机号→ 不送 LLM,先走 Tesseract OCR 抽文字再处理纯风景照、产品图、技术截图(无敏感文字)仍可直送

这样 AI 助手就能自己判断了:

  1. 1. 收到图片 → 看是不是"敏感类型"
  2. 2. 是 → 调用 Tesseract OCR 抽文字
  3. 3. 把纯文字展示给用户,继续正常对话

纯风景照、产品截图这些正常图片,不受影响,该怎么处理怎么处理。

实战效果

拿一份判决书扫描件试了一下:

源图: 判决书扫描件.jpg输出: 判决书扫描件.ocr.txt字数: 2,847

OCR 识别率在 95% 以上,人名、案号、金额基本准确。偶有同音字错误("被告"写成"贝告"),但上下文足够让 AI 理解正确内容。

对比前后:

  • • ❌ 之前:图片被 API 拦截 → "无法处理"
  • • ✅ 之后:OCR 抽文字 → AI 正常分析 → 给出答案

踩过的坑

坑 1:DPI 不够,识别率低

默认 72 DPI 的截图,Tesseract 识别率惨不忍睹。

解法:OCR 前用 PyMuPDF 把 PDF 转图片时,设置 300 DPI:

mat = fitz.Matrix(300/72, 300/72)pix = page.get_pixmap(matrix=mat)

300 DPI 是法律文档 OCR 的"甜点"——再高收益递减,速度还慢。

坑 2:中文模型不够

Tesseract 默认只装英文。中文文档需要额外下载 chi_sim(简体中文)模型。

安装方式:重跑安装包,选语言包;或者手动下载 .traineddata 文件放到 tessdata 目录。

坑 3:Windows 路径问题

在 PowerShell 里调用 Tesseract,路径带空格会炸。

解法:Python 里用 subprocess.run 传列表参数(不是字符串),让系统自己处理路径转义:

# ✅ 正确:传列表subprocess.run([tesseract_exe, img_path, out_path, "-l", "chi_sim"])# ❌ 错误:传字符串,空格路径会炸subprocess.run(f'"{tesseract_exe}" "{img_path}" ...')

整体架构图

用户发图片 ──→ OpenClaw 主 agent                    │                    ├─ 普通图片(风景/产品/截图)──→ 直接送 LLM                    │                    └─ 敏感图片(公章/红头/金额)                          │                          ▼                    Tesseract OCR(本地离线)                          │                          ▼                    纯文字 ──→ 送 LLM 分析 ──→ 回复用户

总结

Tesseract + OpenClaw 的组合,解决了一个很具体的痛点:大模型 API 的安全审查和实务需求之间的冲突。

  • • ✅ 完全离线、本地运行,数据不出电脑
  • • ✅ 免费,无 API 调用费
  • • ✅ 中英文混合识别率 95%+
  • • ✅ 跟 AI 助手无缝集成,用户无感

如果你也在用 AI 处理法律文档、合同、扫描件,遇到"图片敏感"的问题,这个方案值得一试,它可以嵌入任何工作流中。


觉得有用?点个在看、转发支持一下!有踩坑经验的欢迎评论区交流 👇

引用链接

[1] GitHub Releases: https://github.com/UB-Mannheim/tesseract/wiki