基于SVM的车牌识别算法

这篇具有很好参考价值的文章主要介绍了基于SVM的车牌识别算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于SVM的车牌识别系统(Python代码实现)

车牌识别系统是智能交通系统的重要组成部分,有着广泛的应用。车牌识别系统主要有车牌定位、字符分割和字符识别三部分组成,本文的研究重点是车牌字符识别这部分,本文提出了一种基于OpenCVSVM的车牌识别方法。首先通过Soble边缘检测算法与形态学算法相结合来确定大致的车牌轮廓,结合车牌的外接矩形的面积与长宽比来筛选出符合车牌特征的候选区域,然后使用投影法将车牌中的字符分割出来,最后使用SVM分类器来对分割出的字符进行识别,输出识别结果。经过验证,该车牌识别系统能够适用于比较复杂的环境,识别准确率相对较高。为了提升该系统的可操作性,本文使用PyQt5设计了GUI界面,提升了系统的可操作性,同时使界面更加美观。

一、算法流程

一个完整的车牌号识别系统要完成从图像采集到字符识别输出,过程相当复杂,基本可以分成硬件部分跟软件部分,硬件部分包括系统触发、图像采集,软件部分包括图像预处理车牌定位字符分割字符识别四大部分,一个车牌识别系统的基本结构如图:

svm车牌识别训练,算法,支持向量机,机器学习

二、图像预处理

获取蓝色和绿色通道:

    hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)  # 将RGB图像转换为HSV图像
    h, s, v = cv2.split(hsv)  # 分离H,S,V
    lower = np.array([100, 90, 40])
    upper = np.array([124, 255, 255])  # 设置阈值
    mask = cv2.inRange(hsv, lower, upper)  # 获取图像蒙版
    img = cv2.bitwise_and(s, s, mask=mask)  # 在图像蒙版上使用“按位与”运算符吗,分离绿色和蓝色通道
    

处理结果:svm车牌识别训练,算法,支持向量机,机器学习

直方图均衡化:

    img = cv2.equalizeHist(img)  # 直方图均衡化,增强对比度:将已知灰度概率密度分布的图像经过变换,使其称为一个均匀灰度概率密度分布的新图像
    img = cv2.GaussianBlur(img, (3, 3), 0, 0, cv2.BORDER_DEFAULT)  # 高斯滤波

处理结果:
svm车牌识别训练,算法,支持向量机,机器学习
检测图像中的纹理:

    flipped = cv2.flip(img, 1)  # 图像翻转,1:水平翻转
    sobel1 = cv2.Sobel(img, cv2.CV_8U, 1, 0, ksize=3)  # 图像边缘检测,Sobel算子,对x轴方向求导
    sobel2 = cv2.flip(cv2.Sobel(flipped, cv2.CV_8U, 1, 0, ksize=3), 1)  # 先平滑图像边缘,再翻转
    img = sobel1 / 2 + sobel2 / 2
    img = img.astype('uint8')  # 强制类型转换

处理结果:
svm车牌识别训练,算法,支持向量机,机器学习
灰度图转为二进制图像:

    th = (np.mean(img) + (np.max(img) - np.mean(img)) * 0.6)
    ret, img = cv2.threshold(img, th, 255, cv2.THRESH_BINARY)  # 简单阈值函数,从灰度图像中获取二进制图像

处理结果:
svm车牌识别训练,算法,支持向量机,机器学习
形态学闭合操作:

img = close_op(img, 36)

处理结果:
svm车牌识别训练,算法,支持向量机,机器学习

