前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >验证码的识别

验证码的识别

作者头像
不断折腾
发布2019-09-23 10:20:14
1.5K0
发布2019-09-23 10:20:14
举报

概要:在爬虫中我们时常会碰见登录时候需要识别验证码的问题, 当然,验证码有很多,本篇文章只说最普通的图片验证码。

1、首先需要下载OCR

OCR,光学字符识别,作用是通过扫描图片,将其转换为文本。

百度下载即可。

2、我们需要安装tesserocr、PIL

pip3 install tesserocr 如果安装出错可以去:https://github.com/simonflueckiger/tesserocr-windows_build/releases?from=%E6%96%87%E7%AB%A0%E9%A1%B5%E5%86%85%E9%93%BE%E6%8E%A5下载wheel文件。

PIL图片处理库,就不多说了。

3、识别

3.1、首先随便去网站找几个验证码

3.2、识别测试

  • open()方法打开图片
  • show()方法弹出图片
  • image_to_text()将图片中的字符提取出来。

结果:

我们可以看到结果不是很准确,我们可以试试做一些其他的处理。

3.3、处理验证码

一、灰度化处理

用convert()传入L进行灰度化处理

二、二值化处理

在此之前需要了解像素值,用0-255表示,0表示的是黑,255表示的白。

pixdata = image.load()方法是获取到图片的像素,通过pixdata[x,y]来获取某一个点的像素值。

w,h = image.size 获取图片的宽度和高度。

通过for循环来遍历图片上的像素点,因为在此之前我们已经将图片灰度化处理,现在的图片非黑即白,因此我们定义一个阈值(threshold=150,你需要根据自己的图片更改不同的值),当图片大于这个值,可以理解为靠近白色,即是用来干扰我们的视线的,所以我们把这些像素直接修改成255(白色),反之小于该阈值,我们把他修改成0(黑色)。

三、降噪

邻域像素算法:

判断一个点的上下左右四个点的像素值,如果有3个或以上的点的像素值大于245,可以认为是干扰我们视线的点,我们便将该像素点变为白色。

因此,我们将代码修改为:

import tesserocr from PIL import Image image=Image.open('code.jpg') #将图片进行灰度化 image=image.convert('L') #读取像素值 pixdata = image.load() #获取到图片的宽度和高度 w,h = image.size #设置一个阈值 threshold=150 #遍历循环该图的像素点,判断 for y in range(1,h-1): for x in range(1,w-1): if pixdata[x,y] < threshold: pixdata[x,y] = 0 if pixdata[x,y] >= threshold: pixdata[x,y] = 255 count = 0 if pixdata[x,y-1] > 245: count+=1 if pixdata[x,y+1] > 245: count+=1 if pixdata[x-1,y] > 245: count+=1 if pixdata[x+1,y] > 245: count+=1 if count > 2: pixdata[x,y] = 255 image.show() result=tesserocr.image_to_text(image) print(result)

结果图:

4、降噪其实还有很多方法,你也可以试图写出自己判断的方式

这个验证码识别的效率比较低,我们不追求100%的成功,我们需要了解的这个思路。

有兴趣的可以自己训练自己的字体库,来提高我们的识别效率。

5、完。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python入门到放弃 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文字识别
文字识别(Optical Character Recognition,OCR)基于腾讯优图实验室的深度学习技术,将图片上的文字内容,智能识别成为可编辑的文本。OCR 支持身份证、名片等卡证类和票据类的印刷体识别,也支持运单等手写体识别,支持提供定制化服务,可以有效地代替人工录入信息。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档