OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  Surya — 文档 OCR、版面分析与阅读顺序识别工具

Surya — 文档 OCR、版面分析与阅读顺序识别工具

 
  anthem ·  2026-02-23 17:40:03 · 6 次点击  · 0 条评论  

Surya

Surya 是一个文档 OCR 工具包,具备以下功能:

  • 支持 90 多种语言的 OCR,其性能基准测试优于云服务
  • 支持任何语言的文本行级检测
  • 布局分析(表格、图像、页眉等检测)
  • 阅读顺序检测
  • 表格识别(检测行/列)
  • LaTeX OCR

它适用于多种类型的文档(更多详情请参阅使用说明基准测试)。

如需使用我们的托管 API 或本地部署的文档智能解决方案,请查看我们的平台

文本检测 OCR
布局分析 阅读顺序
表格识别 LaTeX OCR

Surya 以拥有全视之眼的印度太阳神命名。

社区

我们主要在 Discord 讨论未来的开发计划。

示例

名称 检测 OCR 布局 顺序 表格识别
日语 图片 图片 图片 图片 图片
中文 图片 图片 图片 图片
印地语 图片 图片 图片 图片
阿拉伯语 图片 图片 图片 图片
中文 + 印地语 图片 图片 图片 图片
演示文稿 图片 图片 图片 图片 图片
科学论文 图片 图片 图片 图片 图片
扫描文档 图片 图片 图片 图片 图片
纽约时报 图片 图片 图片 图片
扫描表单 图片 图片 图片 图片 图片
教科书 图片 图片 图片 图片

托管 API

我们为所有 Surya 模型提供了托管 API,可访问此处

  • 支持 PDF、图像、Word 文档和 PowerPoint 文件
  • 速度稳定,无延迟峰值
  • 高可靠性和正常运行时间

商业使用

我们的模型权重采用修改后的 AI Pubs Open Rail-M 许可证(研究、个人使用以及融资/收入低于 200 万美元的初创公司可免费使用),我们的代码采用 GPL 许可证。如需更广泛的商业许可或移除 GPL 要求,请访问我们的定价页面

安装

你需要 Python 3.10+ 和 PyTorch。如果你不使用 Mac 或 GPU 机器,可能需要先安装 CPU 版本的 torch。更多详情请参阅此处

使用以下命令安装:

pip install surya-ocr

模型权重将在首次运行 Surya 时自动下载。

使用说明

  • 检查 surya/settings.py 中的设置。你可以使用环境变量覆盖任何设置。
  • 你的 torch 设备将被自动检测,但你可以覆盖它。例如:TORCH_DEVICE=cuda

交互式应用

我们包含了一个 Streamlit 应用,可以让你在图像或 PDF 文件上交互式地尝试 Surya。使用以下命令运行:

pip install streamlit pdftext
surya_gui

OCR(文本识别)

此命令将输出一个包含检测到的文本和边界框的 JSON 文件:

surya_ocr DATA_PATH
  • DATA_PATH 可以是图像、PDF 或图像/PDF 文件夹
  • --task_name 将指定用于预测行的任务。默认是 ocr_with_boxes,它会格式化文本并提供边界框。如果效果不佳,可以尝试 ocr_without_boxes,它可能提供更好的性能但没有边界框。对于公式和段落等块,可以尝试 block_without_boxes
  • --images 将保存页面和检测到的文本行的图像(可选)
  • --output_dir 指定保存结果的目录,而不是默认目录
  • --page_range 指定要处理的 PDF 页面范围,格式可以是单个数字、逗号分隔的列表、范围或逗号分隔的范围 - 例如:0,5-10,20
  • --disable_math - 默认情况下,Surya 会识别文本中的数学公式。这可能导致误报 - 你可以使用此标志禁用它。