三、车牌定位

    for contour in contours:
        area = cv2.contourArea(contour)  # 计算图像轮廓面积
        if area < 200 or area > 50000:  # 判断车牌轮廓区域
            continue

        rect = cv2.minAreaRect(contour)  # 求出点集contour的最小矩形面积,返回值rec[0]为矩形的中心点,rec[1]为矩形的长和宽,rec[2]矩形的旋转角度
        if rect[1][0] * rect[1][1] < 666 or area < rect[1][0] * rect[1][1] * 0.6:
            continue

        dy, dx = contour.flatten().reshape(contour.shape[0], -1).T.ptp(1)
        cwb = rect[1][1] / rect[1][0] if rect[1][1] > rect[1][0] else rect[1][0] / rect[1][1]
        if dy < dx or cwb < 2.5 or cwb > 6:
            continue

        if not check_plate(src, rect):
            continue

        plate = extract_plate(src, rect)  # src为原始图像,rect为车牌区域坐标

处理结果:
svm车牌识别训练,算法,支持向量机,机器学习

四、车牌字符分割

def plate_cut_text(img):
    '''
    车牌字符分割,将分割好的车牌区域进行字符分割
    '''
    sum = np.sum(img, 1)
    limit = np.mean(sum) * 0.2
    bound = []
    start = 0
    for i in range(len(sum) - 1):
        if sum[i] < limit and sum[i + 1] >= limit:
            start = i
        elif sum[i] >= limit and sum[i + 1] < limit:
            bound.append([start, i])
            start = 0
    if start != 0:
        bound.append([start, len(sum - 1)])
    up, down = 0, 0
    for b in bound:
        if b[1] - b[0] > down - up:
            up = b[0]
            down = b[1]

    return img[up: down + 1, :]

五、基于SVM的车牌字符识别

reader = SVM_ocr.Reader()
def plate_recognition(plate):  #字符识别代码
    '''
    车牌识别核心代码,使用SVM对分割的车牌字符进行识别,并将识别结果返回
    '''
    img = cv2.cvtColor(plate, cv2.COLOR_BGR2GRAY)
    th = (np.mean(img) + (np.max(img) - np.mean(img)) * 0.2)
    _, img = cv2.threshold(img, th, 255, cv2.THRESH_BINARY) #阈值函数
    img = plate_cut_text(img)
    display('plate th', img, 360)
    bound = plate_split(img) #调用plate_split函数,对车牌字符进行拆分,返回一个列表,列表每个值记录车牌每个字符起始位置
    print('拆分出来的各个字符起始位置:',bound)
    plate_res = []
    for i, b in enumerate(bound):
        display('character_'+str(i), img[:,b[0]:b[1]], 50)
        if b[1] - b[0] > 5 and b[1] - b[0] < 28: #判断每个分割出来的字符宽度是否正常
            if len(plate_res) == 0:
                ch = reader.recognize_chinese(adjust_vision(img[:, b[0]:b[1]+1]))[0] #识别车牌汉字
            else:
                ch = reader.recognize_alnum(adjust_vision(img[:, b[0]:b[1]+1]))[0] #识别车牌字符
            plate_res.append(ch) #将识别结果添加到变量ch中
    return plate_res #返回车牌识别结果

六、使用Qtdesigner进行UI界面设计

svm车牌识别训练,算法,支持向量机,机器学习文章来源地址https://www.toymoban.com/news/detail-779144.html

