准备工作
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)
原始图片:
灰度处理效果:
二值化效果:
识别效果: