赞
踩
下载本文机器学习SVM算法的车牌识别系统完整的代码和参考报告链接(或者可以联系博主koukou(壹壹23七2五六98),获取源码和报告)https://download.csdn.net/download/shooter7/88548717
此处是另外一个系统描述的链接:基于机器学习KNN算法手写数字识别系统,可用于毕设课设。https://blog.csdn.net/shooter7/article/details/113337835
车牌识别是一项重要的模式识别研究方向,具有广泛的应用。它被视为安全和交通运行的核心技术,可用于自动收费、交通管制、边境保护、车辆盗窃等重要领域。然而,在某些情况下,由于车牌颜色不同而无法很好地工作。因此,车牌识别不仅具有广泛的应用,而且具有重要的研究意义。
本文提出了一种基于OpenCV和SVM的车牌识别系统。该系统通过对车牌图像进行预处理、特征提取和分类,实现对车牌的自动识别。具体来说,本文首先对车牌图像进行预处理,包括图像增强、去噪、二值化等操作,提高车牌图像的质量。然后,本文采用颜色特征、形状特征和纹理特征对车牌图像进行特征提取,提高车牌图像的识别准确性。最后,本文采用SVM算法对车牌图像进行分类,实现对车牌的自动识别。通过实验验证,本文所设计的车牌识别系统具有较高的识别准确性和速度,可以满足实际应用的需求。
matplotlib
numpy
opencv-python
opencv-python-headless
Pillow
PyQt5
import os import cv2 import random import numpy as np class SVM(object): def __init__(self, fn): self.fn = fn if os.path.exists(self.fn): #判断模型是否已经训练过了 self.model = cv2.ml.SVM_load(self.fn) #如果模型已经训练过,则加载训练好的模型 else: self.model = cv2.ml.SVM_create() #否则创建分类器,重新进行训练 def train(self, samples, responses): #模型训练代码,samples为样本,responses为结果 self.model.setKernel(cv2.ml.SVM_INTER) #使用线性核 self.model.train(samples, cv2.ml.ROW_SAMPLE, responses) #对数据进行训练 self.model.save(self.fn) #保存训练模型 def predict(self, samples): #模型预测代码,samples为样本 _, pred = self.model.predict(samples) return pred.ravel() class Reader(object): #读取数据 def __init__(self) -> None: self.svms2 = SVM('./param/chars2.svm') #读取字符数据 self.svmsChinese = SVM('./param/chars2Chinese.svm') #读取汉字数据 self.groups2 = np.load('./param/chars2.npy') #读取字符标签 self.groupsChinese = np.load('./param/charsChinese.npy') #读取汉字标签 def recognize_alnum(self, img) -> str: #识别字符 ret = self.svms2.predict(img.reshape((1, -1)).astype('float32')).astype('int32') return self.groups2[ret] def recognize_chinese(self, img) -> str: #识别汉字 ret = self.svmsChinese.predict(img.reshape((1, -1)).astype('float32')).astype('int32') return self.groupsChinese[ret] def test(): dataset_root = './dataset' # datasets = ['chars2'] datasets = ['charsChinese'] data = [] groups = [] for dataset in datasets: for group in os.listdir(dataset_root + '/' + dataset): for image in os.listdir(dataset_root + '/' + dataset + '/' + group): data.append(np.append(cv2.imread(dataset_root + '/' + dataset + '/' + group + '/' + image, 0).ravel(), len(groups))) groups.append(group) # np.save('./chars2.npy', np.array(groups)) random.shuffle(data) data = np.array(data).astype('float32') len_train = (int)(data.shape[0] * 0.8) data_train = data[:len_train] data_pred = data[len_train:] svm = SVM('./chars2Chinese.svm') # svm.train(data_train[:, :-1], data_train[:, -1].ravel().astype('int32')) pred = svm.predict(data[:, :-1]) print('accuracy: ', np.sum(pred == data[:, -1]) / pred.ravel().shape[0]) if __name__ == '__main__': reader = Reader() # img = cv2.imread('./dataset/chars2/V/gt_215_2.jpg', 0) # txt = reader.recognize_alnum(img) img = cv2.imread('./dataset/charsChinese/zh_shan/debug_chineseMat477.jpg', 0) txt = reader.recognize_chinese(img) print(txt)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。