基于Python编程语言实现“机器学习”,用于车牌识别项目

基于Python的验证码识别研究与实现

1.摘要

验证码的主要目的是区分人类和计算机,用来防止自动化脚本程序对网站的一些恶意行为,目前绝大部分网站都利用验证码来阻止恶意脚本程序的入侵。

验证码的自动识别对于减少自动登录时长,识别难以识别的验证码图片有着重要的作用。对验证码图像进行灰度化、二值化、去离散噪声、字符分割、归一化、特征提取、训练和字符识别等过程可以实现验证码自动识别。首先将原图片进行灰度化处理,接着二值化将图片像素点矩阵中的每个像素点的灰度值为0,接下来将处理后的图片中的噪点采用高斯去噪模型进行去噪,接着采用寻找轮廓的方法将图片识别成一个一个的字符保存起来。对样本集数据使用kNN算法进行数据训练,模型建立,模型匹配等操作实现验证码图片的识别功能。

本文主要的工作是对基于Python的kNN分类算法进行了详细的研究,设计出了验证码自动识别系统。研究了验证码识别的具体过程,包括图像采集,预处理,检测,前处理,训练识别等过程。在识别过程中,发现基于kNN算法的识别技术存在如下的问题,在数据模型训练模块,对于样本的选取直接影响到识别准确度,在图片处理模块若对于图片的噪音处理不完全,会影响切割验证码图片的精确度与后期的识别准确率。

关键词:验证码识别;灰度化;二值化处理;降噪;KNN算法

2.主要分为以下几部分

3.图像识别功能模块描述

在此模块中对于得到的样本集进行数据训练,并建立数据模型。本文采取的是基于kNN分类算法的数据训练模型,通过对已经标注过的验证码图片进行模型的训练。

4.主要的功能由函数get_code(im)实现:

cpp 复制代码
函数名称:
get_code(im)
参数:
    im,需要识别的验证码图片
代码实现:
     [samples, label_ids, id_label_map] = load_data()
    model = cv2.ml.KNearest_create()
        model.train(samples, cv2.ml.ROW_SAMPLE, label_ids)   #训练我们的模型
    im_res = grayImage2(im)
    contours, hierarchy = 
cv2.findContours(im_res,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
    boxes = get_rect_box(contours)
    if len(boxes) != 4:
        print("cannot get code")
    result = []    #识别验证码的代码
    for box in boxes:     #分割后的字符的轮廓信息存在变量boxes中
        roi = im_res[box[0][1]:box[3][1], box[0][0]:box[1][0]]    
#处理后的图片存在变量im_res中
        roistd = cv2.resize(roi, (30, 30))
        sample = roistd.reshape((1, 900)).astype(np.float32)
        ret, results, neighbours, distances = model.findNearest(sample, k = 3)
        label_id = int(results[0,0])
        label = id_label_map[label_id]
        result.append(label)
            对人工标注好的验证码图片使用KNN算法建立模型,进行模型的训练,然后,接着对需要识别的验证码图片在样本集中查找归类,将识别的字符信息输出。
返回值:
    返回识别出的字符信息
功能:
     实现验证码的训练和识别功能。

5.样本训练和识别

cpp 复制代码
使用kNN算法进行验证码的提取与识别过程如下:
第一步先使用kNN算法创建模型
第二步,使用标注好的样本集进行模型的训练
第三步,进行测试数据的识别,结果显示。
实现此功能的主要函数是test_data();
函数名称:
test_data()
参数:
    无
返回值:
    返回测试数据的识别结果
代码实现:
    test_files = os.listdir("test")
    total = 0
    correct = 0
    for filename in test_files:
        filepath = os.path.join("test", filename)
        im = cv2.imread(filepath)
        preds = get_code(im)
        chars = filename.split(".")[0]
        print(chars,preds)
        for i in range(len(chars)):
            if chars[i] == preds[i]:
                correct += 1
            total += 1
    print(correct/total)
      加载test目录下的需要识别的验证码图片,进行验证码的处理分割,然  后在训练集中查找此样本的标签,进行样本的归类,输出结果。
功能:
      实现对识别过程中模型的建立模型的训练,以及通过样本集来对测试数 据进行识别的功能。

程序界面图如图5.10验证码识别图所示:

6.系统用例图

相关推荐
祝余Eleanor1 分钟前
Day37 模型可视化与推理
人工智能·python·深度学习
sg_knight3 分钟前
Python 面向对象基础复习
开发语言·python·ai编程·面向对象·模型
dhdjjsjs29 分钟前
Day35 PythonStudy
python
如竟没有火炬1 小时前
四数相加贰——哈希表
数据结构·python·算法·leetcode·散列表
JoannaJuanCV1 小时前
自动驾驶—CARLA仿真(5)Actors与Blueprints
人工智能·机器学习·自动驾驶
背心2块钱包邮1 小时前
第9节——部分分式积分(Partial Fraction Decomposition)
人工智能·python·算法·机器学习·matplotlib
木盏1 小时前
三维高斯的分裂
开发语言·python
a程序小傲1 小时前
京东Java面试被问:ZGC的染色指针如何实现?内存屏障如何处理?
java·后端·python·面试
serve the people1 小时前
如何区分什么场景下用机器学习,什么场景下用深度学习
人工智能·深度学习·机器学习
csdn_aspnet2 小时前
如何用爬虫、机器学习识别方式屏蔽恶意广告
人工智能·爬虫·机器学习