向AI转型的程序员都关注公众号 机器学习AI算法工程
你每天花多少时间在手动输入PDF上的表格?
我上周处理了一份30页的财务报表,光是把表格敲进Excel就花了整整一下午。更崩溃的是,里面还夹杂着手写的备注和复杂的数学公式。
传统OCR?Tesseract识别表格时列都对不上,手写体直接乱码,公式更是一团糟。用GPT-4o Vision吧,准确率够用,但处理速度慢得让人怀疑人生,而且还要担心数据安全。
直到我发现了Chandra OCR 2。
这是一款完全开源的OCR模型,在官方测试基准上拿下了85.9分,直接碾压了GPT-4o的69.9分。更夸张的是,它在数学公式识别(80.3分)、表格识别(88分)和长段小字号文本(92.3分)这三个维度上都是第一。
最让人心动的是,它只需要4GB显存就能本地运行,完全不需要把敏感文档上传到云端。
今天,我来带你从零开始,掌握这个让GPT-4o都汗颜的OCR神器。
一、Chandra OCR 2是什么?
简单说,Chandra OCR 2是一个布局感知的OCR模型。
传统OCR就像是个"字面主义者",它能认出每个字,但不知道这些字在页面上的位置关系。多栏排版会读成一栏,表格会变成一坨乱码,公式更是灾难。
Chandra不一样,它像是个"懂版式的人"。它不仅能认字,还能理解文档结构——标题层级、多栏排版、嵌套表格、数学公式、手写批注、表单复选框,它都能识别出来,并且原样输出为带语义的Markdown、HTML或结构化JSON。
这个能力让它在处理复杂文档时表现出了压倒性优势。
技术突破:
- 布局理解
:能识别多栏、嵌套表格、图文混排等复杂布局 - 数学公式
:LaTeX级别的公式还原,连手写公式都能识别 - 表格重建
:支持合并单元格,保持原表格结构 - 表单识别
:能识别复选框、单选按钮及其勾选状态 - 多语言支持
:覆盖90+语言,包括中文、阿拉伯语、日语等 - 图文提取
:自动提取图片和图表,并添加标题说明
性能数据:
-
olmOCR基准测试:85.9分(综合排名第一) -
数学公式识别:80.3分(第一) -
表格识别:88分(第一) -
小字号文本:92.3分(第一) -
手写笔记识别:90.8分(第二)
商业友好:
-
代码采用Apache 2.0许可 -
模型权重使用修改版OpenRAIL-M许可 -
免费用于研究、个人使用和年收入200万美元以下的初创公司 -
可本地部署,数据安全有保障
二、为什么选择Chandra OCR 2?
说个真实的案例。
上个月,我们团队需要处理100份老扫描件的中文数学教科书。这些PDF有多复杂呢?双栏排版、复杂公式、手写解题过程、还有各种批注。
我们尝试了Tesseract:公式全部失败,表格列错乱,手写体基本不可读。
试了GPT-4o Vision:准确率够用,但处理一份文档需要15秒,100份就是25分钟,而且还要担心数据隐私问题。
最后换成了Chandra OCR 2:每份文档平均3秒,准确率95%以上,公式完美还原,手写批注用引用块单独标记,直接输出结构化Markdown。
但Chandra最厉害的地方不是速度快,而是结构化输出。
传统OCR给你的是一堆文本,你还需要花时间整理、排版、调整。Chandra直接给你的是可用的结构化文档——标题用#标记,表格用Markdown表格格式,公式用LaTeX,手写批注用>引用块,页眉页脚作为注释附在文末。
这意味着什么?
如果你要把PDF转成博客文章,Chandra的输出可以直接复制粘贴到你的Markdown编辑器,几乎不需要修改。
如果你要处理表格数据,Chandra输出的JSON包含完整的坐标和结构信息,你可以直接用Python脚本提取表格,然后导入到Pandas。
如果你要建立知识库,Chandra的输出格式适合直接喂给RAG系统,搜索和检索都极其方便。
三、系统要求与准备工作
在开始安装之前,先确认你的环境是否符合要求。
最低配置:
- 操作系统
:Windows(需要WSL2)、macOS(支持Apple Silicon)、Linux(推荐Ubuntu 20.04+) - Python版本
:3.9或更高(3.10/3.11测试最稳定) - 显存
:4GB(如RTX 3060) - 内存
:8GB(处理大PDF建议16GB+) - 磁盘空间
:至少10GB空闲空间
推荐配置:
- 显卡
:RTX 3060/4060及以上(12GB显存) - 内存
:16GB或更高 - 存储
:SSD硬盘(模型加载更快)
重要提示:
-
Windows用户建议使用WSL2,原生Windows支持有限 -
GPU加速需要NVIDIA显卡和CUDA驱动(建议版本535+) -
如果没有GPU,可以CPU运行,但速度会慢10倍以上 -
需要安装PDF渲染库(macOS用Homebrew安装poppler,Linux用apt-get)
检查CUDA版本:
nvidia-smi
检查Python版本:
python --version
四、安装指南
Chandra OCR 2提供了三种安装方式,我按推荐程度依次介绍。
方案一:pip安装(最简单,推荐新手)
这是最快捷的方式,适合快速体验和开发测试。
第一步:创建虚拟环境(强烈推荐)
# Linux/macOS
python -m venv chandra-env
source chandra-env/bin/activate
# Windows
python -m venv chandra-env
chandra-env\Scripts\activate
# 或者用conda
conda create -n chandra python=3.10
conda activate chandra
虚拟环境能避免包冲突,强烈建议使用。
第二步:安装Chandra OCR
# 基础安装(vLLM后端,推荐)
pip install chandra-ocr
# 如果要用HuggingFace后端
pip install chandra-ocr[hf]
# 完整安装(包含所有依赖)
pip install chandra-ocr[all]
安装过程大约需要2-3分钟,会自动下载约2.1GB的模型权重文件到~/.cache/chandra/目录。
第三步:验证安装
chandra --version
如果看到版本号输出,说明安装成功!
方案二:Docker部署(最稳定,适合生产)
如果你想要隔离的环境,或者需要在服务器上部署,Docker是最佳选择。
第一步:安装Docker和NVIDIA Container Toolkit(如果用GPU)
# 安装NVIDIA Container Toolkit(Linux)
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl-s-L https://nvidia.github.io/nvidia-docker/gpgkey |sudo apt-key add -
curl-s-L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list |sudotee /etc/apt/sources.list.d/nvidia-docker.list
sudoapt-get update
sudoapt-getinstall-y nvidia-container-toolkit
sudo systemctl restart docker
第二步:拉取Docker镜像
docker pull datalabto/chandra-ocr:latest
第三步:运行容器
# 使用GPU运行
docker run --gpus all -p8501:8501 -v$(pwd)/data:/app/data datalabto/chandra-ocr:latest
# 不用GPU(速度会慢很多)
docker run -p8501:8501 -v$(pwd)/data:/app/data datalabto/chandra-ocr:latest
# Windows用户把$(pwd)换成%cd%
参数说明:
--gpus all:使用所有GPU -p 8501:8501:映射端口 -v $(pwd)/data:/app/data:挂载数据目录
运行后,在浏览器打开http://localhost:8501就能看到Web界面了。
方案三:从源码安装(最新功能,适合开发者)
如果你想要最新功能,或者想修改代码,可以从源码安装。
# 克隆仓库
git clone https://github.com/datalab-to/chandra.git
cd chandra
# 创建虚拟环境
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# 安装
uv sync
# 或用pip
pip install-e.
pip install".[pdf,accelerate]"
五、使用教程
Chandra提供了三种使用方式:CLI命令行、Streamlit Web界面、Python API。
方式一:CLI命令行(批量处理神器)
单文件处理:
# 使用vLLM后端(推荐,速度快)
chandra input.pdf ./output --method vllm
# 使用HuggingFace后端
chandra input.pdf ./output --method hf
# 指定页面范围
chandra input.pdf ./output --method vllm --page-range "1-5,7,9-12"
# 包含图片提取
chandra input.pdf ./output --method vllm --include-images
# 包含页眉页脚
chandra input.pdf ./output --method vllm --include-headers-footers
批量处理目录:
# 处理整个目录
chandra ./documents ./output --method hf
# 批量处理,指定格式
chandra ./scans ./output --method vllm --max-workers 4
常用参数说明:
--method [hf|vllm]:推理方法(默认vllm) --page-range TEXT:页面范围(如"1-5,7,9-12") --max-output-tokens INTEGER:每页最大token数 --max-workers INTEGER:并行worker数 --include-images/--no-images:是否提取图片 --include-headers-footers/--no-headers-footers:是否包含页眉页脚 --batch-size INTEGER:每批处理页数(vllm默认28,hf默认1)
输出结构:
处理完成后,每个文件会生成一个目录:
output/
└── report.pdf/
├── report.pdf.md # Markdown格式
├── report.pdf.html # HTML格式(带坐标)
├── report.pdf_metadata.json # 元数据(页面信息、token数等)
└── images/ # 提取的图片
方式二:Streamlit Web界面(适合单文件处理)
启动Web界面超级简单:
chandra_app
浏览器会自动打开http://localhost:8501。
界面功能:
-
拖拽上传图片或PDF -
实时预览识别结果 -
左侧显示原图,右侧显示Markdown预览 -
支持切换HTML/JSON格式 -
点击文字可反查原图坐标 -
一键导出所有格式(.md/.html/.json)
这个界面非常适合调试和快速预览效果。
方式三:Python API(适合集成到自己的应用)
基础用法:
from chandra.model import InferenceManager
from chandra.model.schema import BatchInputItem
from PIL import Image
# 创建推理管理器(使用vLLM后端)
manager = InferenceManager(method="vllm")
# 准备输入
batch =[
BatchInputItem(
image=Image.open("document.jpg"),
prompt_type="ocr_layout"
)
]
# 执行推理
result = manager.generate(batch)[0]
# 获取Markdown结果
print(result.markdown)
# 获取HTML结果
print(result.html)
# 获取JSON结果
print(result.json)
处理PDF:
from chandra.inputimport load_pdf_images
# 加载PDF所有页面
images = load_pdf_images("document.pdf")
# 批量处理
batch =[BatchInputItem(image=img, prompt_type="ocr_layout")for img in images]
results = manager.generate(batch)
# 遍历每页结果
for i, result inenumerate(results):
print(f"Page {i+1}:")
print(result.markdown)
print("-"*50)
配置选项:
# 使用HuggingFace后端
manager = InferenceManager(method="hf")
# 自定义vLLM服务器
import os
os.environ["VLLM_API_BASE"]="http://localhost:8000/v1"
os.environ["VLLM_MODEL_NAME"]="chandra"
os.environ["VLLM_GPUS"]="0"
manager = InferenceManager(method="vllm")
vLLM服务器部署(高性能生产环境)
如果你需要处理大量文档,或者要求低延迟,建议部署vLLM服务器。
启动vLLM服务器:
chandra_vllm
这会启动一个Docker容器,配置好的vLLM服务器。
或自己启动vLLM:
# 启动vLLM服务器(使用两张GPU)
python -m vllm.entrypoints.openai.api_server \
--model datalab-to/chandra \
--tensor-parallel-size 2\
--gpu-memory-utilization 0.9\
--port8000
配置说明:
--model:模型名称 --tensor-parallel-size:GPU并行数(默认1) --gpu-memory-utilization:GPU内存使用率 --port:服务端口
使用OpenAI兼容API:
import openai
client = openai.OpenAI(
base_url="http://localhost:8000/v1",
api_key="token-abc123"
)
# 调用OCR识别
response = client.chat.completions.create(
model="chandra-ocr",
messages=[
{"role":"user","content":"识别这张图片"}
],
image="base64编码的图片数据"
)
print(response.choices[0].message.content)
六、实战案例
下面我给你3个真实场景的实战案例,每个案例都包含场景描述、实现步骤和效果展示。
案例一:批量处理财务报表
场景描述:
财务部门每个月收到50份供应商发票,都是扫描件PDF,包含表格、金额、日期、税号等关键信息。需要把这些数据提取到Excel,方便对账。
实现步骤:
第一步:准备发票文件
mkdir invoices
cp ~/Downloads/*.pdf invoices/
第二步:批量处理
chandra ./invoices ./output --method vllm --max-workers 4
第三步:提取表格数据到Python
import json
import pandas as pd
# 读取JSON输出
withopen("output/invoice001.pdf/invoice001.pdf_metadata.json","r")as f:
metadata = json.load(f)
# 提取表格数据
tables =[]
for page in metadata["pages"]:
for block in page["blocks"]:
if block["type"]=="table":
tables.append(block["table"])
# 转换为DataFrame
df = pd.DataFrame(tables[0])
df.to_excel("invoice001.xlsx", index=False)
效果展示:
-
处理50份PDF仅需3分钟(每份约3.6秒) -
表格识别准确率95%以上 -
合并单元格正确识别 -
金额、日期等关键字段提取准确 -
手写备注用引用块单独标记,不会混入表格
案例二:学术文献公式提取
场景描述:
研究人员需要从arXiv论文中提取数学公式,用于文献综述和公式库建设。论文包含大量复杂公式、双栏排版、图表穿插。
实现步骤:
第一步:使用CLI处理论文
chandra "paper.pdf" ./papers_output --method vllm --include-images
第二步:提取LaTeX公式
import re
withopen("papers_output/paper.pdf/paper.pdf.md","r")as f:
markdown = f.read()
# 提取LaTeX公式($...$和$$...$$格式)
inline_formulas = re.findall(r'\$([^$]+)\$', markdown)
block_formulas = re.findall(r'\$\$([^$]+)\$\$', markdown)
print(f"找到{len(inline_formulas)}个行内公式")
print(f"找到{len(block_formulas)}个块级公式")
# 保存公式库
withopen("formulas.txt","w")as f:
for i, formula inenumerate(block_formulas,1):
f.write(f"公式{i}:\n{formula}\n\n")
第三步:提取带标题的图片
import shutil
# 移动提取的图片到专用目录
shutil.copytree(
"papers_output/paper.pdf/images",
"paper_images"
)
# 元数据中包含图片标题
withopen("papers_output/paper.pdf/paper.pdf_metadata.json","r")as f:
metadata = json.load(f)
for page in metadata["pages"]:
for block in page["blocks"]:
if block["type"]=="image":
print(f"图片: {block['image']['caption']}")
效果展示:
-
公式识别准确率93% -
LaTeX格式完整保留 -
双栏排版正确识别 -
图片和图表自动提取 -
图表标题准确提取 -
参考文献格式正确识别
案例三:多语言文档处理
场景描述:
跨国公司需要处理来自不同国家的合同文件,包括中文、英文、阿拉伯语、日语等多种语言。文件包含表单、签名、印章、手写条款。
实现步骤:
第一步:批量处理多语言文件
chandra ./contracts ./contracts_output --method vllm --max-workers 4
第二步:检测语言并分类
import langdetect
import os
contracts_dir ="contracts_output"
languages ={}
for contract_file in os.listdir(contracts_dir):
if contract_file.endswith(".md"):
# 读取Markdown内容
withopen(os.path.join(contracts_dir, contract_file),"r")as f:
content = f.read()
# 检测语言(取前1000字符)
language = langdetect.detect(content[:1000])
# 分类统计
if language notin languages:
languages[language]=[]
languages[language].append(contract_file)
# 输出统计
for lang, files in languages.items():
print(f"{lang}: {len(files)}份文件")
第三步:提取签名和印章
import json
# 检查所有文件的JSON元数据
for contract_file in os.listdir(contracts_dir):
if contract_file.endswith("_metadata.json"):
withopen(os.path.join(contracts_dir, contract_file),"r")as f:
metadata = json.load(f)
# 查找签名区域(通常在底部)
for page in metadata["pages"]:
for block in page["blocks"]:
if block["type"]=="text":
# 检查是否包含签名关键词
text = block["text"].lower()
if"signature"in text or"签署"in text or"签字"in text:
print(f"找到签名区域: {contract_file}")
print(f"坐标: {block['bbox']}")
if block["type"]=="image":
# 图片可能是印章
print(f"发现图片(可能是印章): {contract_file}")
print(f"坐标: {block['bbox']}")
效果展示:
-
中文识别准确率:94.8% -
英文识别准确率:95.2% -
阿拉伯语识别准确率:68.4%(低资源语言) -
日语识别准确率:85.3% -
表单复选框识别准确率:90% -
手写签名识别准确率:82%
七、高级特性与技巧
1. GPU加速配置
如果你有NVIDIA显卡,务必开启GPU加速,速度会提升3-5倍。
检查CUDA版本:
nvcc --version
nvidia-smi
安装匹配版本的PyTorch:
# CUDA 12.1示例
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
指定GPU:
# 只用第0张卡
CUDA_VISIBLE_DEVICES=0 chandra input.pdf ./output
# 用第1张卡
CUDA_VISIBLE_DEVICES=1 chandra input.pdf ./output
2. 批量处理优化
处理大量文件时,可以优化参数提升速度:
# 增加worker数(根据CPU核心数调整)
chandra ./docs ./output --max-workers 8
# 增加批大小(根据GPU显存调整)
chandra ./docs ./output --batch-size 4
# 处理特定页面范围
chandra large.pdf ./output --page-range "1-10,20-30"
3. 输出格式选择
不同场景选择不同输出格式:
Markdown:
-
适合:博客文章、文档编辑、知识库 -
优点:可读性好,易于编辑 -
命令: chandra input.pdf output/
HTML:
-
适合:网页展示、嵌入系统 -
优点:带坐标,便于标注 -
命令: chandra input.pdf output/(默认生成)
JSON:
-
适合:数据处理、自动化流程 -
优点:结构化,便于编程 -
命令:读取 .metadata.json文件
4. 错误处理与调试
常见问题:
问题1:CUDA版本不匹配
# 解决:重新安装匹配的PyTorch
pip uninstall torch
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
问题2:显存不足
# 解决:减小批大小或使用CPU
chandra input.pdf output/ --batch-size 1
# 或
chandra input.pdf output/ --method hf
问题3:PDF渲染错误
# 解决:安装poppler
# macOS
brew install poppler
# Ubuntu/Debian
sudoapt-getinstall-y poppler-utils
八、性能对比与优势
为了让你更直观地了解Chandra OCR 2的优势,我整理了详细的性能对比数据。
与主流OCR工具对比
表格
|
|
|
|
|
|
|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
硬件需求对比
表格
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
真实场景测试结果
我们在5类文档上进行了实测,每类10页,共50页样本:
表格
|
|
|
|
|
|
|
|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
可用率定义:输出Markdown能否直接粘贴到Obsidian/Notion/Typora,无需大幅修改即可阅读和引用。
核心优势总结
1. 布局理解能力
-
唯一能真正理解文档结构的开源OCR -
多栏、嵌套表格、图文混排完美处理 -
输出可直接使用,无需二次排版
2. 结构化输出
-
Markdown、HTML、JSON三种格式 -
带完整坐标和元数据 -
适合直接集成到自动化流程
3. 商业友好
-
Apache 2.0开源许可 -
模型权重对中小企业免费 -
可本地部署,数据安全可控
4. 性价比高
-
准确率超过GPT-4o -
本地运行,无需付费API -
4GB显存即可运行
5. 易用性强
pip install chandra-ocr一行命令安装 -
CLI、Web界面、Python API三种方式 -
文档完善,社区活跃
九、最佳实践与建议
基于实际使用经验,我总结了一些最佳实践:
1. 选择合适的后端
vLLM后端(推荐):
-
适合:生产环境、批量处理、高性能需求 -
优点:速度快(0.9s/页)、支持批处理 -
缺点:首次启动稍慢、需要GPU
HuggingFace后端:
-
适合:调试、小批量处理、无GPU环境 -
优点:启动快、易调试 -
缺点:速度慢(3-5s/页)
2. 文件预处理
为了获得最佳效果,建议预处理:
from PIL import Image
import cv2
import numpy as np
# 提升对比度
defenhance_contrast(image_path):
img = cv2.imread(image_path)
lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
l, a, b = cv2.split(lab)
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
l = clahe.apply(l)
enhanced = cv2.merge([l, a, b])
enhanced = cv2.cvtColor(enhanced, cv2.COLOR_LAB2BGR)
cv2.imwrite("enhanced_"+ image_path, enhanced)
# 去噪
defdenoise(image_path):
img = cv2.imread(image_path)
denoised = cv2.fastNlMeansDenoisingColored(img,None,10,10,7,21)
cv2.imwrite("denoised_"+ image_path, denoised)
# 自动旋转
defauto_rotate(image_path):
img = cv2.imread(image_path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150, apertureSize=3)
lines = cv2.HoughLines(edges,1, np.pi/180,100)
if lines isnotNone:
for rho, theta in lines[:1]:
angle = theta *180/ np.pi -90
ifabs(angle)>45:
angle =90- angle
M = cv2.getRotationMatrix2D((img.shape[1]/2, img.shape[0]/2), angle,1)
rotated = cv2.warpAffine(img, M,(img.shape[1], img.shape[0]))
cv2.imwrite("rotated_"+ image_path, rotated)
3. 输出后处理
根据需求进行后处理:
import re
# 清理冗余空白
defclean_whitespace(markdown):
# 合并多个空行
markdown = re.sub(r'\n{3,}','\n\n', markdown)
# 删除行尾空格
markdown = re.sub(r' +$','', markdown, flags=re.MULTILINE)
return markdown
# 提取特定信息
defextract_info(markdown):
# 提取邮箱
emails = re.findall(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}', markdown)
# 提取电话
phones = re.findall(r'\d{3,4}[-.\s]?\d{7,8}', markdown)
# 提取日期
dates = re.findall(r'\d{4}[-/年]\d{1,2}[-/月]\d{1,2}[日]?', markdown)
return{
"emails": emails,
"phones": phones,
"dates": dates
}
# 转换格式
defmd_to_html(markdown):
import markdown
html = markdown.markdown(markdown, extensions=['tables','fenced_code'])
return html
4. 错误恢复
建立错误恢复机制:
import logging
# 配置日志
logging.basicConfig(filename='ocr_errors.log', level=logging.ERROR)
defsafe_process(input_path, output_path):
try:
result = chandra.process(input_path)
result.save(output_path)
returnTrue
except Exception as e:
logging.error(f"处理失败: {input_path}, 错误: {str(e)}")
# 尝试备用方案
try:
result = chandra.process(input_path, method="hf")
result.save(output_path)
returnTrue
except Exception as e2:
logging.error(f"备用方案也失败: {input_path}, 错误: {str(e2)}")
returnFalse
# 批量处理
forfilein files:
ifnot safe_process(file, output_dir):
print(f"处理失败: {file}")
十、常见问题解答
Q1:Chandra OCR 2免费吗?
A:代码采用Apache 2.0许可,完全免费开源。模型权重使用修改版OpenRAIL-M许可,对于研究、个人使用和年收入200万美元以下的初创公司完全免费。更大的商业用途需要联系授权。
Q2:需要什么硬件配置?
A:最低配置4GB显存(如RTX 3060),推荐8-12GB显存。如果没有GPU,可以用CPU运行,但速度会慢10倍以上。内存建议16GB+,处理大PDF时更稳定。
Q3:支持哪些语言?
A:官方支持90+语言,包括中文(简繁)、英文、阿拉伯语、日语、韩语、法语、德语等。测试数据显示,中文识别准确率94.8%,英文95.2%,阿拉伯语68.4%,日语85.3%。
Q4:和GPT-4o Vision相比如何?
A:综合准确率Chandra OCR 2(85.9%)vs GPT-4o(69.9%),表格识别Chandra(88%)vs GPT-4o(70%),数学公式Chandra(80.3%)vs GPT-4o(74.5%)。Chandra在结构化输出和本地部署方面更有优势。
Q5:能处理手写体吗?
A:可以,手写体识别准确率90.8%。支持手写批注、手写签名、手写公式等。不过对于过于潦草的连笔字,准确率会有所下降。
Q6:处理速度如何?
A:使用RTX 3060 GPU,单页平均0.9秒;使用A100 GPU,单页约0.09秒;使用16核CPU,单页约1.2秒。批处理时,vLLM后端支持并发,速度会更快。
Q7:输出格式有哪些?
A:支持Markdown、HTML、JSON三种格式。Markdown适合文档编辑,HTML适合网页展示,JSON适合数据处理。每种格式都保留完整的布局信息。
Q8:如何集成到自己的应用?
A:提供了Python API,也支持OpenAI兼容的vLLM API。可以轻松集成到Python应用、Web服务或自动化流程中。
Q9:有Web界面吗?
A:有,使用chandra_app命令启动Streamlit Web界面。支持拖拽上传、实时预览、格式切换、一键导出等功能。
Q10:遇到问题怎么办?
A:可以查看GitHub Issues,加入Discord社区,或参考官方文档。大部分问题都有解决方案,常见问题包括CUDA版本不匹配、显存不足、PDF渲染错误等。

