我最近花时间将Chandra OCR集成到一个本地运行的文档处理流程中该流程在 NVIDIA A10G GPU 上运行用于扫描复杂表格和公式的手写实验报告。我发现了一些与众不同的东西一个模型不仅输出文本还输出结构化的 HTML包含边界框、布局标签、带有正确colspan和rowspan的表格、行内数学公式和复选框状态。我建立了一个处理扫描实验报告的流程包括合并单元格、手写注释、带有复选框的财务表格以及充满 LaTeX 方程的研究论文。传统的 OCR 工具如 Tesseract、PaddleOCR甚至 Google Vision将文档视为文本的集合。它们读取单词但不理解页面。本文将介绍所有内容Chandra 是什么、它如何工作、如何在自己的 GPU 上安装和运行以及如何从其输出重构干净的 Word 文档。1、什么是 Chandra OCRChandra是由 Datalab 开发的开源 OCR 模型于 2025 年底发布。它基于Qwen3-VL视觉语言模型构建并专门针对文档理解进行了微调。与基于流水线的 OCR 系统不同——后者将页面分割成块然后独立识别每个块中的文本——Chandra 使用全页解码它将整个页面视为视觉上下文一次生成结构化输出。结果是在 olmOCR 基准测试中得分83.1%的模型超过了 GPT-4o69.9%、Gemini Flash 263.8%、Mistral OCR72.0%甚至 dots.ocr79.1%。它目前是开源 OCR 模型中最先进的。输出格式是HTML而不是纯文本或 markdown。这是一个深思熟虑的设计选择HTML 以单一、可解析的表示形式捕获结构表格、列表、标题、行内格式粗体、斜体、上标、数学表达式和布局元数据边界框。关键特性全页布局理解Chandra 一次处理整个页面在多栏布局、侧边栏和复杂的学术论文中保持阅读顺序。带有边界框的 HTML 输出ocr_layout提示返回带有data-bbox和data-label属性的 HTMLdiv元素为您提供页面上每个块的确切位置及其内容。表格重建表格使用colspan和rowspan属性重建处理财务文件、实验报告和发票中的合并单元格这些完全破坏了其他 OCR 工具。手写支持医生笔记、填写的表格、手写作业Chandra 以高精度处理草书和打印体手写。数学和方程行内和块级数学公式呈现为包裹在math标签中的 KaTeX 兼容 LaTeX可直接在 Web 应用程序或进一步处理流程中使用。表单和复选框复选框和单选按钮状态input标签上的checked属性被正确识别实现自动表单处理。支持 40 多种语言多语言文档包括德语、法语、阿拉伯语、中文等都原生支持。两种推理模式HuggingFace本地通过transformers直接加载模型用于开发和测试vLLM 服务器部署为与 OpenAI 兼容的 API 服务器以实现生产吞吐量2、Chandra 可以处理的内容使用ocr_layout提示时Chandra 会标记它检测到的每个块。以下是可用的标签及其代表的内容手写— 医生笔记、填写的表格、作业。Chandra 能够读取草书和混乱的打印体这些会困扰传统的 OCR。表格— 保留结构包括合并单元格colspan/rowspan。适用于财务文件、发票和数据表格。数学— 呈现为 LaTeX 的行内和块级方程。处理教科书、练习册和研究论文。表单— 重建复选框、单选按钮及其值的表单字段。复杂布局— 多栏文档、报纸、带有图形和标题的教科书。每个块都带有[x0, y0, x1, y1]格式的data-bbox属性坐标归一化到范围 [0, 1000]。这使您可以将文本映射回原始页面上的确切位置 — 对于高亮显示、匿名化覆盖层或文档比较很有用。3、分步本地安装指南先决条件Ubuntu 20.04 或类似的 LinuxPython 3.10至少 22GB VRAM 的 NVIDIA GPUA10G、A100、H100用于完整的bfloat16推理CUDA 12.x 驱动程序关于 GPU 内存注意仅 Chandra 模型权重就占用约 16.6GB。在 22GB 的 A10G 上KV 缓存的可用空间有限。以下启动参数专门针对此约束进行了调整。第 1 步创建虚拟环境mkdir ~/CHANDRA-OCR cd ~/CHANDRA-OCR python3 -m venv chandra-ocr source chandra-ocr/bin/activate第 2 步安装 Chandra OCRpip install chandra-ocr对于 PDF 处理支持pip install pdf2image sudo apt-get install -y poppler-utils pip install python-docx beautifulsoup4Flash Attention官方文档建议 HuggingFace 模式使用flash-attn但安装经常在 C 编译期间冻结。跳过它。vLLM 使用自己的优化注意力内核不需要它们。第 3 步安装 vLLMpip install vllm第 4 步启动 vLLM 服务器在 22GB A10G 上使用这些确切的参数。关键约束是--max-model-len 4096模型权重使用 16.6GB只留给 KV 缓存约 5GB。每页 4096 个令牌对于大多数文档来说足够了。如果有足够的 GPU可以增加。--enforce-eager禁用 CUDA 图捕获启动时节省约 2.7GB--max-num-seqs 4限制采样器预热内存--gpu-memory-utilization 0.90为编码器缓存留出空间PYTORCH_ALLOC_CONFexpandable_segments:True \ vllm serve datalab-to/chandra \ --served-model-name chandra \ --port 8009 \ --max-model-len 4096 \ --gpu-memory-utilization 0.90 \ --max-num-seqs 4 \ --enforce-eager \ --dtype bfloat16第一次运行时模型总共约 17.5GB将从 HuggingFace 下载。这需要 5-15 分钟具体取决于您的网络。服务器将准备就绪。第 5 步配置客户端在工作目录中创建一个local.env文件。Chandra 库在启动时从此文件读取VLLM_API_BASEhttp://localhost:8009/v1 VLLM_MODEL_NAMEchandra MAX_OUTPUT_TOKENS3000为什么 MAX_OUTPUT_TOKENS3000使用--max-model-len 4096和每页图像约 500 个输入令牌最大可用输出令牌约为 3500。设置 3000 提供了安全缓冲。第 6 步验证服务器curl http://localhost:8009/health curl http://localhost:8009/v1/models4、在 PDF 上运行 OCR以下是完整的流程脚本用于处理 PDF 并将输出保存为每个文档的单个 HTML 文件import time from pathlib import Path from pdf2image import convert_from_path from chandra.model import InferenceManager from chandra.model.schema import BatchInputItem from html_to_docx import html_string_to_docx PDF_PATH documents/lab_report.pdf OUTPUT_DIR ./output Path(OUTPUT_DIR).mkdir(exist_okTrue) manager InferenceManager(methodvllm) images convert_from_path(PDF_PATH, dpi150) print(fPages: {len(images)}) start time.time() all_pages [] for i, image in enumerate(images): print(fProcessing page {i1}/{len(images)}...) batch [BatchInputItem(imageimage, prompt_typeocr_layout)] result manager.generate(batch)[0] all_pages.append(result.markdown) # Save combined HTML input_stem Path(PDF_PATH).stem html_file Path(OUTPUT_DIR) / f{input_stem}.html html_file.write_text(\n\n.join(all_pages)) # Convert to DOCX docx_path Path(OUTPUT_DIR) / f{input_stem}.docx html_string_to_docx(\n\n.join(all_pages), str(docx_path)) print(fDone in {time.time() - start:.1f}s → {docx_path})点击这里查看完整代码。5、结束语Chandra OCR 代表了开源文档处理能力的一个有意义的转变。通过将 OCR 视为视觉语言任务并输出结构化 HTML 而不是原始文本它为开发人员提供了一个基础这是传统的基于流水线的工具根本无法比拟的 — 准确的表格、保留的布局、行内数学和复选框状态所有这些都在单个模型传递中完成。原文链接Chandra OCR 实测 - 汇智网