zoukankan      html  css  js  c++  java
  • python简单验证码识别

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

    mg01mg

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

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

     

    以下是识别验证码代码:

    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

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

    mg_new

    res01

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

    手机图片:

    time

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

    rest

    用代码处理后识别:

    rest02

  • 相关阅读:
    08.3 属性描述符__get__ __set__ __delete__
    08.2 __getattr__ 和 __getattribute__
    08.1 property 装饰器
    appium脚本编写,元素定位,隐式等待
    appium的安装和介绍
    docker镜像构建
    dockerfile的语法和指令
    docker的registry介绍
    docker-compose使用
    docker部署Jenkins
  • 原文地址:https://www.cnblogs.com/wx2276/p/10944680.html
Copyright © 2011-2022 走看看