给 AI 发一句"帮我把这个 PDF 的文字全提取出来",它直接写代码、跑通、返回结果——这种体验以前不存在,现在 OpenCode 配合 Tesseract OCR 就能做到。
GitHub:https://github.com/anomalyco/opencode,164,482 Stars,MIT License
Tesseract:https://github.com/tesseract-ocr/tesseract,74,242 Stars,Apache-2.0,v5.5.2(2025-12-26)
Tesseract 是开源 OCR 领域最老牌的项目,1985 年由 HP 开发,2006 年转 Google 维护,2018 年后由社区继续开发(当前维护者 Zdenko Podobny,核心开发者 Stefan Weil)。OpenCode 是这两年增速最快的开源 AI 编程代理(v1.15.10,2026-05-23),164K Stars 已超过 Claude Code 等竞品。
这两个工具放在一起,解决的问题是:让 AI 帮你写调用 OCR 引擎的代码,然后自动化整个文档识别流水线。
Tesseract 5.5.2 是目前的稳定版本(2025 年 12 月更新),它是一个 C++ OCR 引擎,提供命令行工具和 libtesseract API 两层接口。
核心能力:
- 支持 100+ 语言,开箱即用,unicode UTF-8
- 多种输出格式:纯文本、hOCR(HTML)、PDF、TSV、ALTO、 PAGE
- 支持多种图片格式:PNG、JPEG、TIFF、多页 TIFF
- 支持训练:可以针对特殊字体或语言做自定义训练
- LSTM 神经网络引擎(Tesseract 4 起),比传统字符模式准确率高很多
- legacy 模式兼容:可用 --oem 0 切换回 Tesseract 3 的字符匹配引擎
Tesseract 没有内置 GUI,需要命令行调用,或者通过 wrapper(如 pytesseract、Pytesseract、Rust binding 等)接入 Python 或其他语言。
安装方式(Windows/macOS/Linux 均支持):
# macOS
brew install tesseract
# Ubuntu/Debian
sudo apt install tesseract-ocr
# Windows(用 Scoop)
scoop install tesseract
# 验证安装
tesseract --version
安装完语言包后(比如中文),一行命令就能识别:
tesseract image.png output -l chi_sim
Tesseract 的优势在于极简部署——装完就能用,不需要 Python 环境,不需要深度学习框架,资源占用也小。但它只能输出纯文本,遇到表格、印章、公式这些复杂结构就无能为力了。
两个最主流的开源 OCR 方案对比:
| 对比项 | PaddleOCR | Tesseract |
|---|---|---|
| Stars | 78,427 | 74,242 |
| 最新版本 | v3.5.0 | v5.5.2(2025-12) |
| 中文识别 | ⭐⭐⭐⭐⭐ 极强 | 一般(需配语言包) |
| 模型体积 | 较大(需 PaddlePaddle) | 较小(几十 MB) |
| 部署复杂度 | 中等 | 低(装完即用) |
| 表格/印章/公式 | ✅ 原生支持 | ❌ 纯文字 |
| 输出格式 | JSON/Markdown | 纯文本/HTML/TSV |
| 多语言 | 111 种 | 100+ 种 |
| 隐私性 | ⭐⭐⭐⭐⭐ 完全本地 | ⭐⭐⭐⭐⭐ 完全本地 |
| OpenCode 集成 | ✅ MCP 可接 | ✅ MCP 可接 |
| 适合场景 | 复杂文档、结构化输出 | 简单文字提取、快速部署 |
简单结论:
- 纯文字提取 + 快速上手 → Tesseract(装完就能用)
- 复杂文档(表格、印章、多语言混合、中文为主) → PaddleOCR
- 让 OpenCode 帮你写代码 → 两者都行,Tesseract 门槛更低,PaddleOCR 中文场景更强
Tesseract 功能清晰,但真要集成到项目里,还是需要写代码:文件读取、批量处理、结果解析、错误处理……这一步反而是 OpenCode 最擅长的事。
架构是这样的:
开发者 → OpenCode(AI 编程助手)
↓ 发指令:"写一个批量 OCR 脚本"
↓
分析需求 → 生成代码 → 调试排错
↓
Tesseract CLI / libtesseract
↓
结构化输出(文本/JSON)
OpenCode 在这里扮演"开发者替身"——你描述需求,它生成可运行的脚本。你不需要研究 Tesseract 的命令行参数,也不需要写批处理逻辑。
需求:做一个网页,可以上传图片识别文字,结果下载为 Markdown。
OpenCode 接到需求后,生成的核心 Python 代码大概是这样:
import subprocess
import tempfile
import os
from flask import Flask, request, jsonify
app = Flask(__name__)
def ocr_image(image_path, lang='eng'):
"""调用 Tesseract OCR"""
result = subprocess.run(
['tesseract', image_path, 'stdout', '-l', lang, '--oem', '3', '--psm', '6'],
capture_output=True, text=True
)
return result.stdout.strip()
@app.route('/ocr', methods=['POST'])
def handle_ocr():
file = request.files['image']
lang = request.form.get('lang', 'eng')
# 保存临时文件
with tempfile.NamedTemporaryFile(delete=False, suffix=os.path.splitext(file.filename)[1]) as tmp:
file.save(tmp.name)
text = ocr_image(tmp.name, lang)
os.unlink(tmp.name) # 清理
return jsonify({
'success': True,
'text': text,
'stats': {'chars': len(text), 'lines': text.count('\n') + 1}
})
关键参数说明:
- --oem 3:使用 LSTM 神经网络引擎(最准确)
- --psm 6:假设统一文本块,自动分段
OpenCode 会自动选择合适的 --psm 值,也会根据你的图片类型(扫描件、照片、表格区域)调整参数。
PDF 里的内容分两种:文本层(可直接 copy)和嵌入图片(需要 OCR)。
OpenCode 生成的方案会先判断类型,再决定处理方式:
用户上传 PDF
↓
用 pymupdf(PyMuPDF)读取
↓
判断:有可提取文本层? → 有 → 直接用 text
无 → 用 pymupdf 提取嵌入图片页
↓
调用 Tesseract 识别图片
↓
返回 Markdown 结果
核心代码片段:
import fitz # PyMuPDF
def extract_text_from_pdf(pdf_path, lang='eng'):
doc = fitz.open(pdf_path)
pages_text = []
for page_num, page in enumerate(doc):
text = page.get_text()
if text.strip():
pages_text.append(f"## Page {page_num + 1}\n\n{text}")
else:
# 无文本层,转图片 OCR
pix = page.get_pixmap(dpi=300)
with tempfile.NamedTemporaryFile(suffix='.png', delete=False) as tmp:
pix.save(tmp.name)
text = ocr_image(tmp.name, lang)
os.unlink(tmp.name)
pages_text.append(f"## Page {page_num + 1}\n\n{text}")
return '\n\n'.join(pages_text)
这套方案用 PyMuPDF 替代 pdf2image 的原因:pdf2image 依赖 poppler,在 Windows 上需要额外配置环境变量,而 PyMuPDF 是纯 Python,跨平台更友好。
Tesseract 官方文档明确指出:改善输入图片质量是提升 OCR 准确率的最重要手段。
常见预处理操作,OpenCode 可以帮你写:
from PIL import Image, ImageFilter, ImageEnhance
def preprocess_image(image_path):
img = Image.open(image_path)
# 转灰度
img = img.convert('L')
# 二值化(去噪)
img = img.point(lambda x: 0 if x < 128 else 255, '1')
# 锐化(模糊扫描件效果差)
img = img.filter(ImageFilter.SHARPEN)
# 对比度增强
enhancer = ImageEnhance.Contrast(img)
img = enhancer.enhance(1.5)
return img
预处理后用 Tesseract 识别,效果通常能提升 20-30%。
# macOS
brew install tesseract tesseract-lang # 英文+多语言
# Ubuntu/Debian
sudo apt install tesseract-ocr
sudo apt install tesseract-ocr-chn # 中文语言包
# Windows
scoop install tesseract
# 验证
tesseract --version
pip install pytesseract Pillow PyMuPDF flask
# 命令行直接用
tesseract input.png stdout -l eng --oem 3 --psm 6
# Python 调用
import pytesseract
from PIL import Image
img = Image.open('input.png')
text = pytesseract.image_to_string(img, lang='eng')
print(text)
# 下载中文语言包(chi_sim=简体中文,chi_tra=繁体中文)
# 语言包放在 Tesseract 的 tessdata 目录
# 或用 pytesseract 指定路径
import pytesseract
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
text = pytesseract.image_to_string(img, lang='chi_sim')
如果你有长期图片、PDF 转文字需求,完全可以自己动手开发个简单网页,部署后随时用。不再为付费 OCR 发愁,也不依赖飘忽的商业 API 价格。
结合 OpenCode 的 Skill 流水线,把常用的文档处理流程固化下来,反复跑。你只需要描述需求,OpenCode 帮你写代码、调通、部署。
OpenCode + Tesseract 这个组合的价值不在于"OCR",而在于把文档识别能力变成可编程的日常工作流。你可以让它帮你写批量处理脚本、搭 Web OCR 服务——这些以前需要专门研究 Tesseract 命令行,现在用自然语言描述需求就能做到。
本质上:让 AI 帮你写调用 AI 能力的代码。
你在用 OpenCode + Tesseract 做什么?或者有什么文档识别的需求?评论区说说。
💬 评论区