Win10下自动识别简单验证码

2017/3/5 验证码

本文是在win10系统Python3.5的环境下识别简单的二维码图片。需要先安装好Python和pip,这里 (opens new window)有简单的安装步骤。

1.首先安装PIL

Python Imaging Library (PIL)是Python下功能强大的用来处理图片的图像处理标准库,

我们可以直接到官网下载 (opens new window)安装包进行安装,也可以使用pip命令安装,有些地方是使用pip install PIL命令,但是我在3.5的时候这个命令会提示找不到相应版本的pil。后面发现在3.4以后就需要使用pip install pillow命令来安装。

2.安装pytesseract,直接使用pip install pytesseract即可

3.安装tesseract-ocr

这个安装起来相对比较费时间,不能直接使用pip进行安装,需要下载再进行安装。在Windows下需要下载相应的exe文件安装,据说官方好像不维护最新的版本的win版本的安装包。我们可以在https://github.com/tesseract-ocr/tesseract/wiki/Downloads (opens new window)上面下载相应版本的安装包,也可以自行找其他地方下载,下载比较慢。下载完成后直接安装就行,会自动把路径加入环境变量,但是需要重启电脑才会生效。安装完成之后可以打开cmd输入tesseract,如果出现相应的选项信息那就表示安装成功了,否则需要检查是否正确配置环境变量等。

有了这三个工具,我们就可以开始来识别二维码了。以下是简单的使用

from PIL import Image import pytesseract

verification = pytesseract.image_to_string(Image.open('code.png'), lang="eng") print(verification)

如果我们在前面的第3步没有安装正确的话,会提示我们pytesseract调用出错。以上代码正确运行的话就能够识别简单的验证码了。

这种验证码可以轻松的识别出来结果为1234

这种验证码对识别就有一定的干扰作用了,原始输出为**'FYS5**

至于更复杂的验证码依靠最直接的识别就有些困难,识别率就很低了,这个时候可以考虑先对图片进行一定的处理,尽可能的去除干扰因素,并且我们还可以对样本进行训练以提高样本的识别率。

对图片进行处理一般可以进行以下几个基本步骤:

# 1. 将图片转化为灰度图

image = image.convert('L')

# 2. 对图片进行二值化处理,可以采用阈值分割法,有固定阀值和自适应阀值等方法。

table = [] for i in range(256):
if i < 140:
table.append(0)
else:
table.append(1) image= image.point(table,'1')

# 3. 去除噪点

降噪的算法一般都是一些滤波算法,但是对于验证码来说可能效果并不是很好。因此简单的去噪就是判断一个黑点周围的八个点中是黑色像素点的个数(白色像素的点是不需要判断的),低于某个值认为是是噪点,这种方法对于单个的噪点很有效,但是对于面积较大的噪点就无能为力了。

通过以上几步就能得到较为清楚的验证码图片了,可以提高不小的识别率。