大家好,我是 zeroing~

1,前言

之前谈到图片文本 OCR 识别时,写过一篇文章介绍了一个 Python 包 pytesseract ,具体内容可参考

介绍一个Python 包 ,几行代码可实现 OCR 文本识别!这篇文章 ,pytesseract 包是基于 Tesseract 封装得到的,这个包虽然支持多语言文本识别,但对于不同语言文本识别,准确率却不一样,例如英文识别准确率高,而中文文本较低;

英文字符识别,整体来看基本不会出错,但对于图片中的中文字符,经常出现乱码、识别失败,

2,EasyOCR 介绍

今天将介绍一个的用于 文本OCR 新的Python 包 EasyOCR ,这个包是基于训练好的 Deep Learning 模型开发的,模型包含功能:文本检测、文本识别

EasyOCR 包从开源到现在 10 个月不到,但在 Github 已经有 10k+ star,到目前为止经过四次版本迭代,有以下几个特点:

1,到目前为止 支持70+种语言文本识别,包括但不限于 英语、中文、日语、韩语等;

2,源于深度学习技术,识别精度很高;对于正常图片文本识别来说,准确率能达到 100% ;

image-20210121151536805

3,不仅适用于单语言,同样也适用于多语言(例如一张图片中需要同时识别中文、英语、日语三类语言);

image-20210121151525119

4,支持 GPU 加速,GPU 识别速度要比 CPU 快 6~7 倍;(需要提前配置好 cuda、 pytorch、torchvision Python 环境);

对比传统 OCR 只具有图片文本识别之外,EasyOCR 还具有 文本检测 功能(图片中识别到的文本框,在图片中的定位以 左上、右上、右下、左下 坐标顺序依次返回),效果如下图:

image-20210121000941176

上图中 EasyOCR 最终输出的是右图的 文本信息 ,左图中的红色线框是后面经处理加上去的

3,EasyOCR 使用

上面对 EasyOCR 程序包做了简单介绍,下面介绍一下它的基本用法

安装

EasyOCR 已经上传到 Pypi 上面了,可通过 pip 命令完成安装

pip install easyocr

EasyOCR 的模型是基于 pytorch 框架训练的,在 easyocr 下载同时会下载一些其它附加 python 包,例如 pytorch, torchvision 等,时间需要久一点(需要注意下,easyocr 默认安装的是 pytorch 的 cpu 版本,需要 gpu 配置的小伙伴可以搜一下 pytorch-gpu 相关教程进行配置);

使用方法

虽然 EasyOCR 安装步骤很简单,只有一行代码;但使用过程中会出现包版本不匹配、环境项缺失 等问题,在使用过程中,我遇到了两个因为环境错误导致无法使用的问题,这里我贴在下方并附上解决方案,遇到的小伙伴们可以参考下,当然没遇到的话更好

1,from ._remap import _map_array ImportError: DLL load failed: The specified module could not be found

该问题是由于 C++ 运行包丢失造成的,解决方案,终端输入以下命令安装即可

pip install msvc-runtime

2,train error : ImportError: cannot import name 'Optional'

该问题是由于 pytorch 与 torchvision 版本不符造成的,安装 easyocr 时默认安装的 torchvision 版本为 0.5.0,对应 pytorch 相兼容的版本应该为 1.4.0,但通过下方命令安装时

pip install torch==1.14.0

会安装失败,解决方法:通过另一种 安装命令即可

pip install torch==1.4.0+cpu torchvision==0.5.0+cpu -f https://download.pytorch.org/whl/torch_stable.htm

easyocr 将所有功能都封装到一个类中 Reader ,可通过调用类里面的三种方法 readtext、detect、recognize 来实现,

image-20210126144903635

detect 方法用于检测图像中的文本框,最终返回两个列表,来表示文本框在图像中的位置,一个为 horizontal_list 格式为 [x_min,x_max,y_min,y_max] ,另一个为 free_list ,格式为 [[x1,y1],[x2,y2],[x3,y3],[x4,y4]],

ceshi

上面这张图是 B 站用于在用户登录时弹出的验证码界面,在接下来的例子中都以这张图作为模板,detect 函数的使用方法如下

import easyocr

reader = easyocr.Reader(['ch_sim','en'],gpu=False,model_storage_directory='./model')

result = reader.detect('ceshi.png')

print(result)

ouput

