图片验证码识别
Posted AuraTech
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图片验证码识别相关的知识,希望对你有一定的参考价值。
开学啦!不要忘记学习哦!
在爬虫的过程中经常遇到验证码,这可真是一大难题,今天给大家带来的是识别图形验证码。
OCR,英文全称叫做Optical Character Recognition,中文名叫做光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程。
操作系统:Windows7
python版本:3.6.5
1、安装tesseract:
2、配置环境变量
3、在python中使用tesseract
安装库pytesseract:
pip install pytesseract
4、验证安装:
准备一张验证码
import pytesseract
from PIL import Image
img = Image.open('code.png')
code = pytesseract.image_to_string(img)
print(code)
13604 #输出
哈哈哈,这个输出真的很糟糕诶
你还可以添加一行
img.convert('L')
再看看输出
嗝儿~演砸了,这次居然啥都没有了哈哈哈
再将这几行代码添加进去呢
threshold = 80
table = []
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~
以上是关于图片验证码识别的主要内容,如果未能解决你的问题,请参考以下文章