OpenCV与AI深度学习 | 高效开源的OCR工具:Surya-OCR介绍与使用

news2024/11/18 15:48:44

本文来源公众号“OpenCV与AI深度学习,仅用于学术分享,侵权删,干货满满。

原文链接:高效开源的OCR工具:Surya-OCR介绍与使用

1 背景

    在众多企业应用中,光学字符识别 (OCR) 是一项基础技术。在本文中,我们将深入探讨 Surya-OCR,这是最近引起广泛关注的解决方案。文本检测和提取在各种企业用例中至关重要。例如:

  •  在制造业中,从文档中提取发票详细信息至关重要。
  •  保险行业采用 OCR 技术来自动化索赔的数字化,而医疗保健应用程序则利用 OCR 从临床记录中提取药物信息。

2 Surya-OCR

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

  • 支持 90 多种语言的 OCR,其基准测试优于云服务
  • 任何语言的行级文本检测
  • 布局分析(表格、图像、标题等检测)
  • 读取顺序检测

    它适用于一系列文档(有关更多详细信息,请参阅用法和基准)。

github地址:

https://github.com/VikParuchuri/surya

安装与使用

    在安装 Surya 之前,必须确保满足两个先决条件:

  • 需要 Python 版本 3.9 或更高版本。
  • 系统上必须安装 PyTorch。

    如果您使用的是旧版本的python,可以使用以下命令更新python:

conda install python=3.9

    要安装最新版本的 torch,请访问以下页面并根据您的环境生成命令 - https://pytorch.org/get-started/locally/

    简而言之,如果您使用的是 CPU 机器,只需运行:

pip install -U torch

    如果是 GPU 机器,请确保安装带有 cuda 的 torch:

pip install torch torchvision torchaudio --index -url https: //d ownload.pytorch.org/whl/cu118

    接下来安装Surya-OCR:

pip install surya-ocr

    Surya 支持多种语言。要执行文本检测,让我们从维基百科页面选择一个图像。

    该图像由两列组成,还包括页眉和页脚注释。文本检测可以通过三个连续步骤完成。

    【1】加载图像——使用PIL库加载png文件

from PIL import Image
image = Image.open("test.png")
print(image)

    【2】加载Surya模型

from surya.model.segformer import load_model, load_processor
model, processor = load_model(), load_processor()

    首次执行该命令时,将从 HuggingFace 下载模型。对于后续执行,模型会被缓存并快速加载。

    【3】执行文本检测 — 使用 surya batch_inference 组件

from surya.detection import batch_inference
prediction = batch_inference([image], model, processor)
print(prediction)

    Python接口打印检测到的文本的边界框坐标:

    你可以使用以下命令查看热图和亲和力图:

prediction[0]["heatmap"]

代码:

prediction[0]["affinity_map"]

    也可以通过命令行实现文本检测:

surya_detect DATA_PATH --images

DATA_PATH可以是图像、pdf 或图像/pdf 文件夹

--images将保存页面图像和检测到的文本行(可选)

--max如果您不想处理所有内容,则指定要处理的最大页数

--results_dir指定保存结果的目录而不是默认目录

    Surya 已检测到几乎 99% 的正文。页脚被覆盖。但是,无法正确检测标头。

    Surya 可在 CPU 和 GPU 环境上无缝运行。在 GPU 环境中,Surya 会自动检测 GPU 并利用它,无需任何额外的设置。

3 结束语

    Surya 团队目前专注于开发多项功能,包括文本提取、标题检测和表格提取。

https://github.com/VikParuchuri/surya?tab=readme-ov-file#surya

    发布后,我们可以将结果与 EasyOCR 或 PaddleOCR 进行比较,以评估其性能。

    可以通过以下链接访问代码:

https://github.com/srinathmkce/TheAIGuy/blob/main/ComputerVision/OCR/Surya-OCR.ipynb

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1687575.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI视频教程下载:全面掌握ChatGPT和LangChain开发AI应用(附源代码)

这是一门深入的课程,涉及ChatGPT、LangChain和Python。打造专注于现实世界AI集成的AI应用,课件附有每一节涉及到的源代码。 **你将学到什么:** - 将ChatGPT集成到LangChain的生产风格应用中 - 使用LangChain组件构建复杂的文本生成管道 - …

OpenFeign微服务调用组件使用

前言:OpenFeign是可以跨服务、跨进程的调用方式。 什么是Feign Feign是Netflix开发的声明式、模版化的HTTP客户端。 优势: Feign可以做到使用 HTTP 请求远程服务时就像调用本地方法一样的体验,开发者完全感知不到这是远程方法,更感知不到这…

分布式限流总结

1、计数器 java内部可以使用原子计数器AtomicInteger\Semaphore信号量来做简单的限流 // 限流的个数private int maxCount 10;// 指定的时间内private long interval 60;// 原子类计数器private AtomicInteger atomicInteger new AtomicInteger(0);// 起始时间private lon…

Linux x86_64 UEFI 启动

文章目录 前言一、UEFI二、Disk device compatibility2.1 GPT 磁盘分区表2.1.1 简介2.1.2 Linux 2.2 ESP(EFI) 文件系统2.2.1 简介2.2.2 LinuxLinux Kernel EFI Boot Stub 三、UEFI GPT grub23.1 简介3.2 引导方式 3.3 BOOTX64.EFI3.4 shimx64.efi3.5 …

