MENU

验证码自动识别的研究

March 30, 2021 • Read: 2538 • Code

前言

简单地研究了一下WHMCS验证码的自动识别方法,采用k近邻算法进行分类识别


环境

Python2.7

使用模块:

pillow, numpy, sklearn

过程

既然要研究验证码,肯定先得获取大量的验证码图片

"""
获取验证码
"""
import requests
import uuid

for i in range(1, 201):
    resp = requests.get('http://www.xxxxx.com/includes/verifyimage.php')
    with open('whmcs/' + str(uuid.uuid4()) + '.png', 'wb') as f:
        f.write(resp.content)

通过循环下载来获取大量的验证码图片

然后就开始我们的研究了

一、转为灰度图

首先,我们利用pillow打开图片。

from PIL import Image

image = Image.open('test.png')

in.jpg

然后把图片转为灰度图

image = image.convert('L')

二、增强色差

将图片转换为numpy数组

import numpy as np

image = np.asarray(image)
print(image.shape)

打印一下图片的长宽
20210330003857.jpg
可见图片长100像素,高24像素。

我们需要将灰度图中大于100左右的像素转换为255,也就是把肉眼看上去比较黑的像素转为完全黑。

image = (image > 100) * 255

处理后的图片

out.jpg

三、切割字符

由上图可以看出,此时的干扰已经接近没有了,剩下的部分也不影响我们的识别工作。

def split_letters(image):
    letters = [image[:, 23: 33], image[:, 32: 42], image[:, 41: 51], image[:, 50: 60], image[:, 59: 69], image[:, 69: 79]]
    return letters

四、构建knn分类器并训练识别

from sklearn.neighbors import KNeighborsClassifier
X, y = load_dataset()
knn = KNeighborsClassifier()
knn.fit(X, y)


完整代码

此处内容需要评论回复后方可阅读


总结

总的来说,对于这种简单的验证码识别的准确率还是蛮高的,经过测试,准确率接近百分之百。

Archives QR Code
QR Code for this page
Tipping QR Code
Leave a Comment

4 Comments
  1. 博主厉害,学习一下。、

  2. 葡萄 葡萄

    6666啊

  3. 蓝雨 蓝雨

    牛逼克拉斯!!!

  4. 博主厉害!