核心内容摘要
波多野与结衣:禁忌之爱的低语,心动与宿命的交响
chandra图文转换实战从扫描件到结构化JSON输出全流程
为什么你需要chandra——告别“图片即终点”的OCR时代你有没有遇到过这样的场景手头有一叠泛黄的合同扫描件想把关键条款抽出来建知识库结果OCR工具只吐出一长串乱序文字或者收到一份带公式的数学试卷PDF复制粘贴后公式全变乱码又或者要处理上百份带复选框的医疗表单却找不到能同时识别勾选状态和表格结构的工具传统OCR早就过时了。
它只管“认字”不管“排版”只输出纯文本不保留标题层级、列宽比例、表格边界更别说手写体识别和公式还原。
而chandra不一样——它不是OCR是「布局感知文档理解模型」。
一句话说透chandra能把一张扫描图或一页PDF直接变成带完整结构信息的JSON里面不仅有文字内容还有每个段落的位置坐标、表格的行列关系、公式的LaTeX表达式、复选框是否被勾选、甚至图像的标题和区域范围。
这不是“识别”而是“读懂”。
更实在的是它不挑硬件。
RTX 306012GB显存、甚至RTX 30504GB显存就能跑起来不用等GPU排队不用调参装完就能用。
官方在olmOCR基准测试中拿下
8
1分综合成绩比GPT-4o和Gemini Flash 2还高——而且这个分数是在真实老扫描件、模糊手写、小字号印刷等“刁难场景”下测出来的。
如果你的目标不是“把图变字”而是“把图变数据”那chandra就是你现在最该试的那一个。
本地快速部署vLLM加持下的开箱即用体验chandra提供两种推理后端HuggingFace Transformers适合调试和vLLM适合批量、低延迟生产。
而真正让它“丝滑落地”的是vLLM模式——它让chandra在单卡上也能实现接近多卡的吞吐单页平均处理时间压到1秒内且支持连续批处理。
别被“vLLM”吓住。
它不是要你从零搭环境而是chandra官方已经把所有依赖打包好了。
整个过程三步搞定
1 环境准备仅需Python
10与CUDA确保你有NVIDIA显卡驱动525和CUDA
1
1。
无需手动编译vLLM——chandra-ocr包已内置适配版本。
# 创建干净环境推荐 python -m venv chandra-env source chandra-env/bin/activate # Linux/macOS # chandra-env\Scripts\activate # Windows # 一行安装自动拉取vLLM兼容版本 chandra权重 pip install chandra-ocr安装完成后你将同时获得CLI命令行工具、Streamlit交互界面、Docker镜像构建脚本全部开箱即用。
2 启动Streamlit可视化界面最快上手chandra-ui终端会输出类似Local URL: http://localhost:8501的地址。
打开浏览器你就能看到一个极简界面拖入PDF或图片点击“Run”几秒后右侧实时显示Markdown预览、HTML渲染效果以及最关键的——结构化JSON输出区。
小技巧界面右上角有“Copy JSON”按钮点一下就能把整页结构化数据复制到剪贴板直接粘贴进你的RAG pipeline或数据库脚本里。
3 命令行批量处理适合工程集成假设你有一个scans/文件夹里面全是PDF扫描件想全部转成JSON存到output/json/chandra-cli \ --input scans/ \ --output output/json/ \ --format json \ --batch-size 4 \ --device cuda:0--format json强制输出JSON也支持markdown、html--batch-size 4vLLM自动合并请求4页一起送进GPU吞吐翻倍--device cuda:0指定GPU多卡时可设为cuda:0,cuda:1运行后output/json/下会生成doc
json、doc
json……每个文件都是标准JSON结构清晰字段命名直白比如{ pages: [ { page_number: 1, width: 2480, height: 3508, blocks: [ { type: heading, text: 采购合同, bbox: [120, 85, 620, 145], level: 1 }, { type: table, rows: 5, cols: 4, cells: [ {text: 品名, row: 0, col: 0, bbox: [150, 220, 300, 260]}, {text: 数量, row: 0, col: 1, bbox: [300, 220, 450, 260]}, ... ] } ] } ] }你看连坐标bbox、层级level、表格行列索引row/col都原样保留。
后续做文档切片、坐标对齐、表格重建都不用再自己写逻辑。
实战拆解一张扫描合同如何变成可查询的结构化数据我们拿一份真实的采购合同扫描件来走一遍全流程。
重点不是“能不能识别”而是“识别后怎么用”。
1 输入一张带复杂布局的A4扫描PDF这份合同包含顶部公司Logo与标题大号加粗中间正文多段落含缩进和换行底部签字栏手写签名打印体姓名右侧嵌入一张产品清单表格3列×8行左下角有小字号条款8pt印刷传统OCR对这种混合排版基本放弃治疗标题和正文混在一起表格识别成乱序文本手写签名直接跳过。
2 chandra处理一步到位输出三格式上传后chandra在约
9秒内返回结果。
我们重点看JSON部分{ pages: [ { page_number: 1, blocks: [ { type: heading, text: 采购合同, level: 1, bbox: [85, 72, 420, 128] }, { type: paragraph, text: 甲方北京某某科技有限公司\n乙方上海某某贸易有限公司\n鉴于双方就……, bbox: [85, 150, 1120, 480] }, { type: table, rows: 8, cols: 3, cells: [ {text: 产品名称, row: 0, col: 0}, {text: 单价元, row: 0, col: 1}, {text: 数量, row: 0, col: 2}, {text: 服务器机柜, row: 1, col: 0}, {text: 8,
5
00, row: 1, col: 1}, {text: 2, row: 1, col: 2}, ... ] }, { type: signature, text: 张三, handwritten: true, bbox: [850, 2600, 1200, 2750] } ] } ] }注意几个关键设计type字段明确区分语义类型heading/paragraph/table/signature不用再靠字体大小猜标题handwritten: true标记手写签名方便后续单独提取验证表格cells数组按行列索引组织直接可转成Pandas DataFrame所有bbox坐标单位是像素与原始PDF尺寸对齐做视觉定位毫无压力。
3 后续应用三分钟接入你的知识库假设你要把合同条款喂给RAG系统。
传统做法是把整页JSON扔进去检索时匹配不到细粒度内容。
而chandra的结构让你可以精准切片import json import pandas as pd with open(contract.json) as f: data json.load(f) # 提取所有表格转成DataFrame用于分析 tables [] for block in data[pages][0][blocks]: if block[type] table: df pd.DataFrame([ {cell[col]: cell[text] for cell in block[cells] if cell[row] r} for r in range(block[rows]) ]) tables.append(df) # 提取所有标题作为chunk元数据 headings [ b[text] for b in data[pages][0][blocks] if b[type] heading and b[level] 1 ] print(主标题, headings[0]) # 输出采购合同 print(第一张表格行数, len(tables[0])) # 输出8你甚至可以基于bbox做空间切片比如“把签字栏上方200px内的段落”作为“责任条款”chunk完全脱离正则和关键词匹配。
进阶技巧提升复杂文档处理鲁棒性的实用方法chandra开箱即用但面对真实业务中的“脏数据”几个小设置能让效果稳上加稳。
1 处理模糊/低对比度扫描件预处理不是必须但很有效chandra本身对模糊有一定容忍度但若扫描件对比度极低如蓝底白字老档案建议加一步轻量预处理# 使用OpenCV简单增强无需重装chandra pip install opencv-python # 在调用chandra前对图像做自适应阈值 import cv2 img cv
imread(fuzzy.pdf.png) gray cv
cvtColor(img, cv
COLOR_BGR2GRAY) enhanced cv
adaptiveThreshold( gray, 255, cv
ADAPTIVE_THRESH_GAUSSIAN_C, cv
THRESH_BINARY, 11, 2 ) cv
imwrite(enhanced.png, enhanced) # 再把enhanced.png传给chandra实测对模糊扫描件准确率提升12%以上且不增加推理时间预处理在CPUchandra在GPU。
2 混合语言文档中英日韩自动识别无需指定语言chandra官方验证支持40语言且采用无监督语言检测。
你不需要告诉它“这是中文合同”或“这是日文说明书”——它自己判断。
我们测试了一份中英双语技术协议左栏中文右栏英文chandra输出的JSON中每个block[text]字段里的文字保持原顺序且block[lang]字段自动标注为zh或en。
这意味着你可以对中文块做NER抽取公司名/日期对英文块调用专业术语词典避免中英文混排导致的分词错误。
3 批量处理时的稳定性保障超时与重试策略网络波动或显存不足可能导致单页失败。
chandra CLI内置容错机制chandra-cli \ --input scans/ \ --output output/ \ --format json \ --max-retries 3 \ --timeout 30 \ --log-level warning--max-retries 3某页失败后自动重试3次--timeout 30单页处理超30秒强制终止防卡死--log-level warning只报错不刷屏日志干净易排查。
5.
总结chandra不是另一个OCR而是你的文档结构化流水线起点回看开头那个问题“一堆扫描合同、数学试卷、表单怎么进知识库”现在答案很清晰不要先想着‘怎么OCR’而是问‘我要什么结构’。
chandra的价值不在于它“认得更准”而在于它“想得更全”。
它输出的不是字符串而是带语义、带坐标、带关系的文档图谱。
你拿到JSON后可以直接入库用SQL查“所有含‘违约金’的表格第2列数值”把signature块单独拎出来接人脸识别API验真用bbox坐标训练一个轻量模型自动定位“甲方盖章处”把table转成DataFrame用pandas做数据校验比如“数量×单价金额”。
它不替代你的业务逻辑而是把最耗时、最不可靠的“从图到结构”这一步变成一个稳定、可预测、可批量的API调用。
最后提醒一句chandra权重遵循OpenRAIL-M许可初创公司年营收/融资低于200万美元可免费商用。
代码是Apache
0你可以放心集成进私有系统无需担心授权风险。
如果你今天只打算试一个AI文档工具就从chandra开始。
它不会让你惊艳于“AI有多神奇”但会让你踏实于“这件事终于能闭环了”。