项目简介
Surya 是一个文档 OCR 工具包,它具有以下功能:
-
支持 90 多种语言的 OCR,其基准测试优于云服务
-
-
-
它适用于一系列文档(有关更多详细信息,请参阅用法和基准)。
Detection
|
OCR
|
|
|
Layout
|
Reading Order 阅读顺序
|
|
|
苏里亚(Surya)以具有普遍视野的印度教太阳神命名。
商业用途
我希望 Surya 能够尽可能广泛地使用,同时仍然资助我的开发/培训成本。研
究和个人使用总是可以的,但商业用途有一些限制。
模型的权重已获得许可 cc-by-nc-sa-4.0 ,但对于最近 12 个月内总收入低于 500 万美元且终生风险投资/天使融资低于 500 万美元的任何组织,我将放弃该权重。如果您想删除 GPL 许可证要求(双重许可证)和/或在收入限制之上使用商业权重,请查看此处的选项。
安装
您需要 python 3.9+ 和 PyTorch。如果您不使用 Mac 或 GPU 机器,您可能需要先安装 CPU 版本的 torch。请参阅此处了解更多详细信息。
安装:
第一次运行 surya 时,模型权重将自动下载。请注意,这不适用于最新版本的变压器 4.37+ ,因此您需要保留随 surya 安装的 4.36.2 。
用法
互动应用程序
我提供了一个 Streamlit 应用程序,可让您以交互方式在图像或 PDF 文件上尝试 Surya。运行它:
pip install streamlit
surya_gui
传递 --math 命令行参数以使用数学文本检测模型而不是默认模型。这会更好地检测数学,但在其他方面都会更差。
OCR(文字识别)
此命令将写出一个包含检测到的文本和 bbox 的 json 文件:
surya_ocr DATA_PATH --images --langs hi,en
-
DATA_PATH 可以是图像、pdf 或图像/pdf 文件夹
-
--langs 指定用于 OCR 的语言。您可以用逗号分隔多种语言(我不建议使用超过 4 )。使用此处的语言名称或两个字母的 ISO 代码。Surya 支持 surya/languages.py 中的 90 多种语言。
-
--lang_file 如果您想对不同的PDF/图像使用不同的语言,您可以在此处指定语言。格式是 JSON 字典,键是文件名,值是列表,例如 {"file1.pdf": ["en", "hi"], "file2.pdf": ["en"]} 。
-
--images 将保存页面图像和检测到的文本行(可选)
-
--results_dir 指定保存结果的目录,而不是默认的目录
-
--max 指定如果您不想处理所有内容则要处理的最大页数
-
--start_page 指定开始处理的页码
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) 是右下角。
-
languages - 为页面指定的语言
-
page - 文件中的页码
-
image_bbox - (x1, y1, x2, y2) 格式的图像的 bbox。(x1, y1) 是左上角,(x2, y2) 是右下角。所有行 bbox 都将包含在该 bbox 中。
Performance tips 性能提示
使用 GPU 时,正确设置 RECOGNITION_BATCH_SIZE 环境变量将会产生很大的差异。每个批次项目将使用 VRAM 的 50MB ,因此可以实现非常高的批次大小。默认批量大小为 256 ,将使用大约 12.8GB 的 VRAM。根据您的 CPU 核心数量,它也可能有所帮助 - 默认 CPU 批量大小为 32 。
From python
from PIL import Image
from surya.ocr import run_ocr
from surya.model.detection import segformer
from surya.model.recognition.model import load_model
from surya.model.recognition.processor import load_processor
image = Image.open(IMAGE_PATH)
langs = ["en"] # Replace with your languages
det_processor, det_model = segformer.load_processor(), segformer.load_model()
rec_model, rec_processor = load_model(), load_processor()
predictions = run_ocr([image], [langs], det_model, det_processor, rec_model, rec_processor)
文本行检测
此命令将写出包含检测到的 bbox 的 json 文件。
surya_detect DATA_PATH --images
-
DATA_PATH 可以是图像、pdf 或图像/pdf 文件夹
-
--images 将保存页面图像和检测到的文本行(可选)
-
--max 指定如果您不想处理所有内容则要处理的最大页数
-
--results_dir 指定保存结果的目录,而不是默认目录
-
--math 使用专门的数学检测模型而不是默认模型。这在数学上会更好,
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 - 在文档中检测到垂直线
-
horizontal_lines - 在文档中检测到水平线
-
page - 文件中的页码
-
image_bbox - (x1, y1, x2, y2) 格式的图像的 bbox。(x1, y1) 是左上角,(x2, y2) 是右下角。所有行 bbox 都将包含在该 bbox 中。
性能提示
使用 GPU 时,正确设置 DETECTOR_BATCH_SIZE 环境变量将会产生很大的差异。每个批次项目将使用 VRAM 的 280MB ,因此可以实现非常高的批次大小。默认批量大小为 32 ,它将使用大约 9GB 的 VRAM。根据您的 CPU 核心数量,它也可能有所帮助 - 默认 CPU 批量大小为 2 。
From python
from PIL import Image
from surya.detection import batch_text_detection
from surya.model.detection.segformer import load_model, load_processor
image = Image.open(IMAGE_PATH)
model, processor = load_model(), load_processor()
predictions = batch_text_detection([image], model, processor)
布局分析
此命令将使用检测到的布局写出一个 json 文件。
surya_layout DATA_PATH --images
-
DATA_PATH 可以是图像、pdf 或图像/pdf 文件夹
-
--images 将保存页面图像和检测到的文本行(可选)
-
--max 指定如果您不想处理所有内容则要处理的最大页数
-
--results_dir 指定保存结果的目录,而不是默认目录
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)。目前这个说法不太可靠。
-
label - bbox 的标签。 Caption 、 Footnote 、 Formula 、 List-item 、 Page-footer 、 Page-header 之一, Picture 、 Figure 、 Section-header 、 Table 、 Text 、 Title 。
-
page - 文件中的页码
-
image_bbox - (x1, y1, x2, y2) 格式的图像的 bbox。
(x1, y1) 是左上角,(x2, y2) 是右下角。所有行 bbox 都将包含在该 bbox 中。
性能提示
使用 GPU 时,正确设置 DETECTOR_BATCH_SIZE 环境变量将会产生很大的差异。每个批次项目将使用 VRAM 的 280MB ,因此可以实现非常高的批次大小。默认批量大小为 32 ,它将使用大约 9GB 的 VRAM。根据您的 CPU 核心数量,它也可能有所帮助 - 默认 CPU 批量大小为 2 。
From python
from PIL import Image
from surya.detection import batch_text_detection