车牌识别算法 基于yolov5的车牌检测+crnn中文车牌识别 支持12种中文车牌识别

article/2025/10/6 6:06:14

yolov5 车牌识别算法,支持12种中文车牌类型 基于yolov5的车牌检测 车牌矫正以及 基于CRNN的车牌识别

1.单行蓝牌 2.单行黄牌 3.新能源车牌 4.白色警用车牌 5 教练车牌 6 武警车牌 7 双层黄牌 8 双层武警 9 使馆车牌 10 港澳牌车 11 双层农用车牌 12 民航车牌
效果如下:请添加图片描述

基于yolov5车牌检测

车牌检测+关键点定位

1.第一步是目标检测,目标检测大家都很熟悉,常见的yolo系列,这里的话我用的是我修改后的yolov5系列),用yolov5训练的车牌检测效果如下:
在这里插入图片描述

如果对上面这样图片进行识别的话,那么干扰信息很多,会造成误识别,这里就是为什么要进行关键点识别,假设我们得到车牌的四个角点坐标:
通过透视变换,透视变换即可得到下图:
在这里插入图片描述
这样的图片进行识别的话就会非常容易了
所以在检测的同时,我们需要进行关键点定位
透视变换代码:

def four_point_transform(image, pts):# obtain a consistent order of the points and unpack them# individuallyrect = order_points(pts)(tl, tr, br, bl) = rect# compute the width of the new image, which will be the# maximum distance between bottom-right and bottom-left# x-coordiates or the top-right and top-left x-coordinateswidthA = np.sqrt(((br[0] - bl[0]) ** 2) + ((br[1] - bl[1]) ** 2))widthB = np.sqrt(((tr[0] - tl[0]) ** 2) + ((tr[1] - tl[1]) ** 2))maxWidth = max(int(widthA), int(widthB))# compute the height of the new image, which will be the# maximum distance between the top-right and bottom-right# y-coordinates or the top-left and bottom-left y-coordinatesheightA = np.sqrt(((tr[0] - br[0]) ** 2) + ((tr[1] - br[1]) ** 2))heightB = np.sqrt(((tl[0] - bl[0]) ** 2) + ((tl[1] - bl[1]) ** 2))maxHeight = max(int(heightA), int(heightB))# now that we have the dimensions of the new image, construct# the set of destination points to obtain a "birds eye view",# (i.e. top-down view) of the image, again specifying points# in the top-left, top-right, bottom-right, and bottom-left# orderdst = np.array([[0, 0],[maxWidth - 1, 0],[maxWidth - 1, maxHeight - 1],[0, maxHeight - 1]], dtype = "float32")# compute the perspective transform matrix and then apply itM = cv2.getPerspectiveTransform(rect, dst)warped = cv2.warpPerspective(image, M, (maxWidth, maxHeight))# return the warped imagereturn warped

2.这里关键点定位我们利用和人脸识别类似的方法进行,人脸是5个点,而车牌我们仅仅需要四个点就可以了。

车牌检测训练数据集可以主要利用了CRPD 和CCPD数据集

车牌识别

拿到车牌区域的图片后就可以利用crnn进行车牌识别了
整理了一些数据,包括12种车牌的训练数据集,以及训练步骤
车牌识别代码:my_demo_new.py

