目录

一、Surya-OCR项目简介

二、Surya-OCR模型安装

        1.conda虚拟环境创建

         2.Pytorch环境安装

        3.Surya-ocr安装

        4.surya项目代码克隆

         5.报错处理

三、Surya-OCR模型使用——文本检测

        1.命令行指令版——(需要“科学上网”)

        2.Python接口版——(离线下载部署)

 四、写在结尾:Surya深度扩展应用


一、Surya-OCR项目简介

        (追加)本文使用的是的surya版本是0.3.0。请确保安装版本一致,更新版本使用将发生改动。最新版本使用见后续文章。

        (最新)最新版本0.6使用方法和更新安装环境教程,详见博文链接如下:

https://blog.csdn.net/qq_58718853/article/details/142817344

         Surya项目源码Github地址:https://github.com/VikParuchuri/surya

        根据官方文档介绍:

Surya 是一个文档 OCR 工具包,可以支持:

  • 90+ 种语言的准确 OCR
  • 任何语言的行级文本检测
  • 任何语言的布局分析(表格、图像、页眉等检测)

        下面是官方给出的一些检测示例图。

        Surya-OCR 支持三种形式的文本识别,分别是文本提取、文本行检测和文本区域检测,并支持多种语言的识别任务,下面分布展示其官方效果图示。

        文本提取效果:

        文本行检测效果:

        文本区域检测效果:

二、Surya-OCR模型安装

        1.conda虚拟环境创建

        进入conda的Anaconda Prompt环境,输入以下指令生成虚拟环境。Surya要求Python版本在3.9以上。

conda create -n surya python=3.9

         检验安装成功与否,并激活虚拟环境。

conda activate surya

         2.Pytorch环境安装

 ①官网直接命令安装 

        在虚拟环境surya激活的条件下,条件好的(网络连接稳定),直接使用官网pip命令安装。

        官网地址:https://pytorch.org/mmxm       

        根据电脑安装的cuda版本安装对应的pytorch版本。可以在官网中选择以往的版本安装,本机服务器使用的是cu101版本。将下述指令复制到,已经激活虚拟环境的Anaconda Prompt中,即可安装pytorch环境。(下述忽略图中选择,按代码版本为准,选择比示例图更高版本的torch安装!!)

pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113

        

         安装完成后,pip list看一下当前环境下安装的所有包,验证是否安装成功。

②使用whl包离线安装

        对于网络环境不稳定,使用命令指令安装出现下面红字报错的时候,推荐使用whl包先下载到本地,再在本地离线安装 torch 环境。

        whl包下载地址:https://download.pytorch.org/whl/cu117

        首先还是要去官网查看需要下载的torch相关包版本号,torch、torchvision、torchaudio版本需一一对应,不然会报错。然后进入whl包下载地址,下载相应版本的 torch、torchvision 和 torchaudio。

        选择与本机对应的版本下载,cu113对应cuda版本号(也有cpu版本),cp是环境中python版本,选择win的版本。(尽量选择 torch 1.10.0以上的版本)

        

        下载完成后,将下载的包移动到指定的虚拟环境下的文件夹中——在你安装的conda地址下的env/surya/Scripts 中。

        注意此处torch版本和之前不同,是因为服务器(cuda10.1)上已安装好环境,现在是使用个人电脑(cuda11.7)作为实验。

        在此处备注一下,不要选用过低版本的 torch 安装!在服务器安装的torch  1.8.1版本,在离线部署时,因为torch版本低,有些库函数不存在报错!后续重新将torch重装更新到了1.12.1。下述在本机安装的1.13.0版本部署过程中就不存在报错。

         现在再打开Anaconda Prompt,激活虚拟环境,并且cd到whl包的地址目录下。本机conda安装在E盘。

# 激活虚拟环境
conda activate surya

# cd到包下载地址
E:
cd E:\conda3\envs\surya\Scripts

# pip安装whl包
pip install torch-1.13.0+cu117-cp39-cp39-win_amd64.whl

         同样的方式,安装torchvision和torchaudio另外两个torch包,torchvision会有一些其他依赖包会在安装whl的时候自行安装。安装完成后,使用pip list检查一下。

 

        3.Surya-ocr安装

        根据官方指令直接安装。成功后可以看所安装的包,对于一些因为网络问题无法安装的库,可以对应去找whl或者tar文件下载离线安装。

