当前位置:   article > 正文

利用模板匹配的思路进行车牌的智能识别(三)_车牌识别cnn好还是模板匹配好

车牌识别cnn好还是模板匹配好

序言

上篇文章
介绍了如何通过CNN来识别车牌的字母和数字,接下来我们尝试通过模板匹配的方式进行识别。

思路

  • 遍历读取所有的字符图
  • 匹配所有的模板

实现

  • 批量读取所有图片
for match_ite in os.listdir(match_path):
  • 1
  • 模板的文件夹如下
    在这里插入图片描述
  • 双层for循环读取
for (i, template) in enumerate(os.listdir(template_path)):
            # 0 , 1, 2, 3
            for (index,template_img) in enumerate(os.listdir(template_path + template)):
                # 1, 2, 3, 4张图片

  • 1
  • 2
  • 3
  • 4
  • 5
  • 每个进行匹配, 并获取最大的置信度
template_img_arr = cv.imread(template_path + template + "/" + template_img)
                result = cv.matchTemplate(template_img_arr, match_img, cv.TM_CCOEFF_NORMED)
                min_val,max_val,min_loc,max_loc = cv.minMaxLoc(result)
                # 取每个文件夹最大的置信度
                if max_val > max_confidence:
                    max_confidence = max_val
                    num_list[match_ite] = i
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 拼接字符
 car_number = ''
    for i in confidence_list:
        car_number += template_obj[i]
    return car_number
  • 1
  • 2
  • 3
  • 4

实验

template_find()
  • 1

在这里插入图片描述

  • 看到识别的效果不是很准确,可能是模板和截取的字符串位置偏差太多,这个有待优化

完整代码:

import cv2 as cv
import os
def template_find():
    template_obj = ['0','1','2','3','4','5','6','7','8','9',
            'A','B','C','D','E','F','G','H','J','K','L','M','N','P','Q','R','S','T','U','V','W','X','Y','Z',
            '京','闽','粤','苏','沪','浙']
    # 模板匹配
    # 设置 模板
    #遍历所有的模板
    template_path = './tf_car_license_dataset/train_images/training-set/'
    match_path = './split/'
    confidence_list = []
    for match_ite in os.listdir(match_path):
        match_img = cv.imread(match_path + match_ite)
        match_img = cv.resize(match_img, (32, 40))
        num_list = {match_ite: -1}
        max_confidence = 0
        for (i, template) in enumerate(os.listdir(template_path)):
            # 0 , 1, 2, 3
            for (index,template_img) in enumerate(os.listdir(template_path + template)):
                # 1, 2, 3, 4张图片
                # if index >= 15:
                #     break
                # print(template + template_img)
                template_img_arr = cv.imread(template_path + template + "/" + template_img)
                result = cv.matchTemplate(template_img_arr, match_img, cv.TM_CCOEFF_NORMED)
                min_val,max_val,min_loc,max_loc = cv.minMaxLoc(result)
                # 取每个文件夹最大的置信度
                if max_val > max_confidence:
                    max_confidence = max_val
                    num_list[match_ite] = i
        confidence_list.append(num_list[match_ite])
    print(confidence_list)
    car_number = ''
    for i in confidence_list:
        car_number += template_obj[i]
    return car_number
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号