Python爬虫实战,tesserocr模块,Python实现简单的图片验证码识别

前言

这一期我们利用Python实现简单的图片验证码识别

废话不多说,让我们愉快地开始吧~

开发工具

Python版本: 3.7.4

相关模块:

tesserocr模块;

以及一些python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

图片验证码的识别

我们首先做最简单的一种验证码,即图形验证码。这种验证码出现的最早,现在也很常见,一般由4位字母或数字组成。

举个简单的例子,中国知网的注册页面就有类似的验证码。网页链接如下:

https://my.cnki.net/Register/CommonRegister.aspx

Python爬虫实战,tesserocr模块,Python实现简单的图片验证码识别_第1张图片

表单的最后一项就是图形验证码,我们必须完全正确的输入图中的字符才可以完成注册。

获取验证码

为了便于实验,我们先将验证码的图片保存下来。

打开开发者工具,找到验证码元素。验证码元素是一张图片,这张图片的链接是:

https://my.cnki.net/Register/CheckCode.aspx

打开链接就可以看到一张,图片,那个就是图片验证码,如下图所示:

Python爬虫实战,tesserocr模块,Python实现简单的图片验证码识别_第2张图片

识别测试

将验证码图片放在项目的根目录下,用tesserocr库识别该验证码,代码如下所示:

import tesserocr
from PIL import Image

image = Image.open('test3.jpg')
result = tesserocr.image_to_text(image)
print(result)

首先创建了一个image对象,然后调用了tesserocr下的image_to_text()方法。传入该image对象即可完成识别。

然而,有些时候也难免会识别错误。因此,我们需要对图片再做处理,如转灰度、二值化操作。

我们可以利用Image对象的convert()方法传入参数L,即可将图片转化为灰度图像。

具体代码,如下所示:

from PIL import Image


image = Image.open('test3.jpg')
image = image.convert('L')
image.show()

传入1,即可将图片进行二值化处理,如下所示:

import tesserocr
from PIL import Image


image = Image.open('test3.jpg')
image = image.convert('1')
image.show()

我们还可以指定二值化的阀值。上面的方法采用的是默认阀值127.不过,我们不能直接转化为原图,首先要将原图先转为灰度图像,然后再制定阀值,当我们把验证码中的线条都去掉之后再重新来识别图片,会更加准确。

具体代码,如下所示:

import tesserocr
from PIL import Image

image = Image.open('test3.jpg')
image = image.convert('L')
threshold = 123 # 指定阀值
table = []
for i in range(256):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)
image = image.point(table, '1')
image.show()

result = tesserocr.image_to_text(image)
print(result)

Python爬虫实战,tesserocr模块,Python实现简单的图片验证码识别_第3张图片

你可能感兴趣的:(Python爬虫实战,tesserocr模块,Python实现简单的图片验证码识别)