([[11, 133, 11, 31], [158, 238, 2, 34], [199, 235, 315, 333]], [])

使用时,首先需要创建一个 Reader 类,在类中需要指定一些参数:

lang_list,用来指定需要识别语言代码(例如中文、英文),以列表形式存放,关于语言代码可参考下方(这里只贴出部分,详情可参考官网):

image-20210121123724942

gpu,布尔值,表示是否需要使用GPU,默认为 True;

model_storage_directoy,字符串类型,默认为~./EasyOCR/.用于指定网络模型的存储路径,建议自己指定一个新路径;

最终会输出两个列表,分别表示 horizontal_list, free_list

recognize 用于识别,使用该函数时需要提供三个参数,image、horizontal_list、free_list,使用时与 detect 相搭配

image 表示图片;

horizontal_list、free_list 分别表示矩形文本框列表,是函数 detect 的两个输出列表

使用方法如下

import easyocr

from PIL import Image,ImageDraw

reader = easyocr.Reader(['ch_sim','en'],gpu=False,model_storage_directory='./model')

result = reader.recognize('ceshi.png',horizontal_list=[[11, 133, 11, 31], [158, 238, 2, 34], [199, 235, 315, 333]],free_list=[])

print(result)

output

[([[158, 2], [238, 2], [238, 34], [158, 34]], '带鱼', 0.48613545298576355), ([[11, 11], [133, 11], [133, 31], [11, 31]], '清在下图依次点击:', 0.46184659004211426), ([[199, 315], [235, 315], [235, 333], [199, 333]], '确认', 0.31680089235305786)]

最终 recognize 方法会返回每个文本框中的文本信息

readtext 函数是将 detect 和 recognize 方法相结合:先利用 detect 函数识别图像中文本框的位置坐标,将坐标列表输入 recognize 进行识别,最终返回每个文本信息及位置坐标,函数框架如下:

image-20210121125421038

import easyocr

reader = easyocr.Reader(['ch_sim','en'],gpu=False,model_storage_directory='./model')

result = reader.readtext('ceshi.png')

print(result)

ouput

Using CPU. Note: This module is much faster with a GPU.

[([[158, 2], [238, 2], [238, 34], [158, 34]], '带鱼', 0.48613545298576355), ([[11, 11], [133, 11], [133, 31], [11, 31]], '清在下图依次点击:', 0.46184659004211426), ([[199, 315], [235, 315], [235, 333], [199, 333]], '确认', 0.31680089235305786)]

得到坐标之后,为了更直观地观察到检测结果的正确性,可通过 PIL 把图像中文本框给绘制出来

import easyocr

from PIL import Image,ImageDraw

reader = easyocr.Reader(['ch_sim','en'],gpu=False,model_storage_directory='./model')

result = reader.readtext('ceshi.png')

img = Image.open('ceshi.png')

draw = ImageDraw.Draw(img)

for i in result:

draw.rectangle((tuple(i[0][0]),tuple(i[0][2])),fill=None,outline='red',width=2)

img.save("ceshi3.png")

效果如下

ceshi2

结果来看,除了图片中间的 带鱼 文本信息没有识别出来之外,其他区域的文本信息都能取得不错的识别和检测效果;

这里解释一下识别失败的原因,仔细观察的话会发现上面这张图并不是现实中真实存在的,而是通过深度学习技术生成的一个虚拟图像例如 GAN,里面的文本信息不是单一地将文字贴到图片上,我猜测是经过一些加密处理,

为了验证我的猜测,这里我借助了超级鹰打码平提供的API 接口,但最终依然得不到很好的识别效果(图中的蓝色字体位置代表打码平台识别结果)

image-20210121153608649

上面只介绍了easyocr 方法中 的一些常规参数,还有许多默认参数没有介绍,比如 batch_size 控制每次识别图片的数量,有了这个参数可以实现批量识别,但前提需要 GPU 大内存的支撑;adjust_contrast 调整图像对比度;

关于 easyocr 更多详细信息,感兴趣的小伙伴可看官方文档:Document API,

好了,以上就是本篇文章全部内容,最后感谢大家的阅读!

