← 返回文章列表 / Back to list
usage

免费 OCR 与文档解析 API 实战

Free OCR and Document Parsing API in Practice

⚠️ 待更新·2026-08-29核验 · 更新时间待核验 · 本文信息可能已过期,请以官方文档为准 更新时间:2026-08-29 · 核验状态:待更新 · 官方溯源待补

引言

OCR(光学字符识别)和文档解析是许多 AI 应用的入口环节——RAG 知识库构建、发票自动录入、试卷数字化都离不开它。2026 年,免费 OCR 方案已经能处理多语言、复杂版式、手写体甚至数学公式。本文从纯本地到云端 API 两个维度,给出完整选型与调用实战。

方案对比

方案 类型 中文识别 表格/版式 公式 部署成本
Tesseract 5 本地开源 CPU 即可
PaddleOCR 本地开源 优(PP-Structure) CPU/GPU 均可
Surya 本地开源 部分 需 GPU
Mistral OCR 云端 API 免费 1000 页/月
Google Vision 云端 API 1000 次/月免费
Mathpix 云端 API 1000 次/月免费

本地方案:PaddleOCR 全流程

安装

pip install paddlepaddle paddleocr

基础文字识别

from paddleocr import PaddleOCR

ocr = PaddleOCR(use_angle_cls=True, lang='ch')  # 中文+英文
result = ocr.ocr('invoice.png', cls=True)

for line in result[0]:
    box, (text, conf) = line
    print(f"[{conf:.2f}] {text}")

版面分析(表格 + 段落)

from paddleocr import PPStructure

table_engine = PPStructure(show_log=True, image_dir='./')
result = table_engine('document.png')

for region in result:
    rtype = region['type']  # text, table, figure, title
    if rtype == 'table':
        html = region['res']['html']
        print(f"TABLE HTML:\n{html}")
    elif rtype == 'text':
        text = region['res']
        print(f"TEXT: {text}")

本地方案:Surya(多语言 + 版式)

pip install surya-ocr
from surya.recognition import RecognitionPredictor
from surya.detection import DetectionPredictor

# 自动检测语言,支持 90+ 种
det_predictor = DetectionPredictor()
rec_predictor = RecognitionPredictor()

from PIL import Image
img = Image.open('scan.png')
predictions = rec_predictor([img], langs=['zh', 'en'])

for page in predictions:
    for line in page.text_lines:
        print(line.text)

云端方案:Mistral OCR(推荐)

Mistral 在 2025 年底推出的 OCR API 能处理 PDF、图片,支持表格、公式、多语言,免费层每月 1000 页。

import requests, base64

MISTRAL_KEY = "your-mistral-api-key"

# 方式一:上传图片
with open('page.png', 'rb') as f:
    img_b64 = base64.b64encode(f.read()).decode()

resp = requests.post("https://api.mistral.ai/v1/ocr", headers={
    "Authorization": f"Bearer {MISTRAL_KEY}",
    "Content-Type": "application/json"
}, json={
    "model": "mistral-ocr-latest",
    "document": {
        "type": "image_url",
        "image_url": f"data:image/png;base64,{img_b64}"
    }
})

result = resp.json()
markdown_text = result['pages'][0]['markdown']
print(markdown_text)
# 方式二:直接传 PDF URL
resp = requests.post("https://api.mistral.ai/v1/ocr", headers={
    "Authorization": f"Bearer {MISTRAL_KEY}",
    "Content-Type": "application/json"
}, json={
    "model": "mistral-ocr-latest",
    "document": {
        "type": "document_url",
        "document_url": "https://example.com/paper.pdf"
    }
})

for page in resp.json()['pages']:
    print(page['markdown'])

云端方案:Google Vision API

from google.cloud import vision
import io

client = vision.ImageAnnotatorClient()

with io.open('receipt.jpg', 'rb') as f:
    content = f.read()
image = vision.Image(content=content)

response = client.document_text_detection(image=image)
for page in response.full_text_annotation.pages:
    for block in page.blocks:
        text = ''.join(sym.text for par in block.paragraphs
                       for sym in par.symbols)
        print(f"[{block.block_type}] {text}")

选型建议

  • 纯中文 / 离线场景:PaddleOCR 是首选,PP-Structure 的表格识别已达到生产可用。
  • 多语言 / 学术文档:Surya 支持 90+ 种语言,版面分析能力强。
  • PDF / 含公式 / 含表格:Mistral OCR 输出 Markdown,直接可喂给 LLM 做 RAG,免费 1000 页/月足够原型验证。
  • 发票 / 票据:Google Vision 的 document_text_detection 对复杂版式鲁棒性好。
  • 数学公式:Mathpix 仍是公式识别的标杆,1000 次/月免费额度。

RAG 集成示例

# OCR → Markdown → Embedding → 向量库
from mistral_ocr_pipeline import ocr_document  # 上面的 Mistral 调用
from openai import OpenAI

client = OpenAI(base_url="https://openrouter.ai/api/v1", api_key="sk-or-...")

def build_rag_from_pdf(pdf_url):
    # 1. OCR 提取 Markdown
    pages = ocr_document(pdf_url)

    # 2. 分段
    chunks = []
    for i, page_md in enumerate(pages):
        # 按段落切分
        for para in page_md.split('\n\n'):
            if len(para.strip()) > 50:
                chunks.append({"page": i+1, "text": para.strip()})

    # 3. 向量化(用免费 Embedding API)
    embeddings = []
    for chunk in chunks:
        resp = client.embeddings.create(
            model="bge-m3:free",
            input=chunk["text"]
        )
        embeddings.append(resp.data[0].embedding)

    # 4. 存入向量库(如 ChromaDB / Qdrant)
    return chunks, embeddings

chunks, embs = build_rag_from_pdf("https://example.com/report.pdf")
print(f"Indexed {len(chunks)} chunks")

注意事项

  1. 图片预处理:扫描件先做去倾斜、去噪、二值化,识别率可提升 10-30%。
  2. PDF 分页:大 PDF 先拆页再逐页 OCR,避免超时和内存溢出。
  3. 表格还原:PaddleOCR 的 PP-Structure 输出 HTML,Mistral 输出 Markdown 表格,根据下游需求选择。
  4. 隐私合规:含敏感信息的文档避免用云端 API,改用本地 PaddleOCR/Surya。
  5. 成本估算:Mistral OCR 免费 1000 页/月,超出后约 $0.01/页;Google Vision 免费 1000 次/月,超出 $1.5/1000 次。

相关文章 / Related

Gemini API 免费层调用OpenRouter API Key 申请与费率OpenCode 接入免费模型实战DeepSeek API 接入步骤在本地 IDE 中集成免费 API