爬虫-验证码-图形验证码的识别

准备工作

step1:安装tesseract
step2:安装tesserocr

基本识别方法

#1.导包
import tesserocr
from PIL import Image

#2.创建image对象,打开本地文件
image = Image.open('code.jpg') 

#3.调用tesserocr的image_to_text()方法,传入Image对象完成识别
result = tesserocr.image_to_text(image)
print(result)

运行结果:
在这里插入图片描述可以看到,识别效果与真实值存在差异,这是因为验证码内的多余线条干扰了图片的识别。

对于这种情况,需要进行额外的处理,如转灰度、二值化等操作。见下面操作。

进一步处理

转灰度

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

image = image.convert('L')
image.show()

二值化处理

convert(‘1’)方法

利用 Image 对象的 convert() 方法参数传入 1 即可将图片进行二值化处理

image = image.convert('1')
image.show()

指定二值化的阈值

image = image.convert('L')  #将图片转化为灰度图像
threshold = 80 #变量threshold代表二值化阈值,阈值设置为 80
table = []
for i in range(256):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)

image = image.point(table, '1')
image.show()

完整代码

#1.导包
import tesserocr
from PIL import Image

#2.创建Image对象,打开本地图片
image = Image.open('code2.jpg')

#3.对图片进行转灰度和二值化处理,减少干扰,提高准确性
##3.1利用Image对象的convert('L')方法将图片转化为灰度图像
image = image.convert('L')
image.show() #该方法可以查看转换效果

##3.2指定二值化阈值,实现二值化处理
threshold = 127
table = []
for i in range(256):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)
image = image.point(table, '1')
image.show()


#4.调用tesserocr的image_to_text()方法,传入Image对象完成识别
result = tesserocr.image_to_text(image)
print(result)

原始图片:
在这里插入图片描述
灰度处理效果:
在这里插入图片描述

二值化效果:
在这里插入图片描述

识别效果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值