from plateNet import myNet_ocr
import torch
import torch.nn as nn
import cv2
import numpy as np
import os
import time
import argparse
def cv_imread(path):   #读取中文路径的图片img=cv2.imdecode(np.fromfile(path,dtype=np.uint8),-1)return imgdef allFilePath(rootPath,allFIleList):fileList = os.listdir(rootPath)for temp in fileList:if os.path.isfile(os.path.join(rootPath,temp)):allFIleList.append(os.path.join(rootPath,temp))else:allFilePath(os.path.join(rootPath,temp),allFIleList)# plateName="#京沪津渝冀晋蒙辽吉黑苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云藏陕甘青宁新学警港澳挂使领民深危险品0123456789ABCDEFGHJKLMNPQRSTUVWXYZ"
plateName=r"#京沪津渝冀晋蒙辽吉黑苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云藏陕甘青宁新学警港澳挂使领民航深0123456789ABCDEFGHJKLMNPQRSTUVWXYZ"
mean_value,std_value=(0.588,0.193)
def decodePlate(preds):pre=0newPreds=[]for i in range(len(preds)):if preds[i]!=0 and preds[i]!=pre:newPreds.append(preds[i])pre=preds[i]return newPredsdef image_processing(img,device):img = cv2.resize(img, (168,48))img = np.reshape(img, (48, 168, 3))# normalizeimg = img.astype(np.float32)img = (img / 255. - mean_value) / std_valueimg = img.transpose([2, 0, 1])img = torch.from_numpy(img)img = img.to(device)img = img.view(1, *img.size())return imgdef get_plate_result(img,device,model):# img = cv2.imread(image_path)input = image_processing(img,device)preds = model(input)# print(preds)preds=preds.view(-1).detach().cpu().numpy()newPreds=decodePlate(preds)plate=""for i in newPreds:plate+=plateName[i]return platedef init_model(device,model_path):check_point = torch.load(model_path,map_location=device)model_state=check_point['state_dict']cfg = check_point['cfg']model = myNet_ocr(num_classes=78,export=True,cfg=cfg)        #export  True 用来推理model.load_state_dict(model_state)model.to(device)model.eval()return modelif __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument('--model_path', type=str, default='output/360CC/crnn/2022-09-26-21-30/checkpoints/checkpoint_11_acc_0.9657.pth', help='model.pt path(s)')  parser.add_argument('--image_path', type=str, default='images', help='source') device = torch.device("cuda" if torch.cuda.is_available() else "cpu")# device =torch.device("cpu")opt = parser.parse_args()model = init_model(device,opt.model_path)if os.path.isfile(opt.image_path): right=0begin = time.time()img = cv_imread(opt.image_path)if img.shape[-1]!=3:img = cv2.cvtColor(img,cv2.COLOR_BGRA2BGR)plate=get_plate_result(img, device,model)print(plate)else:file_list=[]allFilePath(opt.image_path,file_list)for pic_ in file_list:try:pic_name = os.path.basename(pic_)img = cv_imread(pic_)if img.shape[-1]!=3:img = cv2.cvtColor(img,cv2.COLOR_BGRA2BGR)plate=get_plate_result(img,device,model)print(plate,pic_name)except:print("error")

源码在这:

github车牌识别


http://chatgpt.dhexx.cn/article/LioHemNp.shtml

相关文章

大陆车牌识别算法的背景与技术

我们写过一些关于车牌识别的相关算法发展,随着近两年车牌识别技术的发展、车牌类型的变化以及识别标准的规范化,我们重新梳理了关于大陆车牌识别的技术以及相关背景。文章主要分为三个部分,首先回顾一下目前大陆车牌的种类,第二部…

车牌识别调研总结

来自巴西阿雷格里港大学的学者发表于ECCV2018的论文 http://url.cn/5tnTl9p 《License Plate Detection and Recognition in Unconstrained Scenarios》,给出了一整套完整的车牌识别系统设计,着眼于解决在非限定场景有挑战的车牌识别应用,其性…

超高效车牌识别算法

核心参考文献 陈进 《车牌识别系统关键技术的研究》 文章相关下载资源 算法动态库 https://download.csdn.net/download/hobbitdream/10549960 演示工程 https://download.csdn.net/download/hobbitdream/10549965 算法基本实现原理 整个车牌识别算法包括两个部分&#x…

车牌识别算法实践(一):先验知识

一般来说,一个完整的车牌识别系统的处理流程包括图像输入、车牌提取、字符分割、字符识别和结果输出这五部分。其中车牌提取、字符分割和字符识别是较重要的部分,而车牌提取尤为关键,采用哪种算法或算法组合决定了整个系统的性能。 本人从多年…

基于matlab车牌识别算法

牌照自动识别是一项利用车辆的动态视频或静态图像进行牌照号码、牌照颜色自动识别的模式识别技术。其硬件基础一般包括触发设备、摄像设备、照明设备、图像采集设备、识别车牌号码的处理机等,其软件核心包括车牌定位算法、车牌字符分割算法和光学字符识别算法等。某…

【毕业设计】深度学习 YOLO 实现车牌识别算法

文章目录 0 前言1 课题介绍2 算法简介2.1网络架构 3 数据准备4 模型训练5 实现效果5.1 图片识别效果5.2视频识别效果 6 部分关键代码7 最后 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往…

LPRNet车牌识别算法?其实没有想象那么难

