当前位置: 首页 > news >正文

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

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

1.摘要

验证码的主要目的是区分人类和计算机,用来防止自动化脚本程序对网站的一些恶意行为,目前绝大部分网站都利用验证码来阻止恶意脚本程序的入侵。
验证码的自动识别对于减少自动登录时长,识别难以识别的验证码图片有着重要的作用。对验证码图像进行灰度化、二值化、去离散噪声、字符分割、归一化、特征提取、训练和字符识别等过程可以实现验证码自动识别。首先将原图片进行灰度化处理,接着二值化将图片像素点矩阵中的每个像素点的灰度值为0,接下来将处理后的图片中的噪点采用高斯去噪模型进行去噪,接着采用寻找轮廓的方法将图片识别成一个一个的字符保存起来。对样本集数据使用kNN算法进行数据训练,模型建立,模型匹配等操作实现验证码图片的识别功能。
本文主要的工作是对基于Python的kNN分类算法进行了详细的研究,设计出了验证码自动识别系统。研究了验证码识别的具体过程,包括图像采集,预处理,检测,前处理,训练识别等过程。在识别过程中,发现基于kNN算法的识别技术存在如下的问题,在数据模型训练模块,对于样本的选取直接影响到识别准确度,在图片处理模块若对于图片的噪音处理不完全,会影响切割验证码图片的精确度与后期的识别准确率。

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

在这里插入图片描述

2.主要分为以下几部分

在这里插入图片描述

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

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

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

函数名称:
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.样本训练和识别

使用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验证码识别图所示:

图5.10验证码识别图

6.系统用例图

在这里插入图片描述

相关文章:

  • 林阳域管理系统功能简介
  • Oracle 数据库安全评估(DBSAT)简明过程
  • Java 大视界 -- Java 大数据在智能医疗远程会诊与专家协作中的技术支持(146)
  • Python在数据科学中的应用:完整指南
  • 【高并发内存池】第三弹---构建Central Cache的全方位指南——从整体设计到核心实现
  • 《C++11 基于CAS无锁操作的atomic原子类型》
  • 头歌 JAVA 桥接模式实验
  • UI数据处理新隐私保护:确保用户新信息安全
  • 固定公网 IP
  • 【浙大PTA:L1系列题目】
  • NFS 安装与测试
  • 如何在SQL中高效使用聚合函数、日期函数和字符串函数:实用技巧与案例解析
  • 001 你好LabVIEW
  • 如何理解java中Stream流?
  • 对IKFOM论文中一些关键内容的理解
  • github如何为开源项目作出贡献
  • 高防ip和高防服务器的区别?
  • MSE分类时梯度消失的问题详解和交叉熵损失的梯度推导
  • 高能ISP模块功能说明
  • SQL优化主要有哪些方式
  • 中国军网:带你揭开3所新调整组建军队院校的神秘面纱
  • 国际奥委会举办研讨会,聚焦如何杜绝操纵比赛
  • 夜读丨读《汉书》一得
  • 3年多来俄乌要首次直接对话?能谈得拢吗?
  • 秘鲁总理辞职
  • 山西临汾哪吒主题景区回应雕塑被指抄袭:造型由第三方公司设计