pip换源ubuntu

到THU网站上有给定的教程 https://mirrors.tuna.tsinghua.edu.cn/help/pypi/ 方法1 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package然后在https://pypi.org/project/nvidia-cublas-cu12/#files 里面搜索你的包名 方法2 python -m pip install --upg…

caffe在ARM鲲鹏920-openEuler2309上的环境搭建

caffe 配置环境 caffe cpu-only openblas protobuf 编译caffe需要3.6~3.10版本,否则会报错 dnf install只能安装3.19版本 需要从源码编译,这里选择了3.9版本 protobuf的github仓 从源码编译安装 caffe-gpu mode caffe的gpu模式需要用到cuda make…

【机器学习-08】 | Scikit-Learn工具包进阶指南:Scikit-Learn工具包之决策树算法实战分析

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…

[猫头虎分享21天微信小程序基础入门教程] 第12天:小程序的自定义组件开发

[猫头虎分享21天微信小程序基础入门教程] 第12天:小程序的自定义组件开发 第12天:小程序的自定义组件开发 🛠️ 自我介绍 大家好,我是猫头虎,一名全栈软件工程师。今天我们继续微信小程序的学习,重点了…

两数交换,数组查找奇数个数的数(位运算)

文章目录 一、异或运算:1.1 Demo1.2 面试题 一、异或运算: 1.1 Demo 0和N进行异或运算都等于N 任何一个数和自己异或运算都等于0 且异或运算满足交换率 a^b b^a eg: a 甲 , b 已 那么则有 a a^b ​ b a^b ​ a a^b 故有&am…

MySQL进阶 日志结尾以及8.0新特性

日志结尾 前面我们聊了mysql的undo日志,redo日志,binlog等等,也从一条update语句来分析了一下日志的执行思路以及版本控制是怎么回事,四大特性是怎么实现的等等 今天我们来说说最后一个错误日志 其实用处不大 因为对我们开发人员来说基本上是没有权限来查看错误日志的 一般…

爬虫工程师---如何用charles把scrapy的爬虫监控起来调试

前言: 想法是,通过charles挂上魔法工具,然后跑代码的时候,实时监控每一个访问的请求状态和返回是个啥? 原理其实和挂手机等一样的;但是,我想说的,让scrapy挂上charles... 之前写过关于fiddler挂代理的路子,还有关于fiddler和charles的证书的文章,不明白的可以去查看 手机模拟器…

Unity Miscellaneous入门

概述 在Unity中有非常多好用的组件,也是Unity为我们提供的方便的开发工具,它的功能可能不是主流的内容,比如渲染,音乐,视频等等,所有Unity把这些内容统一归到了一个杂项文件组中。 Unity组件入门篇总目录-…

Centos 7 上安装【Docker】

安装Docker(Centos 7) 1.1.卸载(可选) 如果之前安装过旧版本的Docker,可以使用下面命令卸载: ***注意:***若提示[您需要 root 权限 执行此命令]需要在命令前加上sudo yum remove docker \do…

2. C++服务器编程-信号

什么是信号 其实信号就是一个中断。就是在执行程序的时候突然来了一个信号,然后我们去执行这个新来的程序了,这就是中断。 处理方法 信号的处理方式∶忽略、捕获、默认处理 linux中都有那些信号 man7 signal 比如说kill -9 安装man中文手册 自己百…

数据挖掘实战-基于内容协同过滤算法的电影推荐系统

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

[JAVASE] 类和对象(五) -- 抽象类和接口

目录 一. 抽象类 1.1 抽象类的定义 1.2 抽象类的实现 1.3 抽象类的作用 1.4 抽象类注意事项 二. 接口 2.1 接口的定义 2.2 接口的实现 2.3 接口的作用 2.4 接口注意事项 三. 总结 一. 抽象类 1.1 抽象类的定义 如果一个类中没有包含足够的信息来描绘一个具体的对象, 那么…

Apache无法确定服务器的完全合格域名(FQDN)报错解决方法

文章目录 一、apache语法检查报错二、报错原因分析三、报错解决办法 一、apache语法检查报错 当我们在进行apache配置时,需要检查配置是否存在语法错误: sudo apache2ctl configtestAH00558: apache2: Could not reliably determine the servers fully…

图解CPU、内存、硬盘的工作原理

1、简要概括 硬件作用cpu 负责执行计算机程序的指令内存用于临时存储程序和数据。硬盘将数据从硬盘读取到内存或将数据从内存写入硬盘的过程。联系三者协同工作,CPU执行程序指令,将需要的数据从硬盘读取到内存,进行计算后再将结果写回内存或…

JDBC访问数据库

JDBC学习笔记代码jar包等连接 链接:https://pan.baidu.com/s/1NqgMucUk7JjoSZXEkA-PPQ?pwd60kv 提取码:60kv –来自百度网盘超级会员V3的分享 下载驱动 不管是连接mysql还是sqlserver都需要Java的一个驱动包,及XXX.jar包,这个包…

扩散模型学习1

DDPM 总体训练原理 https://www.bilibili.com/video/BV1nB4y1h7CN/?spm_id_from333.337.search-card.all.click&vd_sourcef745c116402814185ab0e8636c993d8f 讲得很好:每次都是输入t和noise-x的图像,预测noise之后得到和加入的noise比较&#xff1b…