Surya:一个 650M 参数的文档 OCR 与解析工具

Datalab 团队开源的 Surya,在 GitHub 上获得了超过 2 万个 Star:

正文顶部截图

README区域截图

Surya 是一个面向文档场景的 OCR 模型,参数量为 650M。它把布局分析、文字识别和表格识别整合到一个 VLM 中,通过统一的接口完成多项任务。

在 olmOCR-bench 基准测试中,Surya 得分 83.3%,是 3B 参数以下表现最好的模型。它在 91 种语言的内部基准测试中总体通过率为 87.2%,其中 38 种语言得分超过 90%。英语 92.3%,意大利语 93.0%,西班牙语 90.7%,中文 82.5%。

Surya 的主要功能包括:

OCR 文字识别:支持全页 OCR 和按块 OCR 两种模式,输出包含文字内容、位置坐标、置信度和布局标签。数学公式会以内嵌 HTML 标签的形式返回,兼容 KaTeX。

布局分析:检测页面中的文本块、图片、表格、标题、页眉页脚等元素,并给出阅读顺序。支持 17 种布局标签,包括 Caption、Footnote、Equation、ListGroup、Table 等。

表格识别:识别表格的行、列结构和单元格位置,可输出简单模式或完整 HTML 表格,后者支持跨行跨列的单元格。

文本行检测:单独的小模型,基于 EfficientViT segformer 修改而来,用于检测文档中的文本行边界框。

性能方面,在 RTX 5090 上使用 vllm 后端,并发 128 时 throughput 为 5.35 页/秒。CPU 和 Apple Silicon 上可以通过 llama.cpp 运行,Metal 后端约 0.108 页/秒。

Surya 支持 NVIDIA GPU 和 CPU 两种推理后端。GPU 端使用 vllm,需要 Docker 和 NVIDIA Container Toolkit。CPU 和 macOS 端使用 llama.cpp 的 llama-server,可通过 brew install llama.cpp 安装。

安装命令为:

pip install surya-ocr

Surya 提供了完整的 Python API。初始化 SuryaInferenceManager 后会自动启动推理服务,然后可以调用 RecognitionPredictor、LayoutPredictor、TableRecPredictor 等模块:

from surya.inference import SuryaInferenceManager
from surya.recognition import RecognitionPredictor

manager = SuryaInferenceManager()
rec = RecognitionPredictor(manager)
predictions = rec([image])

CLI 工具也提供了多个命令:

surya_ocr DATA_PATH        OCR 识别
surya_layout DATA_PATH     布局分析
surya_table DATA_PATH      表格识别
surya_detect DATA_PATH     文本行检测

默认每次命令会启动推理服务并在结束后关闭。加上 --keep_server 参数可以让服务保持运行,后续命令直接复用。也可以设置环境变量 SURYA_INFERENCE_KEEP_ALIVE=1 让保持运行成为默认行为。

还有一个基于 Streamlit 的交互式界面,运行 surya_gui 即可在浏览器中尝试。

输出格式方面,OCR 结果以 JSON 返回,包含 blocks 列表,每个块有 label、html、polygon、bbox、confidence 等字段。布局分析结果同样返回 JSON,包含 bboxes 列表和 reading_order。表格识别返回 rows、cols 和 cells 的结构信息。

Surya 的代码采用 Apache 2.0 协议开源。模型权重使用修改后的 OpenRAIL-M 协议,研究、个人和年收入低于 500 万美元的初创企业可免费使用。更广范围的商业授权需要联系 Datalab。

L-M 协议,研究、个人和年收入低于 500 万美元的初创企业可免费使用。更广范围的商业授权需要联系 Datalab。

Logo

免费领 150 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