您当前的位置:首页 > 计算机 > 编程开发 > Python

python --离线识别图片中文字(easyocr)

时间:08-15来源:作者:点击数:
CDSY,CDSY.XYZ

python --离线识别图片中文字(easyocr)

装包

pip install torch torchvision torchaudio
pip 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()实例的参数有:

  • 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方法中传入要识别的文件名称:

在这里插入图片描述
import easyocr
import cv2

reader = easyocr.Reader(['ch_sim', 'en'])
img = cv2.imread(r'C:\Users\Yi\Desktop\2.jpg')
result = reader.readtext(img)
for i in result:
    print(i)

如果中途遇cv2.error 改一下包中的通道注释掉

在这里插入图片描述

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

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

import easyocr
import cv2

reader = easyocr.Reader(['ch_sim', 'en'])
img = cv2.imread(r'C:\Users\Yi\Desktop\2.jpg')
result = reader.readtext(img)
for i in result:
    print(i)


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(r'C:\Users\Yi\Desktop\2.jpg', img)
在这里插入图片描述

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

import easyocr

reader = easyocr.Reader(['ch_sim', 'en'])
with open(r'C:\Users\Yi\Desktop\2.jpg', 'rb') as f:
    img = f.read()
    result = reader.readtext(img)
    for res in result:
        print(res)

结果:

([[105, 57], [344, 57], [344, 122], [105, 122]], ‘琴 屿 路’, 0.555535924621889)

([[110, 122], [259, 122], [259, 163], [110, 163]], ‘QINYU’, 0.9948298735178898)

([[275, 131], [337, 131], [337, 167], [275, 167]], ‘LU’, 0.9687030228472547)

文本,汉字,英文;模型下载过慢的,可以从我网盘拿奥

链接:https://pan.baidu.com/s/1N3eyF0pN6fVJGhwcRR1nbw2

提取码:8888

CDSY,CDSY.XYZ
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