到了这里,关于基于SVM的车牌识别算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 分类预测 | MATLAB实现SSA-CNN-SVM基于麻雀算法优化卷积支持向量机分类预测

    预测效果 基本介绍 MATLAB实现SSA-CNN-SVM基于麻雀算法优化卷积支持向量机分类预测,优化参数为:学习率,批量处理大小,正则化参数。图很多,包括分类效果图,迭代优化图,混淆矩阵图。 程序设计 完整程序和数据获取方式1:同等价值程序兑换; 完整程序和数据获取方式

    2024年02月10日
    浏览(42)
  • 机器学习算法:支持向量机(SVM)

    Solem《python计算机视觉编程》、李航《统计学习方法》、周志华《机器学习》 要理解好支持向量机需要较好的数学功底,且能不被公式以及文字绕晕,这里我们就理清楚支持向量机的大体过程。具体的数学计算推导其实已经封装好了,那么理解算法的原理也对我们将来的学习

    2024年02月03日
    浏览(48)
  • 【数据分类】基于蜣螂优化算法优化支持向量机的数据分类方法 DBO-SVM分类算法【Matlab代码#47】

    详细介绍此处略,可参考DBO算法介绍 支持向量机(Support Vector Machine,SVM)是一种常用的监督学习算法,用于二分类和多分类问题。它的目标是找到一个超平面或者决策边界,将不同类别的样本点分开,并使得离决策边界最近的样本点的间隔最大化。 SVM的基本思想是将样本点

    2024年02月15日
    浏览(66)
  • 基于支持向量机SVM的港口分类,SVM原理,SVM工具箱详解

    目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 完整代码和数据下载链接: 基于支持向量机SVM的港口分类(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835105/88636296 SVM应用实例, 基于支持向量机SVM的港口

    2024年02月03日
    浏览(49)
  • 【数据挖掘】基于粒子群算法优化支持向量机PSO-SVM对葡萄酒数据集进行分类

    PSO是粒子群优化算法(Particle Swarm Optimization)的英文缩写,是一种基于种群的随机优化技术,由Eberhart和Kennedy于1995年提出。粒子群算法是模仿昆虫、兽群、鸟群和鱼群等的群集行为,这些群体按照一种合作的方法寻找食物,群体中的每个成员通过学习它自身的经验和其他成员

    2024年02月02日
    浏览(55)
  • 10- SVM支持向量机 (SVC) (算法)

    支持向量机 (support vector machines,SVM) 是一种 二分类算法 ,它的目的是寻找一个超平面来对样本进行分割,分割的原则是间隔最大化,如果对应的样本特征少,一个普通的 SVM 就是一条线将样本分隔开,但是要求线到两个类别最近样本点的距离要最大。 支持向量机模型: 网格

    2023年04月20日
    浏览(40)
  • 一文全解经典机器学习算法之支持向量机SVM(关键词:SVM,对偶、间隔、支持向量、核函数、特征空间、分类)

    之前所介绍的逻辑回归是基于似然度的分类方法,通过对数据概率进行建模来得到软输出。但这种分类方法其实稍加“繁琐”,因为要 估计数据的概率分布作为中间步骤 。这就像当一个人学习英语时,他只要直接报个班或者自己看书就行了,而不需要先学习诘屈聱牙的拉丁

    2024年02月03日
    浏览(60)
  • 126基于matlab的孪生支持向量机(Twin support vector machine,TWSVM)是SVM的一种变形算法

    基于matlab的孪生支持向量机(Twin support vector machine,TWSVM)是SVM的一种变形算法。该采用WSVM进行二分类,程序已注释数据可更换自己的,程序已调通,可直接运行。 126matlabTWSVM模式识别 (xiaohongshu.com)

    2024年01月25日
    浏览(45)
  • 计算机java项目 - 基于opencv与SVM的车牌识别系统

    基于opencv与SVM的车牌识别系统 提示:适合用于课程设计或毕业设计,工作量达标,源码开放 用python3+opencv3做的中国车牌识别,包括算法和客户端界面,只有2个文件,surface.py是界面代码,predict.py是算法代码,界面不是重点所以用tkinter写得很简单。 python3.7.3 opencv4.0.0.21 numpy

    2024年02月20日
    浏览(50)
  • 分类预测 | Matlab实现ISSA-SVM基于多策略混合改进的麻雀搜索算法优化支持向量机的数据分类预测

    分类效果 基本描述 基于多策略混合改进的麻雀搜索算法(ISSA)优化支持向量机(SVM)的数据分类预测。可实现二分类和多分类。 程序已经调试好,替换数据集直接运行出图,非常适合新手小白。 预测适应度曲线,预测效果等图像 1、sin混沌映射进行种群初始化 2、采用动态

    2024年01月21日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包