图像识别应用很广泛,比如识别验证吗、人脸识别等等,python用到的识别技术主要有两种,分别是opencv和tesseract,opencv专注机器视觉,tesseract专注字符识别,所以从领域来说,opencv更广,opencv有时间再介绍,这里主要介绍tesseract。
介绍tesseract之前,先来了解下什么是OCR?
OCR,即Optical Character Recognition,光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程,对应图形验证码来说,它们都是一些不规则的字符,这些字符是由字符稍加扭曲变换得到的内容,我们可以使用OCR技术来讲其转化为电子文本,然后将结果提取交给服务器,便可以达到自动识别验证码的过程。
tesserocr是Python的一个OCR识别库,但其实是对tesseract做了一层Python Api的封装,核心还是tesseract,所以在安装tesserocr之前,需要先安装tesseract;
而tesseract是google开源的OCR。
Windows:
安装tesserocr:
https://digi.bib.uni-mannheim.de/tesseract/
因为是window10 64位,所以这里下载的是最新的版本tesseract-ocr-w64-setup-v5.0.0.20190623.exe
安装好之后,还需要设置环境:
我的电脑-高级系统设置-环境变量
1、找到用户path变量,新增一个,把Teseract-OCR安装路径贴入:
2、找到系统变量,新建一个,把Teseseract-OCR的tessdata路径贴入:
设置完成后,打开CMD,验证是否生效:
3、如果读取中文文本图片,还需要加载中文语言包(点此直接下载中文包):
https://github.com/tesseract-ocr/tessdata
下载后,放到tessdata目录:
D:\Program Files\Tesseract-OCR\tessdata
Mac安装
brew install tesseract
或者指定安装:
brew install --with-training-tools tesseract //安装tesseract, 同时安装训练工具 brew install --all-languages tesseract //安装tesseract,同时它还会安装所有语言 brew install --all-languages --with-training-tools tesseract //安装附加组件 brew install tesseract //安装tesseract,但是不安装训练工具,这里选择这种方式进行安装
Linux CentOS安装:
yum install tesseract
完成以上Tesseract-OCR安装后,接下来安装python扩展库:
pip3 install Pillow pip3 install pytesseract
python加载Window的Tesser-OCR应用,要修改pytesseract三方库的pytesseract.py脚本,找到pytesseract.py,加入Tesseract-OCR应用程序路径,这里我的Python3目录是:
D:\Python3\Lib\site-packages\pytesseract\pytesseract.py
新建一个python脚本:
# coding=utf8 import pytesseract from PIL import Image im = Image.open('1.png') string = pytesseract.image_to_string(im) print(string)
虽然简单的图形验证码可以识别出来,但是复杂的可能输出为空或者识别不准确,可能受图片复杂度、像素等因素干扰,这个时候就需要对图片进行处理,比如图像降噪、锐化、二值化处理,甚至模型学习(如TensorFlow )等等,用以提高识别度,这部分后面有时间再整理,当然也可以使用第三方识别库,比如百度智能云服务。
比如下面这个验证码,直接识别是【5248】,经过一番处理后,得到【5218】
代码如下:
# coding=utf8 import pytesseract from PIL import Image im = Image.open('1.png') im = im.convert('L') # 这个是二值化阈值 threshold = 150 table = [] for i in range(256): if i < threshold: table.append(0) else: table.append(1) # 通过表格转换成二进制图片,1的作用是白色,不然就全部黑色了 im = im.point(table, "1") im.show() string = pytesseract.image_to_string(im) #string = pytesseract.image_to_string(im, lang="chi_sim", config='--psm 6') #如果是识别中文,且导入了中文语言包,则可以用这个识别中文。 print(string)
转载请注明:永盟博客 » 图像识别-通过OCR-tesserocr识别库识别图像电子文本