在停车场、小区的出入口,高速公路收费站,我们经常看到自动识别车辆车牌信息的机器,那么车牌识别是如何工作的呢?车牌识别系统应用主要用于记录车辆的车牌号码,出入时间,可实现自动化、规范化管理&#xff0…

车牌识别算法 matlab,车牌识别算法及其MATLAB实现

一.算法 读取拍摄图像-->截取车牌部分 --> 识别车牌 图像预处理: 将图像经过图像灰度化、图像增强、边缘提取、二值化等操作,转换成便于车牌定位的二值化图像; 车牌定位: 利用车牌的边缘、形状等特征,再结合Roberts 算子边缘检测、数字…

【最强最全车牌识别算法】支持13种中文车牌识别的云端API部署(可直接获取源码使用)

项目简介 在城市交通管理、视频监控、车辆识别和停车场管理中车辆检测与车牌识别是一项富有挑战而重要的任务。利用深度学习识别不同条件下的车辆及其车牌信息。更具体地说,实时目标检测网络(Yolov5)用于从车辆图像中提取特征并且通过训练对…

【老生谈算法】基于matlab的车牌识别算法详解及程序源码——车牌识别算法

基于matlab的车牌识别系统设计与算法原理 大家好,今天给大家介绍基于matlab的车牌识别系统设计与原理。 车牌识别系统(License Plate Recognition ,简称LPR)是智能交通系统(ITS)的核心组成部分&#xff0c…

一套基于java的开源车牌识别算法

简介 这是一个基于spring boot maven opencv 实现的图像识别及训练的项目包含车牌识别、人脸识别等功能,贯穿样本处理、模型训练、图像处理、对象检测、对象识别等技术点java语言的深度学习项目,在整个开源社区来说都相对较少;拥有完整的训…

车牌识别算法实践(二):基础算法

本篇将涉及到的一些基础算法集中介绍一下。由于以贴代码为主,有些算法可能只提个名字,有些算法的原理可能会一两句话带过。 原来的VLPR工程中车牌识别的一些组件是分成好几个类的,现将它们全部塞到一个类CPlate中。这样虽有违C OOP的精神&am…

高精度车牌识别算法

一 车牌识别概述 车牌识别属于OCR的一种,但它也有自己的特点。考虑到边缘设备部署,我们没有用lstm,仅用普通的卷积层便实现了高精度的车牌识别方案。车牌识别的应用场景也十分广泛,常见的停车场收费系统,车牌识别算法…

车牌识别传统算法分析

车牌识别算法原理 车牌识别是基于图像分割和图像识别理论,对含有车辆号牌的图像进行分析处理,从而确定牌照在图像中的位置,并进一步提取和识别出文本字符。车牌识别过程包括图像采集、预处理、车牌定位、字符分割、字符识别、结果输出等一系列算法运算,其运行流程如下图所…

车牌识别的N种办法——从OCR到深度学习

一、车牌识别简介 随着科学技术的发展,人工智能技术在我们的生活中的应用越来越广泛,人脸识别、车牌识别、目标识别等众多场景已经落地应用,给我们的生活品质得到很大的提升,办事效率大大提高,同时也节约了大量的劳动…

基于MATLAB的车牌识别基本原理及算法讲解

来源丨古月居 点击进入—>3D视觉工坊学习交流群 一:GUI界面预览 二:选择图片 使用uigetfile函数打开一个模态对话框,其中列出了当前文件夹中的文件。 在这里选择或输入文件的名称。选择文件点击打开时,uigetfile将返回文件名。…

如何将JavaScript中的JSON字符串转换为JSON对象数组?

来源 | web前端开发(ID:web_qdkf) 如果给定一个JSON字符串,需要你将JSON字符串转换为JSON对象数组。请问你会怎么做? 此数组包含在JavaScript下从JSON字符串获得的JavaScript对象的值。在这里分享两种解决此问题的方法&#xff0c…

nodejs字符串如何转成json数据

var str {"a":"1","b":"2"}; var jsonstr JSON. parse( str); console. log( jsonstr); console. log( jsonstr. a); console. log( jsonstr. b); 输出结果:

JavaScript中JSON字符串转JSON对象遇到的问题

今天遇到一个奇怪的问题,解析二维码后获得了一个JSON字符串,将JSON字符串转换成JSON对象的时候报错了。 报错如下: 代码如下: 检查了无数次数据,数据是JSON字符串,引号也都是英文的,就是莫名其妙的转换不了。 最后无奈…