当前位置: 首页 > news >正文

一款支持80+语言,包括:拉丁文、中文、阿拉伯文、梵文等开源OCR库

大家好,今天给大家分享一个基于PyTorch的OCR库EasyOCR,它允许开发者通过简单的API调用来读取图片中的文本,无需复杂的模型训练过程。

项目介绍

EasyOCR 是一个基于Python的开源项目,它提供了一个简单易用的光学字符识别(OCR)工具,支持超过80种语言以及多种书写脚本,包括拉丁文、中文、阿拉伯文、天城体、西里尔文等。

EasyOCR 利用PyTorch作为其深度学习执行框架,展示了对人工智能和机器学习在文本识别领域的强大应用能力。

核心特点

多语言支持:支持超过 80 种语言和所有流行的书写系统,包括拉丁文、中文、阿拉伯文、梵文、西里尔文等,可满足全球用户处理不同语言文档的需求。

高准确性:对于正常图片文本识别,准确率能达到较高水平,无论是手写体还是印刷体都能够较为准确地识别,其深度学习模型能够学习不同语言的字符特征和书写风格,从而提高识别精度。

文本检测与识别功能兼具:不仅可以识别图片中的文本内容,还能检测出文本框的位置,以左上、右上、右下、左下坐标顺序依次返回,可应用于多种需要定位文本的场景,如文档排版分析、图像内容理解等。

支持 GPU 加速:配置好相应的 CUDA、PyTorch、Torchvision Python 环境后,可使用 GPU 进行加速,识别速度相比 CPU 快 6~7 倍,能够提高处理效率,更快地完成大量图片的文本识别任务。

易于使用:将所有功能封装到一个类中,通过简单的函数调用即可实现文本识别和检测。并且已经上传到 PyPI,可通过 pip 命令完成安装,使用 Python 调用非常方便。

技术架构

关键技术
  • CRAFT 算法:用于文本检测。

  • CRNN 模型:用于文本识别,由特征提取、序列标注和解码三个组件组成。

  • PyTorch:用于深度学习模型的训练和推理。

框架
  • Python:主要编程语言。

  • PyTorch:深度学习框架。

  • OpenCV:用于图像处理。

应用场景

文档数字化:帮助用户将纸质文档快速、准确地转换为电子文档,便于存储、检索和共享,提高文档管理的效率和便利性。

数据录入:能够自动化数据录入流程,减少人工输入的错误和时间成本,适用于处理大量表单、报表等数据的场景,如企业的财务数据录入、物流信息录入等。

多语言翻译:自动识别并提取不同语言的文本,为多语言翻译提供基础,方便跨国交流和信息共享,例如在处理跨国公司的文件、国际学术文献等方面有很大的应用价值。

内容审核:可以自动识别图像中的文本内容,用于内容审核和合规性检查,帮助用户快速筛选出包含特定关键词或不符合规定的文本信息,如在社交媒体、网络平台等的内容监管方面发挥作用。

其他场景:还可应用于金融领域的票据识别、互联网爬虫中的文本提取、支付系统中的二维码和条形码识别、大数据处理中的文本抓取和解析、车辆车牌识别等多种业务场景。

安装使用

安装

安装依赖
  • Python 环境:确保你已经安装了 Python 3.6 或更高版本。

  • CUDA 和 cuDNN(可选):如果你有 NVIDIA GPU 并希望使用 GPU 加速,请安装 CUDA 和 cuDNN。

  • PyTorch:EasyOCR 依赖于 PyTorch,因此需要先安装 PyTorch。

步骤 1:安装 PyTorch

首先,你需要安装 PyTorch。你可以根据你的系统配置和是否使用 GPU,在 PyTorch 官网 上找到合适的安装命令。例如,如果你使用的是 Windows 系统并且没有 GPU,可以使用以下命令:

pip install torch torchvision torchaudio

步骤 2:安装 EasyOCR

安装完 PyTorch 后,你可以通过 pip 安装 EasyOCR。

pip install easyocr

使用

可通过下列代码进行简单验证。

import easyocr
reader = easyocr.Reader(['ch_tra','en']) # 加载简体中文和英文模型
result = reader.readtext('chinese.jpg')

以此图片为例

将输出下列结果

[([[448, 111], [917, 111], [917, 243], [448, 243]],'高鐵左營站',0.9247),
([[454, 214], [629, 214], [629, 290], [454, 290]], 'HSR', 0.9931),
([[664, 222], [925, 222], [925, 302], [664, 302]],'Station',0.3260),
([[312, 306], [937, 306], [937, 445], [312, 445]],'汽車臨停接送區',0.7417),
([[482, 418], [633, 418], [633, 494], [482, 494]],'Kiss',0.9577),
([[331, 421], [453, 421], [453, 487], [331, 487]], 'Car', 0.9630),
([[653, 429], [769, 429], [769, 495], [653, 495]], 'and', 0.9243),
([[797, 429], [939, 429], [939, 497], [797, 497]],'Ride',0.6400)]

