验证码识别是一个机器学习分类问题
标签类别有大小写的a——z和数字的0——9
本文以KNN算法为例,实现简单的验证码识别
数据集简介
使用的数据集包括一个包含19999张图片的训练集、一个包含20000张图片的测试集
以第0个图像为例
读取并查看图像的形状,可以看出是30*150的三通道彩色图像
可视化图像:
对图像的预处理
首先需要对图像进行灰度化处理,将图像转化为单通道的灰度图像:
再进行二值化处理:
此时会发现背景还有少许的噪声点,目前本菜鸡还没有找到比较好的方法去除T^T
三次尝试:
1、第一次使用了先膨胀再腐蚀,正确率0.88
2、第二次使用了中值滤波器,正确率0.67
3、第三次没有进行降噪,正确率0.90
此时得到的图像形状为:
因为每个图像包含5个字符,所以我们可以把图像reshape,分割为5个小部分:
第0个小块的形状:
可视化第0个小块:
将预处理的代码封装成函数:
x_train, y_train = [], []
# 处理训练集
def threshold_train(path):
# 读取图像
img = cv2.imread(path)
# 灰度化处理
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化处理
retval, dst = cv2.threshold