Python爬虫基础:验证码的爬取和识别详解( 三 )


文章插图
 
看到结果,只能说Amazing!60张图片居然识别出了65张,并且还有27张为未识别出文本的,这不是我想要的结果~先来简单看下问题出在哪里,看到“Vertigo Captcha Image.jpg"这张图名出现了两次,怀疑是在识别过程中由于被干扰,所以识别成两行文字输出了,这样就很好解释为什么多出来5张验证码图片了 。可是!为什么会有这么多未识别出文本呢,而且英文数字组成的验证码识别成中文了,看样子,不对验证码图片进行去干扰处理,仅靠OCR来识别的想法果然还是行不通啊 。那么接下来我们便使用图像处理的方法来重新识别验证码吧 。
还是介绍验证码时用的这张图

Python爬虫基础:验证码的爬取和识别详解

文章插图
 

Python爬虫基础:验证码的爬取和识别详解

文章插图
 
这张图也没能被识别出来,让人头秃 。接下来就对这张图片进行一定处理,看能不能让OCR正确识别
from PIL import Imagefilepath = 'D:******验证码图片AncientMosaic Captcha Image.jpg'image = Image.open(filepath)# 传入'L'将图片转化为灰度图像image = image.convert('L')# 传入'1'将图片进行二值化处理image = image.convert('1')image.show()这样子转化后再来看下图片变成什么样了?
Python爬虫基础:验证码的爬取和识别详解

文章插图
 
确实有些不同了,赶紧拿去试试能不能识别,还是失败了~~继续修改
from PIL import Imagefilepath = 'D:******验证码图片AncientMosaic Captcha Image.bmp'image = Image.open(filepath)# 传入'L'将图片转化为灰度图像image = image.convert('L')# 传入'l'将图片进行二值化处理,默认二值化阈值为127# 指定阈值进行转化count= 170table = []for i in range(256): if i < count: table.append(0) else: table.append(1 )image = image.point(table,'1')image.show()这里我将图片保存成了bmp模式,然后指定二值化的阈值,不指定的话默认为127,我们需要先转化原图为灰度图像,不能直接在原图上转化 。然后将构成验证码的所需像素添加到一个table中,然后再使用point方法构建新的验证码图片 。
Python爬虫基础:验证码的爬取和识别详解

文章插图
 

Python爬虫基础:验证码的爬取和识别详解

文章插图
 
现在已经识别到文字了,虽然我不知道为啥识别成了“珍”,分析之后发现是因为z我在设置参数设置了“language_type”为“CHN_ENG”,中英文混合模式,于是我修改成“ENG”英文类型,发现可以识别成字符了,但依然没有识别成功,尝试其他我所知道的方法后,我表示很无语,我决定继续尝试PIL库的其他方法试试 。
# 找到边缘image = image.filter(ImageFilter.FIND_EDGES)# image.show()# 边缘增强image = image.filter(ImageFilter.EDGE_ENHANCE)image.show()
Python爬虫基础:验证码的爬取和识别详解

文章插图
 
还是不能正确识别,我决定换个验证码试试 。。。。。。
Python爬虫基础:验证码的爬取和识别详解

文章插图
 
我找了这张带有阴影的
from PIL import Image,ImageFilterfilepath = 'D:******验证码图片CrossShadow2 Captcha Image.jpg'image = Image.open(filepath)# 传入'L'将图片转化为灰度图像image = image.convert('L')# 传入'l'将图片进行二值化处理,默认二值化阈值为127# 指定阈值进行转化count= 230table = []for i in range(256): if i < count: table.append(1) else: table.append(0)image = image.point(table,'1')image.show()简单处理后,得到这样的图片:
Python爬虫基础:验证码的爬取和识别详解

文章插图
 
识别结果为:
Python爬虫基础:验证码的爬取和识别详解

文章插图
 
识别成功了,老泪纵横!!!看样子百度OCR还是可以识别出验证码的,不过识别率还是有点低,需要对图像进行一定处理,才能增加识别的准确率 。不过百度OCR对规范文本的识别还是很准确的 。
那么与其他验证码相比,究竟是什么让这个验证码更容易被OCR读懂呢?