你可以通过设置detail=0输出简单结果

result = reader.readtext('chinese.jpg', detail=0)

如果你有 GPU 并希望使用 GPU 加速,可以在创建 Reader 实例时设置 gpu=True

reader = easyocr.Reader(['ch_tra','en'], gpu=True)

总结

EasyOCR作为一个轻量级但功能强大的OCR库,为Python开发者提供了便捷的文字识别方案。虽然在某些复杂的场景下,EasyOCR的识别准确率可能不如一些商业OCR引擎,但对于大部分日常应用场景来说,EasyOCR已经足够胜任。相信随着EasyOCR的不断发展,它将在更多领域发挥其独特的作用。

项目地址

https://github.com/JaidedAI/EasyOCR

一款支持80+语言,包括:拉丁文、中文、阿拉伯文、梵文等开源OCR库 - BTool博客 - 在线工具软件,为开发者提供方便 

相关文章:

一款支持80+语言,包括:拉丁文、中文、阿拉伯文、梵文等开源OCR库

大家好,今天给大家分享一个基于PyTorch的OCR库EasyOCR,它允许开发者通过简单的API调用来读取图片中的文本,无需复杂的模型训练过程。 项目介绍 EasyOCR 是一个基于Python的开源项目,它提供了一个简单易用的光学字符识别&#xff…...

Flink四大基石之CheckPoint(检查点) 的使用详解

目录 一、Checkpoint 剖析 State 与 Checkpoint 概念区分 设置 Checkpoint 实战 执行代码所需的服务与遇到的问题 二、重启策略解读 重启策略意义 代码示例与效果展示 三、SavePoint 与 Checkpoint 异同 操作步骤详解 四、总结 在大数据流式处理领域,Ap…...

JVM 常见面试题及解析(2024)

目录 一、JVM 基础概念 二、JVM 内存结构 三、类加载机制 四、垃圾回收机制 五、性能调优 六、实战问题 七、JVM 与其他技术结合 八、JVM 内部机制深化 九、JVM 相关概念拓展 十、故障排查与异常处理 一、JVM 基础概念 1、什么是 JVM?它的主要作用是…...

Python 调用 Umi-OCR API 批量识别图片/PDF文档数据

目录 一、需求分析 二、方案设计(概要/详细) 三、技术选型 四、OCR 测试 Demo 五、批量文件识别完整代码实现 六、总结 一、需求分析 市场部同事进行采购或给客户报价时,往往基于过往采购合同数据,给出现在采购或报价的金额…...

K8S资源之secret资源

secret资源介绍 secret用于敏感数据存储,底层基于base64编码,数据存储在etcd数据库中 应用场景举例: 数据库的用户名,密码,tls的证书ssh等服务的相关证书 secret的基础管理 1 在命令行响应式创建 1.响应式创建 …...

QT:信号和槽01

QT中什么是信号和槽 概念解释 在 Qt 中,信号(Signals)和槽(Slots)是一种用于对象间通信的机制。信号是对象发出的事件通知,而槽是接收并处理这些通知的函数。 例如,当用户点击一个按钮时&#…...

针对Qwen-Agent框架的Function Call及ReAct的源码阅读与解析:Agent基类篇

文章目录 Agent继承链Agent类总体架构初始化方法`__init__` 方法:`_init_tool` 方法:对话生成方法`_call_llm` 方法:工具调用方法`_call_tool` 方法:`_detect_tool` 方法:整体执行方法`run` 方法:`_run` 方法:`run_nonstream` 方法总结回顾本文在 基于Qwen-Agent框架的Functio…...

XML 查看器:深入理解与高效使用

XML 查看器:深入理解与高效使用 XML(可扩展标记语言)是一种用于存储和传输数据的标记语言。它通过使用标签来定义数据结构,使得数据既易于人类阅读,也易于机器解析。在本文中,我们将探讨 XML 查看器的功能、重要性以及如何高效使用它们。 什么是 XML 查看器? XML 查看…...

《Vue零基础入门教程》第十五课:样式绑定

往期内容 《Vue零基础入门教程》第六课:基本选项 《Vue零基础入门教程》第八课:模板语法 《Vue零基础入门教程》第九课:插值语法细节 《Vue零基础入门教程》第十课:属性绑定指令 《Vue零基础入门教程》第十一课:事…...

以AI算力助推转型升级,暴雨亮相CCF中国存储大会