# 确保安装老版本0.3.0
pip install surya-ocr==0.3.0

        

        4.surya项目代码克隆

                   Surya下载Github地址:https://github.com/VikParuchuri/surya

        进入上述 github 源代码地址,下载surya包到本地并解压,方便本地部署surya项目。

         5.报错处理

        如果后续运行出现报错RuntimeError: “linspace_cpu“ not implemented for ‘Half’,说明安装包的源码需要修改,具体参加下面的博文,已解决该问题https://blog.csdn.net/qq_58718853/article/details/137770263

        使用时如果报以下错误,是transformers版本太高了,降低版本可以解决。

# 降低transformers的版本
pip install transformers==4.36.2
# 降低surya-ocr版本
pip install surya-ocr==0.3.0

三、Surya-OCR模型使用——文本检测

        Surya官方文档中提供了两种使用模型的方法,一种是命令行指令,另一种是提供了Python模型接口。第一种需要稳定的访问外网的权限,第二种可以借助接口实现模型的离线部署

        1.命令行指令版——(需要“科学上网”)

        官方文档中,对于模型源代码项目的命令行指令操作给出了具体的解释,这种使用模型的方式更加便利,下面将其提供的指令功能翻译并记录在下面。下述指令代码直接在 Pycharm终端Terminal 中运行。

        Surya提供了三种文本检测的模式,分别是:文本提取(Text Recognition)、文本行检测(Text Line Detection)、文本区域检测(Layout Analysis)

①文本提取指令(Text Recognition)

        文本提取指令如下,其支持图片、pdf 和图片文件的输入,输出是一个带有检测到的文本和框的 json 文件,并可选地保存重建页面的图像。

        指令中有一些参数是可以调整和选择的:

        --langs:用于指定检测文本的语言,多种语言用逗号间隔,支持主要几种语言的缩写如下。

# 文本语言
{'zh': 'Chinese', 'en': 'English', 'de': 'German',  'fr': 'French', 'ru': 'Russian'}

## 具体参见surya源代码/surya/languages.py 

        --image:可选参数,选上将保存重建页面的图片,即页面和检测到的文本行的图像。

        --result_dir:指定将结果保存到的目录,而不是默认目录

        一个完整的示例指令代码如下,其中 DATA_PATH 代表需要检测的图片位置,SAVE_PATH代表结果保存位置。

# 文本提取指令
surya_ocr "DATA_PATH" --langs zh --image --result_dir "SAVE_PATH"

②文本行检测(Text Line Detection)

        文本行检测和文本提取类似,此处不再赘述。文本行只是多了一个对数学公式的检测参数。

        --math:可选参数,选上使用专门的数学检测模型。这在数学方面好,但在其他方面会差。

        一个完整的示例代码如下:

# 文本行检测命令
surya_detect "DATA_PATH" --image --result_dir "SAVE_PATH" --math

③文本区域检测 (Layout Analysis)

        无特殊参数增加,使用同上述内容。

        一个完整的示例代码如下:

# 文本区域检测指令
surya_layout "DATA_PATH" --image --result_dir "SAVE_PATH"

        2.Python接口版——(离线下载部署)

        由于对服务器安全性考虑,无法实时“科学上网”,使用指令部署常常会遇到互联网拒绝访问的报错。此时需要下载好 surya 模型训练好的参数,离线部署检测文本。下面给出操作流程。

①模型参数下载

  • 如果在别的设备中可以使用科学连接上网的话,访问以下地址,下载对应的模型,需要用的模型主要是两个——“vikp/surya_det2” & "vikp/surya_layout"

        所有模型参数下载地址:https://huggingface.co/vikp

  • 本人将部分模型的参数数据放在下方百度云地址,需要自取。

        百度网盘链接:https://pan.baidu.com/s/1NlOD8Naq8g9xt9oCcd_7ag?pwd=jqbx

                   提取码:jqbx

②报错调试

        具体参考这篇博文:https://blog.csdn.net/qq_58718853/article/details/137770263