results.json 文件将包含一个 JSON 字典,其中键是去除扩展名的输入文件名。每个值将是一个字典列表,对应输入文档的每一页。每个页面字典包含:

  • text_lines - 每行检测到的文本和边界框
    • text - 行中的文本
    • confidence - 模型对检测文本的置信度(0-1)
    • polygon - 文本行的多边形坐标,格式为 (x1, y1), (x2, y2), (x3, y3), (x4, y4)。点按顺时针顺序从左上角开始。
    • bbox - 文本行的轴对齐矩形,格式为 (x1, y1, x2, y2)(x1, y1) 是左上角,(x2, y2) 是右下角。
    • chars - 行中的单个字符
      • text - 字符的文本
      • bbox - 字符边界框(格式同行边界框)
      • polygon - 字符多边形(格式同行多边形)
      • confidence - 模型对检测字符的置信度(0-1)
      • bbox_valid - 如果字符是特殊标记或数学符号,边界框可能无效
    • words - 行中的单词(从字符计算得出)
      • text - 单词的文本
      • bbox - 单词边界框(格式同行边界框)
      • polygon - 单词多边形(格式同行多边形)
      • confidence - 平均字符置信度
      • bbox_valid - 如果单词是特殊标记或数学符号,边界框可能无效
  • page - 文件中的页码
  • image_bbox - 图像的边界框,格式为 (x1, y1, x2, y2)(x1, y1) 是左上角,(x2, y2) 是右下角。所有行边界框都将包含在此边界框内。

性能提示

正确设置 RECOGNITION_BATCH_SIZE 环境变量在使用 GPU 时会带来很大差异。每个批次项将使用 40MB 的 VRAM,因此可以实现非常高的批次大小。默认批次大小为 512,将使用约 20GB 的 VRAM。根据你的 CPU 核心数,也可能有所帮助 - 默认的 CPU 批次大小是 32

通过 Python 使用

from PIL import Image
from surya.foundation import FoundationPredictor
from surya.recognition import RecognitionPredictor
from surya.detection import DetectionPredictor

image = Image.open(IMAGE_PATH)
foundation_predictor = FoundationPredictor()
recognition_predictor = RecognitionPredictor(foundation_predictor)
detection_predictor = DetectionPredictor()

predictions = recognition_predictor([image], det_predictor=detection_predictor)

文本行检测

此命令将输出一个包含检测到的边界框的 JSON 文件。

surya_detect DATA_PATH
  • DATA_PATH 可以是图像、PDF 或图像/PDF 文件夹
  • --images 将保存页面和检测到的文本行的图像(可选)
  • --output_dir 指定保存结果的目录,而不是默认目录
  • --page_range 指定要处理的 PDF 页面范围,格式可以是单个数字、逗号分隔的列表、范围或逗号分隔的范围 - 例如:0,5-10,20

results.json 文件将包含一个 JSON 字典,其中键是去除扩展名的输入文件名。每个值将是一个字典列表,对应输入文档的每一页。每个页面字典包含:

  • bboxes - 检测到的文本边界框
    • bbox - 文本行的轴对齐矩形,格式为 (x1, y1, x2, y2)(x1, y1) 是左上角,(x2, y2) 是右下角。
    • polygon - 文本行的多边形坐标,格式为 (x1, y1), (x2, y2), (x3, y3), (x4, y4)。点按顺时针顺序从左上角开始。
    • confidence - 模型对检测文本的置信度(0-1)
  • vertical_lines - 文档中检测到的垂直线
    • bbox - 轴对齐的线坐标。
  • page - 文件中的页码
  • image_bbox - 图像的边界框,格式为 (x1, y1, x2, y2)(x1, y1) 是左上角,(x2, y2) 是右下角。所有行边界框都将包含在此边界框内。

性能提示

正确设置 DETECTOR_BATCH_SIZE 环境变量在使用 GPU 时会带来很大差异。每个批次项将使用 440MB 的 VRAM,因此可以实现非常高的批次大小。默认批次大小为 36,将使用约 16GB 的 VRAM。根据你的 CPU 核心数,也可能有所帮助 - 默认的 CPU 批次大小是 6

通过 Python 使用

from PIL import Image
from surya.detection import DetectionPredictor

image = Image.open(IMAGE_PATH)
det_predictor = DetectionPredictor()

# predictions 是一个字典列表,每个图像对应一个字典
predictions = det_predictor([image])

布局分析与阅读顺序

此命令将输出一个包含检测到的布局和阅读顺序的 JSON 文件。

