反图片验证

作者: Simon0903 | 来源:发表于2018-08-28 15:23 被阅读2次

前言:

验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写。

是一种区分用户是计算机还是人的公共全自动程序。可以防止:恶意破解密码、刷票、论坛灌水,

有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试。

这个问题可以由计算机生成并评判,但是必须只有人类才能解答。由于计算机无法解答CAPTCHA的问题,

所以回答出问题的用户就可以被认为是人类

作者:Simon0903

链接:https://www.jianshu.com/u/2b4bc3b5e6fc

來源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

.

图片验证码:

对图像验证码来讲,这类验证码大多是数字、字母的组合,国内也有使用汉字的。在这个基础上增加噪点、干扰线、变形、重叠、不同字体颜色等方法来增加识别难度。

对应方法如下:(需要使用pillow+pytessrt-ocr)

1、灰度处理

$ from PIL import Image #导入包

# (PIL中所涉及的基本概念有如下几个:通道(bands)、尺寸(size)、坐标系统(coordinate system)。)

$ img = Image.open("code.jpg")  # 打开图片

$ def binarizing(img,threshold=127):  

        img= image.convert('L')  # 将图片二值化(将整个图像呈现出明显的只有黑和白的视觉效果。0和255)

        pixdata = img.load()

        w, h = img.size

        for y in range(h):  # 遍历所有x,y坐标的每一个像素

            for x in range(x):

                if pixdata < threshold:      #大于阈值的127的直接定义为黑色(范围是0,255)

                    pixdata[x, y] = 0  #  小于阈值 = 白

                else:

                    pixdata[x, y] = 255  #   否则就是 = 黑

        return img  #返回黑白图片

2、降噪处理:

根据一个点A的RGB值,与周围的8个点的RBG值比较,设定一个值N(0<N<8).当A的RGB值和周围8个像素点的RGB值相等或小于N值时,则此点为噪点

$ def depoint(img):

$ pixdata = img.load()  #获取加载图片到本地

   w,h = img.size  #拿到所有x,y坐标的像素点

    for y in range(1,h-1):  #边界距要-1个像素点

        for x in range(1,w-1):   

        count = 0

         if pixdata[x,y-1] > 245:#上

                count = count + 1

          if pixdata[x,y+1] > 245:#下

                count = count + 1

          if pixdata[x-1,y] > 245:#左

                count = count + 1

          if pixdata[x+1,y] > 245:#右

                count = count + 1

          if count > 4:

                pixdata[x,y] = 255


未完待续......

相关文章

网友评论

    本文标题:反图片验证

    本文链接:https://www.haomeiwen.com/subject/wkifwftx.html