机器学习Opencv和SVM的车牌识别系统—计算机专业课程设计(毕业设计)
车牌识别是一项重要的模式识别研究方向,具有广泛的应用。它被视为安全和交通运行的核心技术,可用于自动收费、交通管制、边境保护、车辆盗窃等重要领域。然而,在某些情况下,由于车牌颜色不同而无法很好地工作。因此,车牌识别不仅具有广泛的应用,而且具有重要的研究意义。本文提出了一种基于OpenCV和SVM的车牌识别系统。该系统通过对车牌图像进行预处理、特征提取和分类,实现对车牌的自动识别。具体来说,本文首先对
基于机器学习SVM的车牌识别系统
-
下载本文机器学习SVM算法的车牌识别系统完整的代码和参考报告链接(或者可以联系博主koukou(壹壹23七2五六98),获取源码和报告)https://download.csdn.net/download/shooter7/88548717
-
此处是另外一个系统描述的链接:基于机器学习KNN算法手写数字识别系统,可用于毕设课设。https://blog.csdn.net/shooter7/article/details/113337835
摘要
车牌识别是一项重要的模式识别研究方向,具有广泛的应用。它被视为安全和交通运行的核心技术,可用于自动收费、交通管制、边境保护、车辆盗窃等重要领域。然而,在某些情况下,由于车牌颜色不同而无法很好地工作。因此,车牌识别不仅具有广泛的应用,而且具有重要的研究意义。
本文提出了一种基于OpenCV和SVM的车牌识别系统。该系统通过对车牌图像进行预处理、特征提取和分类,实现对车牌的自动识别。具体来说,本文首先对车牌图像进行预处理,包括图像增强、去噪、二值化等操作,提高车牌图像的质量。然后,本文采用颜色特征、形状特征和纹理特征对车牌图像进行特征提取,提高车牌图像的识别准确性。最后,本文采用SVM算法对车牌图像进行分类,实现对车牌的自动识别。通过实验验证,本文所设计的车牌识别系统具有较高的识别准确性和速度,可以满足实际应用的需求。
调试导入和运行结果图
导入操作步骤
- 本地安装python和pycharm, 解压源代码文件,导入pycharm
- 在pycharm的setting中设置好venv虚拟环境
- 在虚拟环境中安装好对应的包
matplotlib
numpy
opencv-python
opencv-python-headless
Pillow
PyQt5
- 安装完成后运行mian_ui.py就可以打开GUI界面了
- 安装路径下不要有中文,opencv会报错
报告和答辩PPT
关键代码
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)
更多推荐
所有评论(0)