python爬虫基础(8:验证识别之图片码验证)

上篇文章讲了模拟登录,在有些时候,我们想要登录成功,还需要通过一些验证,这次就来讲讲这种情况的处理

tesserocr模块

类似于下图中的这种验证,我们可以通过一个图片识别库 tesserocr 来进行识别

python爬虫基础(8:验证识别之图片码验证)_第1张图片

 

例如要识别这张图片

python爬虫基础(8:验证识别之图片码验证)_第2张图片

代码:

# 导入Image图片对象
from PIL import Image
# 导入图片识别包
import tesserocr


# open()方法获取要识别的图片
image = Image.open('CheckCode.png')
# image_to_text()方法将图片内容转化为文本
result = tesserocr.image_to_text(image)
# 打印转化结果
print(result)

结果:

python爬虫基础(8:验证识别之图片码验证)_第3张图片

但是有些时候由于干扰线条的存在,识别并不是很准确,我们需要去除线条来提高识别率

去除线条

1,先将彩色图片转为灰度图像

# 导入Image图片对象
from PIL import Image
# 导入图片识别包
import tesserocr


# open()方法获取要识别的图片
image = Image.open('CheckCode.png')
# 参数‘L’将图片转为灰度图像
image = image.convert('L')
# 显示图片
image.show()

结果:

python爬虫基础(8:验证识别之图片码验证)_第4张图片

可以看到虽然转为了灰度图像,但条纹还在

2.利用二值化去除条纹

什么是二值化?

可以这样去看待图像上的每个像素点:255代表纯黑,0代表纯白,127代表灰,可知比如234就代表比较黑,34代表挺白的......

我们将 [0 ~ 127] 的偏白的像素全部不要,将 [127 ~ 255] 的偏黑的像素全部保留,这样就没有灰色的线条干扰了,就可以提高识别率了

# 导入Image图片对象
from PIL import Image
# 导入图片识别包
import tesserocr


# open()方法获取要识别的图片
image = Image.open('CheckCode.png')
# 参数‘L’将图片转为灰度图像
image = image.convert('L')
# 显示图片
# image.show()
# 设置筛选值
threshold = 127
# 设置一个存放像素信息的列表
table = []
# 色域为256
for i in range(256):
    # 如果像素偏白
    if i < threshold:
        # 去除偏白的像素
        table.append(0)
    # 像素偏黑
    else:
        # 保留偏黑的像素
        table.append(1)
# 按像素信息绘制
image = image.point(table, '1')
# 显示图片
image.show()

结果

这样得到的图片就黑白分明了,也能大大提高识别率了

全部代码:

# 导入Image图片对象
from PIL import Image
# 导入图片识别包
import tesserocr


# open()方法获取要识别的图片
image = Image.open('CheckCode.png')
# 参数‘L’将图片转为灰度图像
image = image.convert('L')
# 显示图片
# image.show()
# 设置筛选值
threshold = 127
# 设置一个存放像素信息的列表
table = []
# 色域为256
for i in range(256):
    # 如果像素偏白
    if i < threshold:
        # 去除偏白的像素
        table.append(0)
    # 像素偏黑
    else:
        # 保留偏黑的像素
        table.append(1)
# 按像素信息绘制
image = image.point(table, '1')
# 显示图片
# image.show()
# image_to_text()方法将图片内容转化为文本
result = tesserocr.image_to_text(image)
# 打印转化结果
print(result)

 

你可能感兴趣的:(python爬虫,Python爬虫基础)