2024年11月29日-12月1日,CCF中国存储大会(CCF ChinaStorage 2024)在广州市长隆国际会展中心召开。本次会议以“存力、算力、智力”为主题,由中国计算机学会(CCF)主办,中山大学计算机学院、CCF信…...

【VMware】Ubuntu 虚拟机硬盘扩容教程(Ubuntu 22.04)

引言 想装个 Anaconda,发现 Ubuntu 硬盘空间不足。 步骤 虚拟机关机 编辑虚拟机设置 扩展硬盘容量 虚拟机开机 安装 gparted sudo apt install gparted启动 gparted sudo gparted右键sda3,调整分区大小 新大小拉满 应用全部操作 调整完成...

3D Bounce Ball Game 有什么技巧吗?

关于3D Bounce Ball Game(3D弹球游戏)的开发,以下是一些具体的技巧和实践建议: 1. 物理引擎的使用: 在Unity中,使用Rigidbody组件来为游戏对象添加物理属性,这样可以让物体受到重力影响并发…...

【SQL】实战--组合两个表

题目描述 表: Person ---------------------- | 列名 | 类型 | ---------------------- | PersonId | int | | FirstName | varchar | | LastName | varchar | ---------------------- personId 是该表的主键(具有唯一值的列)…...

Spring基于注解实现 AOP 切面功能

前言 在Spring AOP(Aspect-Oriented Programming)中,动态代理是常用的技术之一,用于在运行时动态地为目标对象生成代理对象, 并拦截其方法调用。Spring AOP 默认使用两种类型的动态代理机制:JDK 动态代理和…...

设计模式 更新ing

设计模式 1、六大原则1.1 单一设计原则 SRP1.2 开闭原则1.3 里氏替换原则1.4 迪米特法则1.5 接口隔离原则1.6 依赖倒置原则 2、工厂模式 1、六大原则 1.1 单一设计原则 SRP 一个类应该只有一个变化的原因 比如一个视频软件,区分不同的用户级别 包括访客&#xff0…...

Elasticsearch 进阶

核心概念 索引(Index) 一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母),并且当我们要对这个索…...

【AI】Sklearn

长期更新,建议关注、收藏、点赞。 友情链接: AI中的数学_线代微积分概率论最优化 Python numpy_pandas_matplotlib_spicy 建议路线:机器学习->深度学习->强化学习 目录 预处理模型选择分类实例: 二分类比赛 网格搜索实例&…...

通过 JNI 实现 Java 与 Rust 的 Channel 消息传递

做纯粹的自己。“你要搞清楚自己人生的剧本——不是父母的续集,不是子女的前传,更不是朋友的外篇。对待生命你不妨再大胆一点,因为你好歹要失去它。如果这世上真有奇迹,那只是努力的另一个名字”。 一、crossbeam_channel 参考 crossbeam_channel - Rust crossbeam_channel…...

【老白学 Java】对象的起源 Object

对象的起源 Object 文章来源:《Head First Java》修炼感悟。 上一篇文章中,老白学习了抽象类和抽象方法,不禁感慨,原来 Java 还可以这样玩。 同时又有了新的疑问,这些父类从何而来的? 本篇文章老白来聊一聊…...

Ubuntu Linux操作系统

一、 安装和搭建 Thank you for downloading Ubuntu Desktop | Ubuntu (这里我们只提供一个下载地址,详细的下载安装可以参考其他博客) 二、ubuntu的用户使用 2.1 常规用户登陆方式 在系统root用户是无法直接登录的,因为root用户的权限过…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...

Qt的学习(一)

1.什么是Qt Qt特指用来进行桌面应用开发&#xff08;电脑上写的程序&#xff09;涉及到的一套技术Qt无法开发网页前端&#xff0c;也不能开发移动应用。 客户端开发的重要任务&#xff1a;编写和用户交互的界面。一般来说和用户交互的界面&#xff0c;有两种典型风格&…...

DAY 45 超大力王爱学Python

来自超大力王的友情提示&#xff1a;在用tensordoard的时候一定一定要用绝对位置&#xff0c;例如&#xff1a;tensorboard --logdir"D:\代码\archive (1)\runs\cifar10_mlp_experiment_2" 不然读取不了数据 知识点回顾&#xff1a; tensorboard的发展历史和原理tens…...

轻量级Docker管理工具Docker Switchboard

简介 什么是 Docker Switchboard &#xff1f; Docker Switchboard 是一个轻量级的 Web 应用程序&#xff0c;用于管理 Docker 容器。它提供了一个干净、用户友好的界面来启动、停止和监控主机上运行的容器&#xff0c;使其成为本地开发、家庭实验室或小型服务器设置的理想选择…...