> ## Content Index
> Fetch the complete content index at: https://www.hubwiz.com/blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# Chandra OCR 实测
- URL: https://www.hubwiz.com/blog/chandra-ocr-field-test/
- Published: 2026-03-04T13:36:26.000Z
- Updated: 2026-03-04T13:50:51.000Z
- Description: 本文将介绍Chandra 是什么、它如何工作、如何在自己的 GPU 上安装和运行，以及如何从其输出重构干净的 Word 文档。
- Author: admin
- Tags: MODEL-ZOO, CHANDRA OCR, #Import 2026-10-14 14:41

我最近花时间将 **Chandra OCR** 集成到一个本地运行的文档处理流程中，该流程在 NVIDIA A10G GPU 上运行，用于扫描复杂表格和公式的手写实验报告。我发现了一些与众不同的东西：一个模型不仅输出文本，还输出结构化的 HTML，包含**边界框、布局标签、带有正确 `colspan` 和 `rowspan` 的表格**、行内**数学公式**和**复选框**状态。我建立了一个处理扫描实验报告的流程，包括合并单元格、手写注释、带有复选框的财务表格以及充满 LaTeX 方程的研究论文。传统的 OCR 工具，如 Tesseract、PaddleOCR，甚至 Google Vision，将文档视为文本的集合。它们读取单词，但不"理解"页面。

本文将介绍所有内容：Chandra 是什么、它如何工作、如何在自己的 GPU 上安装和运行，以及如何从其输出重构干净的 Word 文档。

## 1、什么是 Chandra OCR？

**Chandra** 是由 [Datalab](https://www.datalab.to/?ref=hubwiz.com) 开发的开源 OCR 模型，于 2025 年底发布。它基于 **Qwen3-VL**（视觉语言模型）构建，并专门针对文档理解进行了微调。与基于流水线的 OCR 系统不同——后者将页面分割成块，然后独立识别每个块中的文本——Chandra 使用**全页解码**；它将整个页面视为视觉上下文，一次生成结构化输出。

结果是在 olmOCR 基准测试中得分 **83.1%** 的模型，超过了 GPT-4o（69.9%）、Gemini Flash 2（63.8%）、Mistral OCR（72.0%），甚至 dots.ocr（79.1%）。它目前是开源 OCR 模型中最先进的。

输出格式是 **HTML**，而不是纯文本或 markdown。这是一个深思熟虑的设计选择：HTML 以单一、可解析的表示形式捕获结构（表格、列表、标题）、行内格式（粗体、斜体、上标）、数学表达式和布局元数据（边界框）。

关键特性：

- **全页布局理解：** Chandra 一次处理整个页面，在多栏布局、侧边栏和复杂的学术论文中保持阅读顺序。
- **带有边界框的 HTML 输出：** `ocr_layout` 提示返回带有 `data-bbox` 和 `data-label` 属性的 HTML `<div>` 元素，为您提供页面上每个块的确切位置及其内容。
- **表格重建：** 表格使用 `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 的行内和块级方程。处理教科书、练习册和研究论文。

**表单** — 重建复选框、单选按钮及其值的表单字段。

**复杂布局** — 多栏文档、报纸、带有图形和标题的教科书。

![](https://www.hubwiz.com/blog/content/images/2026/03/image-16.png)

每个块都带有 `[x0, y0, x1, y1]` 格式的 `data-bbox` 属性，坐标归一化到范围 \[0, 1000\]。这使您可以将文本映射回原始页面上的确切位置 — 对于高亮显示、匿名化覆盖层或文档比较很有用。

## 3、分步本地安装指南

先决条件：

- Ubuntu 20.04+ 或类似的 Linux
- Python 3.10+
- 至少 22GB VRAM 的 NVIDIA GPU（A10G、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 OCR

```
pip install chandra-ocr

```

对于 PDF 处理支持：

```
pip install pdf2image
sudo apt-get install -y poppler-utils
pip install python-docx beautifulsoup4

```

> **Flash Attention：** 官方文档建议 HuggingFace 模式使用 `flash-attn`，但安装经常在 C++ 编译期间冻结。跳过它。vLLM 使用自己的优化注意力内核，不需要它们。

#### 第 3 步：安装 vLLM

```
pip 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_CONF=expandable_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_BASE=http://localhost:8009/v1
VLLM_MODEL_NAME=chandra
MAX_OUTPUT_TOKENS=3000

```

> **为什么 MAX\_OUTPUT\_TOKENS=3000？** 使用 `--max-model-len 4096` 和每页图像约 500 个输入令牌，最大可用输出令牌约为 3500。设置 3000 提供了安全缓冲。

#### 第 6 步：验证服务器

```
curl http://localhost:8009/health
curl http://localhost:8009/v1/models

```

## 4、在 PDF 上运行 OCR

以下是完整的流程脚本，用于处理 PDF 并将输出保存为每个文档的单个 HTML 文件：

```python
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_ok=True)

manager = InferenceManager(method="vllm")
images = convert_from_path(PDF_PATH, dpi=150)
print(f"Pages: {len(images)}")

start = time.time()
all_pages = []

for i, image in enumerate(images):
    print(f"Processing page {i+1}/{len(images)}...")
    batch = [BatchInputItem(image=image, prompt_type="ocr_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(f"Done in {time.time() - start:.1f}s → {docx_path}")

```

点击[这里](https://github.com/mdmonsurali/Optical-character-recognition-OCR-/tree/main/ChandraOCR?ref=hubwiz.com)查看完整代码。

## 5、结束语

Chandra OCR 代表了开源文档处理能力的一个有意义的转变。通过将 OCR 视为视觉语言任务并输出结构化 HTML 而不是原始文本，它为开发人员提供了一个基础，这是传统的基于流水线的工具根本无法比拟的 — 准确的表格、保留的布局、行内数学和复选框状态，所有这些都在单个模型传递中完成。

---

原文链接: [I Tested Chandra OCR: Converting Handwritten & Scanned Documents into Structured, Layout-Aware HTML](https://medium.com/data-science-collective/i-tested-chandra-ocr-converting-handwritten-scanned-documents-into-structured-layout-aware-html-1047b8711c54?ref=hubwiz.com)

汇智网翻译整理，转载请标明出处