📄 文档管理系统

← 返回列表

OpenCode + Tesseract:用 AI 编程代理做文档OCR

article 📅 创建:2026-05-24 20:14:54 🔄 更新:2026-05-24 12:29:41
👁️ 预览 & 复制到公众号 ✏️ 编辑

给 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 是什么

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 环境,不需要深度学习框架,资源占用也小。但它只能输出纯文本,遇到表格、印章、公式这些复杂结构就无能为力了。

PaddleOCR vs Tesseract:选哪个

两个最主流的开源 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 中文场景更强

OpenCode 怎么配合 Tesseract

Tesseract 功能清晰,但真要集成到项目里,还是需要写代码:文件读取、批量处理、结果解析、错误处理……这一步反而是 OpenCode 最擅长的事。

架构是这样的:

开发者 → OpenCode(AI 编程助手)
              ↓ 发指令:"写一个批量 OCR 脚本"
              ↓
         分析需求 → 生成代码 → 调试排错
              ↓
         Tesseract CLI / libtesseract
              ↓
         结构化输出(文本/JSON)

OpenCode 在这里扮演"开发者替身"——你描述需求,它生成可运行的脚本。你不需要研究 Tesseract 的命令行参数,也不需要写批处理逻辑。

实际跑一遍:OCR 网页核心代码

需求:做一个网页,可以上传图片识别文字,结果下载为 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 的两种情况

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,跨平台更友好。

图片预处理:决定 OCR 质量的关键

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%。

安装配置速查

Tesseract 安装

# 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

Python 环境准备

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')

长期 OCR 需求?自己搭个网页更划算

如果你有长期图片、PDF 转文字需求,完全可以自己动手开发个简单网页,部署后随时用。不再为付费 OCR 发愁,也不依赖飘忽的商业 API 价格。

结合 OpenCode 的 Skill 流水线,把常用的文档处理流程固化下来,反复跑。你只需要描述需求,OpenCode 帮你写代码、调通、部署。

写在最后

OpenCode + Tesseract 这个组合的价值不在于"OCR",而在于把文档识别能力变成可编程的日常工作流。你可以让它帮你写批量处理脚本、搭 Web OCR 服务——这些以前需要专门研究 Tesseract 命令行,现在用自然语言描述需求就能做到。

本质上:让 AI 帮你写调用 AI 能力的代码

你在用 OpenCode + Tesseract 做什么?或者有什么文档识别的需求?评论区说说。

💬 评论区

加载中...