2018-07-21 15:01:59
用python怎样实现验证码识别?
主要开发环境:
python3.5
python SDK版本
PIL
图片处理库
libsvm
开源的svm机器学习库
基本流程如下:
1、准备原始图片素材
2、图片预处理
3、图片字符切割
4、图片尺寸归一化
5、图片字符标记
6、字符图片特征提取
7、生成特征和标记对应的训练数据集
8、训练特征标记数据生成识别模型
9、使用识别模型预测新的未知图片集
10、达到根据“图片”就能返回识别正确的字符集的目标
主要算法的python实现如下:
def sum_9_region(img, x, y): """ 9邻域框,以当前点为中心的田字框,黑点个数 :param x: :param y: :return: """# todo 判断图片的长宽度下限cur_pixel = img.getpixel((x, y)) # 当前像素点的值width = img.width height = img.height if cur_pixel == 1: # 如果当前点为白色区域,则不统计邻域值return 0 if y == 0: # 第一行if x == 0: # 左上顶点,4邻域# 中心点旁边3个点sum = cur_pixel + img.getpixel((x, y + 1)) + img.getpixel((x + 1, y)) + img.getpixel((x + 1, y + 1)) return 4 - sum elif x == width - 1: # 右上顶点sum = cur_pixel + img.getpixel((x, y + 1)) + img.getpixel((x - 1, y)) + img.getpixel((x - 1, y + 1)) return 4 - sum else: # 最上非顶点,6邻域sum = img.getpixel((x - 1, y)) + img.getpixel((x - 1, y + 1)) + cur_pixel + img.getpixel((x, y + 1)) + img.getpixel((x + 1, y)) + img.getpixel((x + 1, y + 1)) return 6 - sum elif y == height - 1: # 最下面一行if x == 0: # 左下顶点# 中心点旁边3个点sum = cur_pixel + img.getpixel((x + 1, y)) + img.getpixel((x + 1, y - 1)) + img.getpixel((x, y - 1)) return 4 - sum elif x == width - 1: # 右下顶点sum = cur_pixel + img.getpixel((x, y - 1)) + img.getpixel((x - 1, y)) + img.getpixel((x - 1, y - 1)) return 4 - sum else: # 最下非顶点,6邻域sum = cur_pixel + img.getpixel((x - 1, y)) + img.getpixel((x + 1, y)) + img.getpixel((x, y - 1)) + img.getpixel((x - 1, y - 1)) + img.getpixel((x + 1, y - 1)) return 6 - sum else: # y不在边界if x == 0: # 左边非顶点sum = img.getpixel((x, y - 1)) + cur_pixel + img.getpixel((x, y + 1)) + img.getpixel((x + 1, y - 1)) + img.getpixel((x + 1, y)) + img.getpixel((x + 1, y + 1)) return 6 - sum elif x == width - 1: # 右边非顶点# print('%s,%s' % (x, y))sum = img.getpixel((x, y - 1)) + cur_pixel + img.getpixel((x, y + 1)) + img.getpixel((x - 1, y - 1)) + img.getpixel((x - 1, y)) + img.getpixel((x - 1, y + 1)) return 6 - sum else: # 具备9领域条件的sum = img.getpixel((x - 1, y - 1)) + img.getpixel((x - 1, y)) + img.getpixel((x - 1, y + 1)) + img.getpixel((x, y - 1)) + cur_pixel + img.getpixel((x, y + 1)) + img.getpixel((x + 1, y - 1)) + img.getpixel((x + 1, y)) + img.getpixel((x + 1, y + 1)) return 9 - sum
当然,这是用python实现验证码识别的大概步骤和过程,其实真正的操作起来会复杂的多。并且针对不同字符和图形的识别准确度也是不同的,如果要得出准确的结果,还需要做大量的模型测试和训练的。