③Python接口使用

        Surya官方文档中给出了对应使用的Python使用接口,但是需要对代码一些细节进行修改,如默认代码还是在线加载模型,需将加载地址修改为本地;指令一些功能的实现也需在源码内进行调整。下面分别给出三个模型的接口代码修改版。

        注意:以下代码中图片地址 IMAGE_PATH 只能是单个图片文件,即以 .jpg 结尾的详细图片地址,不支持图片文件夹的输入。

文本提取OCR

# 文本提取ocr

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

langs = ["language"] ## 选择你的文本语言
IMAGE_PATH = 'image_path' ## 需检测图片地址
MODEL_PATH = 'model_path' ## 模型参数保存地址

#####################(分界线)上述是需根据情况修改的参数,以下函数不需修改

# 加载离线模型
image = Image.open(IMAGE_PATH)
det_processor, det_model = segformer.load_processor(MODEL_PATH), segformer.load_model(MODEL_PATH)
rec_model, rec_processor = load_model(MODEL_PATH), load_processor(MODEL_PATH)

# 检测结果
predictions = run_ocr([image], [langs], det_model, det_processor, rec_model, rec_processor)

文本行检测 Text Line

# 文本行检测

from PIL import Image
from surya.detection import batch_text_detection
from surya.model.detection.segformer import load_model, load_processor

IMAGE_PATH = 'image_path' ## 需检测图片地址
MODEL_PATH = 'model_path' ## 模型参数保存地址

#####################(分界线)上述是需根据情况修改的参数,以下函数不需修改

# 加载离线模型
image = Image.open(IMAGE_PATH)
model, processor = load_model(MODEL_PATH), load_processor(MODEL_PATH)

# 检测结果
predictions = batch_text_detection([image], model, processor)

 文本区域检测 Layout analysis

# 文本区域检测

from PIL import Image
from surya.detection import batch_text_detection
from surya.layout import batch_layout_detection
from surya.model.detection.segformer import load_model, load_processor

IMAGE_PATH = 'image_path' ## 需检测图片地址
MODEL_PATH = 'model_path' ## 文本行检测模型参数保存地址
MODEL_LAYOUT_PATH = "model_layout_path" ## 区域检测模型

#####################(分界线)上述是需根据情况修改的参数,以下函数不需修改

image = Image.open(IMAGE_PATH)
model = load_model(MODEL_LAYOUT_PATH)
processor = load_processor(MODEL_LAYOUT_PATH)
det_model = load_model(MODEL_PATH)
det_processor = load_processor(MODEL_PATH)

# 检测结果
## 文本行检测结果
line_predictions = batch_text_detection([image], det_model, det_processor)
## 文本区域检测
layout_predictions = batch_layout_detection([image], model, processor, line_predictions)

        上述代码中模型预测结果在 predictions 中,Surya 的输出是一个 Class 类形式,具体详细的解析以及如何转为想要的数据格式,见写在结尾第一篇文章链接。

 四、写在结尾:Surya深度扩展应用

        上述模型的Python接口使用仅仅只是验证我们模型是否安装成功,模型参数是否加载成功,能否正确运行模型检测。Python接口处函数只实现了单个图片的检测结果。

        ①如何调用离线模型本地批量检测图片;模型部署中更进一步的源码拆解和参数修改(如选择第几号GPU);模型预测结果的解析与转化为我们想要的格式......

        以上内容详见文章地址:https://blog.csdn.net/qq_58718853/article/details/137815688

        ②预测效果不佳?有两种解决思路:一是微调训练官方模型参数;二是对官方参数预测的结果做精细化调整。先介绍如何精细化调整预测的框信息,使其更加精确匹配到我们检测一些特定文本。此思路分为多个步骤,下面按顺序分别介绍其文章。

        精调1——空白框的处理https://blog.csdn.net/qq_58718853/article/details/139768563

        ③检测不佳,考虑换模型微调实现任务要求?对于目标检测任务还可以尝试大名鼎鼎的YOLO进行模型训练微调部署,详细参见下面博文地址。

        从零开始使用YOLO系列开篇文章:从零开始使用YOLOv8和v11(最新版本使用环境已更新)——环境配置与极简指令(CLI)操作:1篇文章解决—直接使用:模型部署 and 自建数据集:训练微调-CSDN博客

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