surya_layout DATA_PATH
  • DATA_PATH 可以是图像、PDF 或图像/PDF 文件夹
  • --images 将保存页面和检测到的文本行的图像(可选)
  • --output_dir 指定保存结果的目录,而不是默认目录
  • --page_range 指定要处理的 PDF 页面范围,格式可以是单个数字、逗号分隔的列表、范围或逗号分隔的范围 - 例如:0,5-10,20

results.json 文件将包含一个 JSON 字典,其中键是去除扩展名的输入文件名。每个值将是一个字典列表,对应输入文档的每一页。每个页面字典包含:

  • bboxes - 检测到的文本边界框
    • bbox - 文本行的轴对齐矩形,格式为 (x1, y1, x2, y2)(x1, y1) 是左上角,(x2, y2) 是右下角。
    • polygon - 文本行的多边形坐标,格式为 (x1, y1), (x2, y2), (x3, y3), (x4, y4)。点按顺时针顺序从左上角开始。
    • position - 框的阅读顺序。
    • label - 边界框的标签。可选值包括:Caption, Footnote, Formula, List-item, Page-footer, Page-header, Picture, Figure, Section-header, Table, Form, Table-of-contents, Handwriting, Text, Text-inline-math
    • top_k - 该框的其他潜在标签的 top-k 列表。一个以标签为键、置信度为值的字典。
  • page - 文件中的页码
  • image_bbox - 图像的边界框,格式为 (x1, y1, x2, y2)(x1, y1) 是左上角,(x2, y2) 是右下角。所有行边界框都将包含在此边界框内。

性能提示

正确设置 LAYOUT_BATCH_SIZE 环境变量在使用 GPU 时会带来很大差异。每个批次项将使用 220MB 的 VRAM,因此可以实现非常高的批次大小。默认批次大小为 32,将使用约 7GB 的 VRAM。根据你的 CPU 核心数,也可能有所帮助 - 默认的 CPU 批次大小是 4

通过 Python 使用

from PIL import Image
from surya.foundation import FoundationPredictor
from surya.layout import LayoutPredictor
from surya.settings import settings

image = Image.open(IMAGE_PATH)
layout_predictor = LayoutPredictor(FoundationPredictor(checkpoint=settings.LAYOUT_MODEL_CHECKPOINT))

# layout_predictions 是一个字典列表,每个图像对应一个字典
layout_predictions = layout_predictor([image])

表格识别

此命令将输出一个 JSON 文件,其中包含检测到的表格单元格、行/列 ID 以及行/列边界框。如果你想获取单元格位置和文本,并进行良好的格式化,请查看 marker 仓库。你可以使用 TableConverter 来检测和提取图像和 PDF 中的表格。它支持 JSON(带边界框)、Markdown 和 HTML 输出。

surya_table DATA_PATH
  • DATA_PATH 可以是图像、PDF 或图像/PDF 文件夹
  • --images 将保存页面和检测到的表格单元格 + 行和列的图像(可选)
  • --output_dir 指定保存结果的目录,而不是默认目录
  • --page_range 指定要处理的 PDF 页面范围,格式可以是单个数字、逗号分隔的列表、范围或逗号分隔的范围 - 例如:0,5-10,20
  • --detect_boxes 指定是否应检测单元格。默认情况下,它们是从 PDF 中提取的,但这并不总是可行。
  • --skip_table_detection 告诉表格识别不要先检测表格。如果你的图像已经裁剪到表格区域,请使用此选项。

results.json 文件将包含一个 JSON 字典,其中键是去除扩展名的输入文件名。每个值将是一个字典列表,对应输入文档的每一页。每个页面字典包含:

  • rows - 检测到的表格行
    • bbox - 表格行的边界框
    • row_id - 行的 ID
    • is_header - 是否为标题行。
  • cols - 检测到的表格列
    • bbox - 表格列的边界框
    • col_id - 列的 ID
    • is_header - 是否为标题列
  • cells - 检测到的表格单元格
    • bbox - 文本行的轴对齐矩形,格式为 (x1, y1, x2, y2)(x1, y1) 是左上角,(x2, y2) 是右下角。
    • text - 如果可以从 PDF 中提取文本,
6 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私政策 ·  服务条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 29 ms
Developed with Cursor