图片验证码识别

Posted AuraTech

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图片验证码识别相关的知识,希望对你有一定的参考价值。

开学啦!不要忘记学习哦!

在爬虫的过程中经常遇到验证码,这可真是一大难题,今天给大家带来的是识别图形验证码。


pytesseract


OCR,英文全称叫做Optical Character Recognition,中文名叫做光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程。

操作系统:Windows7

python版本:3.6.5


1、安装tesseract:

2、配置环境变量

3、在python中使用tesseract

    安装库pytesseract:

pip install pytesseract

4、验证安装:

    准备一张验证码


图片验证码识别

import pytesseractfrom PIL import Imageimg = Image.open('code.png')code = pytesseract.image_to_string(img)print(code)13604 #输出

哈哈哈,这个输出真的很糟糕诶

你还可以添加一行

img.convert('L')

将图片转化为灰度图片,来看看效果吧


图片验证码识别


再看看输出


嗝儿~演砸了,这次居然啥都没有了哈哈哈

再将这几行代码添加进去呢


threshold = 80table = []for i in range(256):  if i < threshold:    table.append(0)  else:    table.append(1)img = img.point(table, '1')


这次再来看看图片变成什么样了

图片验证码识别

再看看输出

cre, |

我滴妈耶,这真的也太蠢了吧,这么简单的图片都无法识别,要你何用,辣鸡!

所以这个光学识别真的只能识别一些简单的验证码,不过你可以通过给他成千上万张图片训练他,来提高他的准确率。不过这样真的也是太麻烦了,要识别验证码还得靠打码平台。


图片验证码识别
打码平台


据说这些打码平台是有专门的人给你人眼识别,将他们看到的内容返回给你,所以精确度还是挺高的。

这个打码平台就很多了,小编选择的是超级鹰(我觉得应该收点广告费)。在刚注册时,他会送你1000题分,根据你选择的验证码类型进行扣分,当然,答错应该是不会扣分的。

它支持英文数字、中文汉字、纯数字、纯英文、任意特殊字符、问答类型等多种类型的图片验证码


图片验证码识别


在注册了账号后,进入开发者文档


图片验证码识别


到用户中心去生成一个软件id,点击python图标,获取接口文件


图片验证码识别


来看这个接口文件


图片验证码识别


代码一共只有40多行,在这个文件里定义了一个类Chaojiying_Client;

在初始化的时候需要传入三个参数username, password, soft_id,分别对应你的用户名,用户密码,和刚刚生成的软件id;

在PostPic方法里有两个参数im, codetype,分别是图片字节和题目类型;

在末尾return r.json(),返回了识别内容的json字符串。

所以,如果我们需要识别验证码,只需要在py文件里导入这个类,传入对应的参数,调用PostPic方法,并接收返回的值就欧克啦。

现在就让我们来看看这个打码平台的效果如何吧

from chaojiying import Chaojiying_Client
chaojiying=Chaojiying_Client('your username''yourpassword''your soft_id')im = open('code.png''rb').read()result = chaojiying.PostPic(im, 2004)   #输出:{'err_no'0'err_str''OK''pic_id''9078822202283100014''pic_str''7364''md5''df7817ca734c3353fe7d820d09b30d31'}print(result['pic_str'])7364 #输出

忒霸,跪了跪了,完全正确!

好啦!本期内容就到这里,不要取关哦,咱们下期再见,mua~




以上是关于图片验证码识别的主要内容,如果未能解决你的问题,请参考以下文章

第二十三节:scrapy爬虫识别验证码图片验证码识别

图片识别之验证码识别

Java实现超简单验证码识别

Selenium UI自动化验证码:识别+输入

用tesseract实现图片验证码降噪识别

opencv 验证码 识别