专栏名称: GitHubStore
分享有意思的开源项目
目录
相关文章推荐
中国舞台美术学会  ·  首期舞台化妆造型高级人才研修班即将在中国国家 ... ·  3 天前  
中国舞台美术学会  ·  关注丨北京市文化和旅游工作会:聚焦高质量发展 ... ·  3 天前  
中国舞台美术学会  ·  关注丨2025年沉浸式文旅核心趋势与实施路径解码 ·  4 天前  
中国舞台美术学会  ·  观察丨经典,在首都舞台焕新重塑 ·  2 天前  
中国舞台美术学会  ·  中国舞台美术学会第九届(第十七次)理事代表大 ... ·  4 天前  
51好读  ›  专栏  ›  GitHubStore

surya:比EasyOCR还要好用的OCR框架

GitHubStore  · 公众号  ·  · 2024-05-19 15:25

正文

项目简介


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。请参阅此处了解更多详细信息。

安装:

pip install surya-ocr


第一次运行 surya 时,模型权重将自动下载。请注意,这不适用于最新版本的变压器 4.37+ ,因此您需要保留随 surya 安装的 4.36.2 。

用法

  • 检查 surya/settings.py 中的设置。您可以使用环境变量覆盖任何设置。

  • 系统将自动检测您的手电筒设备,但您可以覆盖此设置。例如, TORCH_DEVICE=cuda 。对于文本检测, mps 设备存在一个错误(在 Apple 方面),可能会阻止其正常工作。


互动应用程序

我提供了一个 Streamlit 应用程序,可让您以交互方式在图像或 PDF 文件上尝试 Surya。运行它:

pip install streamlitsurya_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 Imagefrom surya.ocr import run_ocrfrom surya.model.detection import segformerfrom surya.model.recognition.model import load_modelfrom surya.model.recognition.processor import load_processor
image = Image.open(IMAGE_PATH)langs = ["en"] # Replace with your languagesdet_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 - 在文档中检测到垂直线

    • bbox - 轴对齐的线坐标。

  • horizontal_lines - 在文档中检测到水平线

    • bbox - 轴对齐的线坐标。

  • 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 Imagefrom surya.detection import batch_text_detectionfrom surya.model.detection.segformer import load_model, load_processor
image = Image.open(IMAGE_PATH)model, processor = load_model(), load_processor()
# predictions is a list of dicts, one per imagepredictions = 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 Imagefrom surya.detection import batch_text_detection






请到「今天看啥」查看全文