EasyOCR,识别图片中的文字真的so easy

原文链接:http://www.juzicode.com/image-ocr-python-easyocr

桔子菌之前在 pytesseract提取识别图片中的文字 中介绍过怎么在Python中使用tesseract提取和识别图片中的文字,今天再来聊一聊EasyOcr,它也是一款非常优秀的OCR包,使用起来是相当地easy。

1、安装easyocr包

这里以windows系统为例,需要先安装pytorch,在pytorch官网可以根据语言版本、操作系统等信息找到安装方法:

pip3 install torch torchvision torchaudio

安装easyocr:

pip3 install easyocr

安装完成后,可以通过easyocr.__version__查看版本号:

import easyocr
print(easyocr.__version__)

2、安装检测模型、识别模型(语言包)

如果事先没有安装检测模型和识别模型,第一次执行脚本时会自动下载2种模型文件:

这种方式下载速度较慢,而且容易出错导致下载中断,可以通过手动方式下载、安装。

进入esayocr官网选择需要的模型下载(Jaided AI: EasyOCR model hub)。

首先下载文本检测模型:

接下来下载识别模型,识别模型对应了各种语言包,下图是简体中文和英文的识别模型:

将下载的模型文件解压后拷贝到当前登录的用户目录的.EasyOCR\model文件夹下,Windows系统为:C:\Users\yourname\.EasyOCR\model,其中yourname是登录用户名。

【注】这里下载的识别模型(语言包)的文件名称和后面看到的语言类型并不是完全对应的,比如在代码中的语言类型ch_sim对应简体中文(zh_sim_g2),en对应英文(english_g2)。

3、使用方法

EsayOcr的使用正如其名非常地简单,就是2个步骤,第1步创建Reader()实例,第2步用readtxt()方法检测和识别。

创建Reader()实例

初始化Reader()实例的参数有:

  • lang_list (list):识别语言代码,比如[‘ch_sim’,’en’]分别表示简体中文和英文。
  • gpu (bool, string, default = True) :是否使能GPU,只有安装了GPU版本才有效。
  • model_storage_directory (string, default = None) :模型存储位置,依次查找系统变量EASYOCR_MODULE_PATH (preferred)、MODULE_PATH (if defined)表示的路径或者~/.EasyOCR/路径。
  • download_enabled (bool, default = True):如果没有对应模型文件时,自动下载模型。
  • user_network_directory (bool, default = None) :用户自定义识别网络的路径,如果没有指明,则在MODULE_PATH + ‘/user_network’ (~/.EasyOCR/user_network)目录中查找。
  • recog_network (string, default = ‘standard’) :替代标准模型,使用自定义的识别网络。
  • detector (bool, default = True) :是否加载检测模型。
  • recognizer (bool, default = True) :是否加载识别模型。

创建完实例后,识别文字就要用到其readtext()方法。

检测与识别readtext()方法

下面是一个最简单的应用例子,首先创建一个reader对象,传入要使用的语言包(识别模型),然后在reader对象的readtext方法中传入要识别的文件名称:

#juzicode.com / vx:桔子code
import easyocr
reader = easyocr.Reader(['ch_sim','en'])
result = reader.readtext('road-poetry.png')
for res in result:
     print(res)

运行结果:

([[151, 101], [195, 101], [195, 149], [151, 149]], '西', 0.9816301184856115)
([[569, 71], [635, 71], [635, 131], [569, 131]], '东', 0.9986620851098884)
([[218, 92], [535, 92], [535, 191], [218, 191]], '诗和远方路', 0.8088406614287519)
([[137, 217], [177, 217], [177, 257], [137, 257]], 'W', 0.8304899668428476)
([[209, 217], [525, 217], [525, 257], [209, 257]], 'Poetry And The Places Afar Rd。', 0.40033782611925706)
([[571, 207], [611, 207], [611, 251], [571, 251]], 'C', 0.1553293824532922)

readtext()方法返回一个元组,包含了多个元素,每个元素由识别到文字信息的边框,文字内容,可信度等3部分组成。

除了前面例子中readtext()传入文件名称,也可以在readtext()方法中传入图像的numpy数组,比如用opencv读取图片文件得到的numpy数组:

#juzicode.com / vx:桔子code
import easyocr
import cv2
reader = easyocr.Reader(['ch_sim','en'])
img = cv2.imread('road-poetry.png' ) 
result = reader.readtext(img)

color=(0,0,255)
thick=3
for res in result:
    print(res)
    pos = res[0]
    text = res[1]
    for p in [(0,1),(1,2),(2,3),(3,0)]:
        cv2.line(img,pos[p[0]],pos[p[1]],color,thick)
cv2.imwrite('bx-road-poetry.jpg',img)

运行结果:

([[151, 101], [195, 101], [195, 149], [151, 149]], '西', 0.9805448761688105)
([[569, 71], [635, 71], [635, 131], [569, 131]], '东', 0.9985224701960114)
([[217, 91], [534, 91], [534, 194], [217, 194]], '诗和远方路', 0.8750403596327564)
([[137, 217], [177, 217], [177, 257], [137, 257]], 'W', 0.7520859053705777)
([[209, 217], [523, 217], [523, 257], [209, 257]], 'Poetry And The Places Afar Rd。', 0.3012721541954036)
([[571, 207], [611, 207], [611, 251], [571, 251]], 'C', 0.15253169048338933)

第3种方法是在readtext()中传入读出的原始字节内容,注意图片文件是以rb方式读出:

#juzicode.com / vx:桔子code
import easyocr
reader = easyocr.Reader(['ch_sim','en'])
with open('road-poetry.png','rb') as pf:
    img = pf.read()
    result = reader.readtext(img)
    for res in result:
        print(res)

运行结果:

([[151, 101], [195, 101], [195, 149], [151, 149]], '西', 0.673960519698312)
([[569, 71], [635, 71], [635, 131], [569, 131]], '东', 0.9128537192685862)
([[218, 92], [535, 92], [535, 191], [218, 191]], '诗和远方路', 0.7941057755221305)
([[137, 217], [177, 217], [177, 257], [137, 257]], 'W', 0.7182424534268108)
([[209, 217], [525, 217], [525, 257], [209, 257]], 'Poetry And The Places Afar Rd。', 0.5591090091224509)
([[571, 207], [611, 207], [611, 251], [571, 251]], 'C', 0.1532075452826911)

EasyOcr,so easy,你学废了吗?

推荐阅读:

模糊照片修复神器GFPGAN

新鲜上架的Python3.10,来个match-case尝尝鲜

在Python中使用微信扫码功能

一行代码深度定制你的专属二维码(amzqr)

来看看怎么用OpenCV解构Twitter大牛的视觉错觉图

  • 29
    点赞
  • 214
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
### 回答1: b'easyar4.0与Unity图像识别的区别是什么?' easyar4.0是一款专门用于图像识别的软件开发工具,而Unity则是一款游戏引擎。虽然Unity也支持图像识别功能,但是easyar4.0在这方面更加专业和方便,可以更快速地开发出高质量的图像识别应用程序。另外,easyar4.0还支持多平台开发,包括iOS、Android和Windows等操作系统,在跨平台图像识别方面有着更强的优势。 ### 回答2: 易盾AR4.0是一款先进的增强现实技术软件,主要用于实现AR教育、AR游戏、AR导航、AR营销、AR打印、AR展示等多种应用场景,可以快速、精准地识别并追踪现实世界的图像、物体、地标等,实现现实世界与虚拟世界的无缝衔接。在实现AR技术的应用过程,Unity是目前最为流行的游戏引擎之一,支持3D及2D开发,易盾AR4.0也可轻松与Unity进行深度集成,实现优质的AR应用体验。 EasyAR4.0和Unity图片识别的结合使用可以实现具有高度智能化的增强现实效果,满足多种应用的需求。EasyAR4.0提供的图像识别技术可以对于预设好的图像进行快速、准确的识别,同时还可以追踪出图像的位置、大小、方向等元素的相关信息,为效果展示提供了基础的数据支持。而Unity则提供了丰富的图形渲染和动画特效制作功能,能够更好地呈现AR效果。 通过EasyAR4.0和Unity应用配合开发,可以在AR教育实现具有互动性的科普展示;在AR游戏增强游戏场景的真实感;在AR导航将现实世界与虚拟地图相结合,方便用户更好地进行导航;在AR营销增强产品的展示效果等。 总之,EasyAR4.0与Unity的结合对于实现AR应用具有重要的意义,可以为AR应用领域的发展带来重大的推动作用。 ### 回答3: EasyAR是一款跨平台的增强现实SDK,而Unity是一款游戏引擎。EasyAR的4.0版本是其最新的版本,提供了更加稳定、高效的识别和跟踪功能。EasyAR4.0能够通过自己的AR引擎,对现实世界进行实时检测,能够实现二维码、图像、目标、物体的跟踪与识别。 在Unity使用EasyAR4.0能够实现非常流畅和高效的增强现实效果。首先,开发者需要先将EasyAR插件设置好,然后将识别的图像或物体导入Unity进行编辑。这包括添加AR相机、设置AR目标、添加跟踪事件等等。然后开发者可以使用Unity所提供的各种功能,例如粒子效果和声音效果,用来强化增强现实效果。 相对于其他增强现实SDK,EasyAR4.0的优势在于它提供了丰富的资料支持和社区支持。EasyAR官网提供了许多视频教程、开发文档和示例代码,能够让开发者更快速地上手。此外,EasyAR还提供了一个活跃的社区,开发者能够在上面分享自己的经验和获取他人的帮助。 总之,EasyAR4.0作为一个成熟的增强现实引擎,与Unity的结合使用能够实现出色的AR应用。希望今后EasyAR能够不断更新和完善,为AR开发者提供更好的开发工具和平台。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值