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

python简单验证码识别

作者头像
py3study
发布2020-01-15 12:08:54
1.5K0
发布2020-01-15 12:08:54
举报
文章被收录于专栏:python3python3

在学习python通过接口自动登录网站时,用户名密码、cookies、headers都好解决但是在碰到验证码这个时就有点棘手了;于是通过网上看贴,看官网完成了对简单验证码的识别,如果是复杂的请看大神的贴这里解决不了;

mg01
mg01
mg
mg

以上两张为网站的上比较简单的验证码,没有加复杂的干扰线也没有对字体进行弯曲;

识别的代码用到的python模块有pytesseract,PIL;pytesseract在win下需要tesseract-ORC支持,这个需要上网下载安装,并在win的系统环境变量下配置安装路径,运行tesseract –v 显示当前tesseract版本信息表示设置安装正常

以下是识别验证码代码:

代码语言:javascript
复制
import pytesseract
from PIL import Image

def getcode(image):
    image = Image.open(image)
    #image.show() #查看打开的验证码
    im = image.convert("L") #把图片转成L单通道,这样像素点的值在[0~255]之前,区别于普通的RGC图片为三通道像素点的值在[0~255,0~255,0~255]

    #把图片的白色边框设置为黑色,如果没有可认忽略这个步骤
    #1.把图片上下两条边框设置为黑色
    for x in range(im.size[0]):
        im.putpixel((x,0),0)
        im.putpixel((x,im.size[1] - 1),0)
    #2.把图片左右两条边框设置为黑色
    for y in range(im.size[1]):
        im.putpixel((0,y),0)
        im.putpixel((im.size[0] - 1,y),0)

    #将图片色像素值在150以上的设置为白色,否则为黑色
    for i in range(im.size[0]):
        for j in range(im.size[1]):
            if(im.getpixel((i,j)) > 150):
                im.putpixel((i,j),255)
            else:
                im.putpixel((i,j),0)

    #im.show() #查看打开的验证码
    #im.save("xxxxxxxxxxxx") #保存图片
    code = pytesseract.image_to_string(im)
    print(code)

if __name__ == '__main__':
    getcode("图片的路径")

运行结果:

res
res

*注意*如果有边框的图片在处理时没有外理边框,得到的图片如下,在程序识别时就会影响准确度:

mg_new
mg_new
res01
res01

以下是作者对手机拍的一张图片直接识别和处理后识别的如果

手机图片:

time
time

直接识别:(我们看到程序无法识别)

rest
rest

用代码处理后识别:

rest02
rest02
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档