AI OCR 与文档处理指南:2026年用 GPT-4o Vision / Claude / EasyOCR 打造智能文档处理系统
OCR(光学字符识别)是企业自动化的重要一环。传统 OCR 对复杂文档效果差,2026年用 GPT-4o Vision 和 Claude 3.5 的视觉理解能力,可以识别任何文档、表格、票据。本文详解 AI OCR 的技术方案与代码实现。
💡 AI OCR 的优势:传统 OCR 只识别文字,AI OCR 能理解文档结构——表格、标题、段落、签名、印章,统统能识别。GPT-4o Vision 和 Claude 3.5 在复杂文档理解上已经接近人类水平。
OCR 技术方案对比
| 方案 | 精度 | 速度 | 成本 | 适用场景 |
|---|---|---|---|---|
| GPT-4o Vision | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ¥18/1M | 复杂文档 |
| Claude 3.5 Vision | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ¥22/1M | 长文档 |
| EasyOCR | ⭐⭐⭐ | ⭐⭐⭐⭐ | 免费(本地) | 简单文字 |
| PaddleOCR | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 免费(本地) | 中文文档 |
GPT-4o Vision OCR 实现
import base64
import anthropic
client = anthropic.Anthropic(
api_key="sk-holysheep-xxx",
base_url="https://api.holysheep.ai/v1"
)
def ocr_with_gpt4o(image_path: str) -> str:
"""用 GPT-4o Vision 识别文档"""
with open(image_path, "rb") as f:
img_data = base64.b64encode(f.read()).decode()
response = client.messages.create(
model="gpt-4o",
max_tokens=4096,
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "请识别图片中的所有文字,保持原有格式。如果是表格,请用 Markdown 表格格式输出。"},
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": img_data}}
]
}]
)
return response.content
# 识别文档
result = ocr_with_gpt4o("invoice.png")
print(result)
Claude 3.5 Vision OCR
def ocr_with_claude(image_path: str) -> dict:
"""用 Claude 3.5 识别文档并提取结构化数据"""
with open(image_path, "rb") as f:
img_data = base64.b64encode(f.read()).decode()
response = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=4096,
messages=[{
"role": "user",
"content": [
{"type": "text", "text": """请识别图片中的文档内容,并提取以下结构化信息:
1. 文档类型(发票/合同/身份证/营业执照等)
2. 所有文字内容(保持格式)
3. 关键字段(根据文档类型提取对应信息)"""},
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": img_data}}
]
}]
)
return response.content
result = ocr_with_claude("business_license.png")
print(result)
本地 OCR 方案(免费)
# pip install easyocr paddlepaddle paddleocr
import easyocr
def local_ocr(image_path: str) -> str:
"""EasyOCR 本地识别(免费,中英文)"""
reader = easyocr.Reader(['ch_sim', 'en'])
results = reader.readtext(image_path)
text = ""
for bbox, text_line, confidence in results:
if confidence > 0.5:
text += text_line + "\n"
return text
# 使用
result = local_ocr("document.jpg")
print(result)
表格识别与提取
def extract_table_from_image(image_path: str) -> str:
"""识别图片中的表格并输出 Markdown 格式"""
with open(image_path, "rb") as f:
img_data = base64.b64encode(f.read()).decode()
response = client.messages.create(
model="gpt-4o",
max_tokens=4096,
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "请识别图片中的表格,并输出为 Markdown 格式的表格。如果有合并单元格,请在备注中说明。"},
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": img_data}}
]
}]
)
return response.content
# 输出 Markdown 表格,可直接导入 Excel
table_md = extract_table_from_image("financial_report.png")
print(table_md)
批量文档处理工作流
import os
from pathlib import Path
def batch_process_documents(folder_path: str, output_folder: str):
"""批量处理文件夹中的所有图片文档"""
Path(output_folder).mkdir(parents=True, exist_ok=True)
supported_formats = [".png", ".jpg", ".jpeg", ".pdf"]
for file_path in Path(folder_path).glob("*"):
if file_path.suffix.lower() not in supported_formats:
continue
print(f"处理:{file_path.name}")
try:
# OCR 识别
text = ocr_with_gpt4o(str(file_path))
# 保存结果
output_file = Path(output_folder) / f"{file_path.stem}.txt"
output_file.write_text(text, encoding="utf-8")
print(f" ✅ 已保存:{output_file.name}")
except Exception as e:
print(f" ❌ 失败:{e}")
# 使用
batch_process_documents("./invoices", "./output")
常见文档类型处理方案
| 文档类型 | 推荐方案 | 关键提取字段 |
|---|---|---|
| 发票 | GPT-4o Vision | 发票号、金额、日期、卖方信息 |
| 身份证 | Claude 3.5 | 姓名、身份证号、地址、有效期 |
| 营业执照 | GPT-4o Vision | 公司名、社会信用代码、注册资本 |
| 合同 | Claude 3.5 | 甲乙方、金额、期限、违约条款 |
| 名片 | EasyOCR | 姓名、职位、电话、邮箱 |