python 文字识别 准确率_关于OCR图片文本检测、推荐一个 基于深度学习的Python 库!...相关推荐

  1. opencv交通标志识别_教你从零开始做一个基于深度学习的交通标志识别系统

    教你从零开始做一个基于深度学习的交通标志识别系统 基于Yolo v3的交通标志识别系统及源码 自动驾驶之--交通标志识别 在本文章你可以学习到如何训练自己采集的数据集,生成模型,并用yolo v3算法 ...

  2. DeepEye:一个基于深度学习的程序化交易识别与分类方法

    DeepEye:一个基于深度学习的程序化交易识别与分类方法 徐广斌,张伟 上海证券交易所资本市场研究所,上海 200120  上海证券交易所产品创新中心,上海 200120    摘要:基于沪市A股交 ...

  3. 文字识别(五)--自然场景文本检测技术综述(CTPN, SegLink, EAST)

    转自:https://www.cnblogs.com/skyfsm/p/9776611.html 文字识别分为两个具体步骤:文字的检测和文字的识别,两者缺一不可,尤其是文字检测,是识别的前提条件,若文 ...

  4. python文字识别算法_Python图像处理之图片文字识别(OCR)

    OCR与Tesseract介绍 将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR).可以实现OCR 的底层库并不多,目前很多库都是使用共同的几 ...

  5. 3测试图片显示置信度_告别腾讯百度图片文字识别API调用,OCR图片文字识别就用这条代码...

    上期文章我们分享了tesseract的基本安装,本期我们来分享一下如何使用python与tesseract进行代码的编程来实现tesseract的文字识别 在开始本期文章之前,请认真阅读一下小编前期分 ...

  6. python可视化图表工具_酷炫的可视化图表工具来帮忙 深度评测五大Python数据可视化工具...

    原标题:酷炫的可视化图表工具来帮忙 深度评测五大Python数据可视化工具 不少Python用户的一大诉求是做出各种酷炫的可视化图表,而这就需要了解清楚工具特色,才好在制作不同类型图表顺利找到适合自己 ...

  7. python颜色识别原理_用opencv-python实现颜色检测

    这里有一个HSV颜色阈值脚本来确定下限和上限,而不是猜测和检查 import cv2 import sys import numpy as np def nothing(x): pass # Load ...

  8. python数据库开发 dga_DGA detection based on Deep Learning (CNN and GRU) (基于深度学习的DGA检测)...

    DGA-detection DGA detection based on Deep Learning (CNN and GRU) (基于深度学习的DGA检测) This project impleme ...

  9. Python文字识别之tesseract-ocr和EasyOCR

    Python文字识别之tesseract-ocr和EasyOCR 本文主要是将手机拍摄的图片文字通过Python OCR转换成Word文件,并尝试通过tesseract-ocr和EasyOCR两种方式 ...

最新文章

  1. Python+MySQL学习笔记(一)
  2. Hystrix配置参数查找方式
  3. 一段CyclicBarrier代码
  4. 贪心算法之用优先队列(priority_queue)实现哈夫曼编码问题
  5. dj鲜生-31-用户中心-功能需求分析
  6. JavaScript--小白入门篇1
  7. 理解基本包装类型Number,String,Boolean
  8. 读源码搞懂为什么Redis用单线程还这么快
  9. bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘(凸包)
  10. 【转】如何更改VS2005的启动环境
  11. 安卓平台病毒猖獗 日感染15000台
  12. 与孩子一起学编程10章
  13. 认识机器视觉环形光源
  14. 电力系统中的Kron简化,含MATLAB代码(全网唯一)
  15. 随机向量函数链神经网络(RVFLNN)
  16. cdr多页面排版_教你怎样在CDR怎样编号自动排版.doc
  17. 作为Fab-Liter战略的一部份,安森美剥离晶圆制造厂
  18. python标准数据类型叮叮叮
  19. HDU - 7047 - Link with Balls ( 插板法 + 组合数 )
  20. 网上赚钱第一步是借鉴与学习

热门文章

  1. GIS算法基础(五)矢量数据向栅格数据的转换(点,线算法实现)
  2. ·使用Xtext/Xtend 实现域专用语言DSL(1)
  3. 实时风控引擎项目部署
  4. 树莓派4B最新系统bullseye更换国内源方法
  5. 叠片过滤器:叠片过滤器使用注意事项
  6. 办公大师系列经典丛书 诚聘译者
  7. Webpack4.0各个击破(7)plugin篇
  8. icpc 昆明 A.AC
  9. 微信小程序-刷新当前页
  10. 激光电视和投影仪有什么区别