python 验证码提取自动登录 黑白图片转换
来源:互联网 发布:多益网络论坛注册 编辑:程序博客网 时间:2024/04/30 08:30
我遇到的图片是黑底白色字符外加各种不同颜色的像素点,为了更好测试多多上次几张
如下图所示:
引用的头文件:
# 以下为图像识别引用import Image,ImageEnhance,ImageFilterimport sysfrom PIL import Imagefrom pytesser import *
经过在网上多次搜索和查询,以及自己的测试,发现 直接对这样的图片,经过这种处理后
im=im.convert('1')
并不能完全很好的得到图片中的验证码字符
code=image_to_string(img)
而且这函数貌似对白底黑色处理比较好.
所以,我要对图片处理成白底黑字的方式
网上搜索了一圈,并没有现成的代码可供参考.
对于这样的图片处理,大概思路就是:
使用黑色填充白色,使用白色填充非白色
所以在将图片处理称灰色后,将图片进行反白:
def InverseWhite(img):w,h=img.sizedata=list(img.getdata())for x in range(w):for y in range(h):#img.putpixel((x,y),255-data[y*w+x])if data[y*w+x]!=255:#255是白色 0是黑色img.putpixel((x,y),0)else:img.putpixel((x,y),255)return img
这样修改后的图片基本不需要继续处理,可以直接匹配里面的代码了.
所以全部代码差不多就是这样
由于这类验证码都只是简单的纯数字型的,而且都是固定的4位,使用python的匹配是会出现字母以及特殊字符的
所以需要对这类图片获得的验证码进行一些处理,经过多次的验证,我得到了一下替换方案:
rep={'O':'0','()':'0','<)':'0','@':'0','I':'1','L':'1','i':'1','f':'1','l':'1','/':'1','\\':'1','Z':'2','z':'2','$':'3','A':'4','a':'4','\'S':'5',';':'7','S':'8','s':'8','%':'8','P':'','p':'','-':'','*':'',',':'','(?':'0'};
得到后的验证码需要进行一些替换:
主要应用为
code=image_to_string(img)text=codefor r in rep:text=text.replace(r,rep[r])
综上所得到的全部代码如下
#!/usr/bin/python # -*- coding: utf-8 -*-import Image,ImageEnhance,ImageFilterimport sysfrom PIL import Imagefrom pytesser import *# 黑白反色,白色替换# 此处N直接为255# 小于N的 被替换成黑色# 大于等于N的 被替换成白色def InverseWhite(img):w,h=img.sizedata=list(img.getdata())for x in range(w):for y in range(h):if data[y*w+x]!=255:#255是白色 0是黑色img.putpixel((x,y),0)else:img.putpixel((x,y),255)return imgrep={'O':'0','()':'0','<)':'0','@':'0','I':'1','L':'1','i':'1','f':'1','l':'1','/':'1','\\':'1','Z':'2','z':'2','$':'3','A':'4','a':'4','\'S':'5',';':'7','S':'8','s':'8','%':'8','P':'','p':'','-':'','*':'',',':'','(?':'0'};if __name__=='__main__':image_name = u"image\\"#这个自己修改,我的测试图片都保存在这里,而且都是从1.png到n.png的形式for i in range(1,20):im = Image.open(image_name+"%s.png"%(i))im=im.convert('1')#反白 转换成白底黑字img=InverseWhite(im)im.save(u"%s.jpg"%(i))code=image_to_string(img)text=codefor r in rep:text=text.replace(r,rep[r])print "[+]:%s:%s---->%s"%(i,code,text)
需要这里提一下的是,上面的代码针对这样的图片并不是能够完全100%的匹配到验证码.
但是这对于模拟登录并不是难题,匹配不到一个可以重新换一个匹配,经过我自己的测试一般3-5次就能成功登录.
希望有碰到类似图片的处理的你有一些帮助
0 0
- python 验证码提取自动登录 黑白图片转换
- Python完全识别验证码自动登录
- Python爬虫之自动登录与验证码识别
- Python爬虫之自动登录与验证码识别
- Python爬虫之自动登录与验证码识别
- Python爬虫之自动登录与验证码识别
- python带验证码登录
- python获取登录验证码
- Android提取短信验证码并自动填写
- ecshop验证码错误、禁用验证码登录自动退出
- python+selenium识别验证码并登录
- python+selenium识别验证码并登录
- 【Python模拟登录与验证码识别】
- Python爬虫实现验证码登录
- python识别验证码并登录
- Python识别平台登录验证码
- 用python实现登录验证码
- python 登录验证
- poj2229
- tomcat如何配置环境变量
- Leetcode_Validate Binary Search Tree
- 从一个含有很多不同元素的大数组中寻找10个最大的数
- 悬浮代码 JS广告代码,JS特效代码
- python 验证码提取自动登录 黑白图片转换
- Maven的学习资料收集--(七) 构建Spring项目
- Android学习笔记:Activity和main.xml文件
- 做个记录 越狱ios设备 获取root权限(测试没通过)
- Ubuntu一些命令(自己总结,待续)
- C++头文件保护符和变量的声明定义
- hibernate注解方式实现复合主键
- 2014.8.4我出的模拟赛【你的名字叫czy是吧】
- leetcode_Binary Tree Preorder Traversal