python3爬虫之验证码的识别——图形验证码
环境安装见博文《python3爬虫之验证码的识别——环境安装》
图形验证看似是最为简单的验证,但是因为涉及到了很多图像处理方面的知识,想要做一个通用的验证程序并不简单
并且tesserocr自带的训练库识别的效果真是差强人意啊
本例通过中国知网注册页面的验证码为例 http://my.cnki.net/elibregister/commonRegister.aspx
通过浏览器工具将验证码图片保存到python工程文件下
主要代码为(验证码图片不经过任何处理):
import tesserocr from PIL import Image image = Image.open('tzxw.jpg') image.show() res = tesserocr.image_to_text(image)# 在pycharm中有兼容性问题 print(res)
ps:tesserocr.image_to_text( ) 这个方法可能在PyCharm里会标红,但是不影响运行
输出结果为空,即未识别出来,因此我们需要将图片处理一下,例如减少背景噪点、增加对比度之类
本例中采用设定一个阈值将图片转换为二值图
threshold = 135 # 阈值 table = [] for i in range(256): if i < threshold: table.append(0) else: table.append(1) image = image.point(table,'1')
阈值设定的大小与识别结果息息相关,当然不同的图片可能会有不同的阈值才能识别出来。因此这个方法并不是一个通用的方法
本例中输出结果:
(二值图)
输出结果也是tzxw
but!
换了几张一样大小的图测试发现,阈值的选择各不相同,有的图片就是怎么都识别不了或者识别错误