Chandra开源OCR保姆级教程:支持表格/公式/手写,输出HTML+JSON
1. 为什么你需要Chandra——不是所有OCR都叫“布局感知”
你有没有遇到过这样的场景:
- 扫描的数学试卷里有大量手写批注和LaTeX公式,传统OCR要么漏掉公式,要么把上下标全打乱;
- 一份PDF合同里嵌着三栏排版+复选框+表格,导出后文字堆成一团,根本没法直接进知识库;
- 用GPT-4o或Gemini Flash识别一页带公式的论文,结果公式被转成乱码文字,表格变成错行文本。
Chandra不是又一个“把图片变文字”的OCR。它是2025年10月由Datalab.to开源的布局感知OCR模型——名字里的“Chandra”(梵语意为“明亮、清晰”)恰如其分:它不只认字,更懂页面结构。
一句话说清它的不可替代性:
它能把一张扫描图/PDF,原样还原成带层级、带坐标、带语义的HTML+JSON+Markdown三件套,表格不散、公式不崩、手写不丢、复选框可交互。
官方在olmOCR基准测试中拿下83.1综合分(±0.9),什么概念?比GPT-4o和Gemini Flash 2都高。更关键的是细分项:
- 表格识别:88.0分(第一)
- 老扫描数学题:80.3分(第一)
- 长段小字号印刷体:92.3分(第一)
这意味着——你不用再手动调整表格边框、不用重敲公式、不用猜手写批注在哪一栏。它输出的不是“文字流”,而是可直接用于RAG构建、网页渲染、文档比对的结构化数据。
而且它真能跑在消费级显卡上:RTX 3060(12GB)、RTX 4070(12GB)、甚至RTX 3090(24GB)都能稳稳撑住。4GB显存?也能跑,只是单页处理时间从1秒拉到3秒左右,但功能完整不打折。
2. 本地安装与开箱即用:pip一条命令,三分钟启动
Chandra的设计哲学是“零配置优先”。它不强迫你装CUDA、编译依赖、调参优化。你只需要一台装好Python 3.9+和NVIDIA驱动的Linux或Windows机器(WSL2推荐),就能完成全部部署。
2.1 基础环境准备(5分钟搞定)
先确认你的GPU可用:
nvidia-smi # 应看到驱动版本 ≥535,CUDA Version ≥12.1然后创建干净虚拟环境(推荐):
python -m venv chandra-env source chandra-env/bin/activate # Linux/macOS # chandra-env\Scripts\activate # Windows2.2 一键安装chandra-ocr(核心步骤)
执行这一条命令:
pip install chandra-ocr它会自动安装:
chandra-ocr主包(含CLI工具、Streamlit前端、默认推理后端)transformers、torch、Pillow等基础依赖- 兼容CUDA 12.x的PyTorch(若检测到NVIDIA GPU)
- 自带轻量级推理引擎(基于ONNX Runtime优化,无需vLLM)
安装完成后,立刻验证:
chandra --version # 输出类似:chandra-ocr 0.3.2 (layout-aware OCR)2.3 三种使用方式,任选其一
方式一:命令行快速处理(适合批量)
# 处理单张图片,输出同名.md/.html/.json chandra input.jpg # 批量处理整个文件夹(支持jpg/png/pdf) chandra ./scans/ --output ./output/ # 指定输出格式(默认三者全出) chandra doc.pdf --format html,json方式二:Streamlit交互界面(适合调试与预览)
chandra-ui # 自动打开 http://localhost:8501 # 拖入图片/PDF → 点击“Run” → 实时查看渲染效果+结构树+坐标框方式三:Docker镜像(适合生产部署)
docker run -p 8501:8501 -v $(pwd)/data:/app/data \ ghcr.io/datalab-to/chandra-ocr:latest注:Docker镜像已预装vLLM后端,支持多GPU并行,单页8k token平均耗时1秒(A100×2实测)
2.4 关于vLLM后端:不是必须,但强烈建议升级
上面提到的“基础安装”用的是内置ONNX引擎,够用但非最强。如果你有2张及以上GPU,想压榨极限性能,可以手动启用vLLM:
# 卸载旧版(可选) pip uninstall chandra-ocr # 安装vLLM增强版 pip install chandra-ocr[vllm] # 启动vLLM服务(需先启动vLLM server) vllm-server --model datalab-to/chandra-ocr-base --tensor-parallel-size 2然后CLI自动切换至vLLM后端:
chandra test.pdf --backend vllm注意:“两张卡,一张卡起不来”是真实限制——vLLM模式下,Chandra的ViT-Encoder需跨GPU切分,单卡会报OOM。但普通ONNX模式完全无此限制,RTX 3060单卡即可流畅运行。
3. 实战演示:从扫描试卷到可编辑HTML,一步到位
我们用一张真实的高中数学试卷扫描件(含手写解题、LaTeX公式、三栏排版、表格评分栏)来走一遍全流程。
3.1 输入文件准备
假设你有一张名为math_exam_scan.jpg的图片,尺寸2480×3508(A4扫描分辨率300dpi),包含:
- 顶部标题“2025年高三数学模拟卷”
- 中间三栏排版的填空题与解答题
- 右下角手写批注“步骤完整,+2分”
- 第二题旁嵌入LaTeX公式:$$\int_0^{\pi} \sin x , dx = 2$$
- 末尾表格:题号|得分|评语(三列)
3.2 执行识别命令
chandra math_exam_scan.jpg --output ./result/几秒后,生成三个文件:
math_exam_scan.mdmath_exam_scan.htmlmath_exam_scan.json
3.3 查看HTML输出:所见即所得的排版还原
打开math_exam_scan.html,你会看到:
- 标题
<h1>2025年高三数学模拟卷</h1>自动识别为一级标题 - 三栏内容被包裹在
<div class="column">{ "pages": [ { "page_num": 0, "width": 2480, "height": 3508, "blocks": [ { "type": "title", "text": "2025年高三数学模拟卷", "bbox": [50, 30, 1200, 120], "level": 1 }, { "type": "formula", "latex": "\\int_0^{\\pi} \\sin x \\, dx = 2", "bbox": [1320, 1450, 1890, 1520], "confidence": 0.96 }, { "type": "table", "rows": 4, "cols": 3, "cells": [ {"row": 0, "col": 0, "text": "题号", "bbox": [400, 2800, 520, 2840]}, {"row": 0, "col": 1, "text": "得分", "bbox": [520, 2800, 640, 2840]}, {"row": 1, "col": 0, "text": "第2题", "bbox": [400, 2840, 520, 2880]}, {"row": 1, "col": 1, "text": "6", "bbox": [520, 2840, 560, 2880]}, {"row": 1, "col": 2, "text": "步骤完整", "bbox": [560, 2840, 720, 2880]} ] } ] } ] }这个JSON可以直接喂给:
- RAG系统(按
bbox做区域检索,避免整页语义漂移) - 自动化评分脚本(提取
type: "formula"+confidence > 0.9校验公式正确性) - 文档比对工具(对比两份JSON的
blocks结构差异)
3.5 Markdown输出:工程师最爱的轻量格式
math_exam_scan.md更简洁:# 2025年高三数学模拟卷 ## 第二题 求下列定积分的值: $$\int_0^{\pi} \sin x \, dx = 2$$ > **手写批注**:步骤完整,+2分 | 题号 | 得分 | 评语 | |------|------|----------| | 第2题 | 6 | 步骤完整 | | 第5题 | 4 | 计算有误 |注意:所有公式、表格、引用块都符合标准Markdown语法,可直接粘贴进Obsidian、Typora、Notion等工具。
4. 进阶技巧与避坑指南:让Chandra真正为你所用
Chandra开箱即用,但要发挥最大价值,这几点经验值得记牢:
4.1 输入质量决定上限:三类文件怎么预处理?
文件类型 推荐预处理 原因说明 老扫描PDF(模糊/倾斜) 用 pdf2image转PNG +opencv做透视矫正Chandra对倾斜容忍度约±5°,超限会导致表格列错位 手机拍摄文档(阴影/反光) 用 unpaper去阴影 +img2pdf转单页PDF直接传JPG易受光照干扰,PDF封装更稳定 多页PDF(合同/报告) pdftk拆分单页 + 并行处理Chandra单次只处理一页,多页需外部调度 示例:自动清理手机拍的合同
# 安装工具 sudo apt install unpaper pdftk # 清理并转单页PDF unpaper input.pdf cleaned.pdf pdftk cleaned.pdf burst output page_%03d.pdf # 并行识别(4核) find . -name "page_*.pdf" | xargs -P 4 -I {} chandra {}4.2 输出定制:如何只取你需要的部分?
默认三格式全出,但常有精简需求:
- 只要HTML(嵌入网页):
chandra doc.pdf --format html --no-md --no-json - 只要JSON(供程序解析):
chandra doc.pdf --format json --no-md --no-html - 自定义HTML模板:新建
my_template.html,用{{title}}{{blocks}}占位,再执行:chandra doc.pdf --template my_template.html
4.3 中文场景特别提示
Chandra对中文支持极佳,但仍有两点注意:
- 字体缺失问题:HTML中中文显示为方块?在HTML头部加:
<style>body { font-family: "Noto Sans CJK SC", "Microsoft YaHei", sans-serif; }</style> - 手写体识别增强:添加
--handwriting-threshold 0.7(默认0.5),提升手写召回率(代价是少量误识印刷体)
4.4 性能调优:平衡速度与精度
场景 推荐参数 效果 快速预览(草稿) --max-tokens 2048 --batch-size 1速度↑40%,精度↓2% 精确合同(法律文书) --max-tokens 8192 --batch-size 4 --reprocess多遍校验,表格精度↑5% 显存紧张(<8GB) --quantize int4模型体积↓60%,速度↑25%,精度↓1.2% 5. 总结:Chandra不是OCR工具,而是你的文档理解助手
回看开头那个问题:“手里一堆扫描合同、数学试卷、表单,要直接变Markdown进知识库,用RTX 3060拉chandra-ocr镜像即可。”——这句话现在你应该完全理解了。
Chandra的价值,不在“识别准确率”这个单一数字,而在于它把OCR从字符识别任务,升级为文档理解任务:
- 它输出的不是字符串,而是带空间坐标的DOM树;
- 它处理的不是像素,而是标题、段落、公式、表格、手写体这些语义单元;
- 它服务的不是“复制粘贴”,而是RAG构建、自动化审核、无障碍阅读、多模态检索。
你不需要成为OCR专家,也不用调参炼丹。
pip install chandra-ocr之后,那张积灰的扫描件、那份难啃的PDF论文、那叠待归档的合同,就真的只差一次回车。下一步,你可以:
用Streamlit界面试跑自己的第一张图
把chandra命令集成进PDF下载脚本,实现自动归档
将JSON输出接入LangChain,构建专属文档问答机器人技术的意义,从来不是炫技,而是让复杂变简单,让不可能变日常。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
- RAG系统(按