基于YOLOv8车牌识别算法支持12种中文车牌类型(源码+图片+说明文档)

yolov8车牌识别算法,支持12种中文车牌类型

支持如下:
  •  1.单行蓝牌
  •  2.单行黄牌
  •  3.新能源车牌
  •  4.白色警用车牌
  •  5.教练车牌
  •  6.武警车牌
  •  7.双层黄牌
  •  8.双层白牌
  •  9.使馆车牌
  •  10.港澳粤Z牌
  •  11.双层绿牌
  •  12.民航车牌

 

图片测试demo:

直接运行detect_plate.py 或者运行如下命令行:

python detect_rec_plate.py --detect_model weights/yolov8-lite-t-plate.pt  --rec_model weights/plate_rec_color.pth --image_path imgs --output result

车牌检测训练

车牌检测训练如下:

车牌检测训练

  1. 下载数据集: 数据集可以添加QQ767172261获取 数据从CCPD和CRPD数据集中选取的一部分并转换的 数据集格式为yolo格式:

label x y w h  

2.修改ultralytics/datasets/yolov8-plate.yaml train和val路径,换成你的数据路径:

train: /mnt/mydisk/xiaolei/plate_detect/new_train_data # train images (relative to 'path') 4 images
val: /mnt/mydisk/xiaolei/plate_detect/new_val_data # val images (relative to 'path') 4 images# Classes for DOTA 1.0
names:
0: single
1: double

3.训练

yolo task=detect mode=train model=yolov8s.yaml  data=./ultralytics/cfg/datasets/plate.yaml epochs=120 batch=32 imgsz=640 pretrained=False optimizer=SGD 

结果存在run文件夹中:

车牌识别训练

车牌识别训练如下:

训练的时候 选择相应的cfg 即可选择模型的大小:

 # construct face related neural networks#cfg =[8,8,16,16,'M',32,32,'M',48,48,'M',64,128] #small model# cfg =[16,16,32,32,'M',64,64,'M',96,96,'M',128,256]#medium modelcfg =[32,32,64,64,'M',128,128,'M',196,196,'M',256,256] #big modelmodel = myNet_ocr(num_classes=len(plate_chr),cfg=cfg)

环境配置

  1. WIN 10 or Ubuntu 16.04
  2. **PyTorch > 1.2.0 (may fix ctc loss)**🔥
  3. yaml
  4. easydict
  5. tensorboardX

数据

车牌识别数据集CCPD+CRPD
  1. 从CCPD和CRPD截下来的车牌小图以及我自己收集的一部分车牌 有需要的话加qq群获取:823419837

  2. 数据集打上标签,生成train.txt和val.txt

图片命名如上图:车牌号_序号.jpg 然后执行如下命令,得到train.txt和val.txt 

python plateLabel.py --image_path your/train/img/path/ --label_file datasets/train.txt
python plateLabel.py --image_path your/val/img/path/ --label_file datasets/val.txt

数据格式如下:

train.txt

/mnt/Gu/trainData/plate/new_git_train/CCPD_CRPD_ALL/冀BAJ731_3.jpg 5 53 52 60 49 45 43 
/mnt/Gu/trainData/plate/new_git_train/CCPD_CRPD_ALL/冀BD387U_2454.jpg 5 53 55 45 50 49 70 
/mnt/Gu/trainData/plate/new_git_train/CCPD_CRPD_ALL/冀BG150C_3.jpg 5 53 58 43 47 42 54 
/mnt/Gu/trainData/plate/new_git_train/CCPD_CRPD_OTHER_ALL/皖A656V3_8090.jpg 13 52 48 47 48 71 45 
/mnt/Gu/trainData/plate/new_git_train/CCPD_CRPD_OTHER_ALL/皖C91546_7979.jpg 13 54 51 43 47 46 48 
/mnt/Gu/trainData/plate/new_git_train/CCPD_CRPD_OTHER_ALL/皖G88950_1540.jpg 13 58 50 50 51 47 42 
/mnt/Gu/trainData/plate/new_git_train/CCPD_CRPD_OTHER_ALL/皖GX9Y56_2113.jpg 13 58 73 51 74 47 48 

将train.txt val.txt路径写入lib/config/360CC_config.yaml 中

DATASET:DATASET: 360CCROOT: ""CHAR_FILE: 'lib/dataset/txt/plate2.txt'JSON_FILE: {'train': 'datasets/train.txt', 'val': 'datasets/val.txt'}

结果保存再output文件夹中

测试demo


python demo.py --model_path saved_model/best.pth --image_path images/test.jpgor your/model/path

结果是:

 导出onnx:


python export.py --weights saved_model/best.pth --save_path saved_model/best.onnx  --simplify
onnx 推理:
python onnx_infer.py --onnx_file saved_model/best.onnx  --image_path images/test.jpg

双层车牌

双层车牌这里采用拼接成单层车牌的方式:

python:

def get_split_merge(img):h,w,c = img.shapeimg_upper = img[0:int(5/12*h),:]img_lower = img[int(1/3*h):,:]img_upper = cv2.resize(img_upper,(img_lower.shape[1],img_lower.shape[0]))new_img = np.hstack((img_upper,img_lower))return new_img

c++:

cv::Mat get_split_merge(cv::Mat &img)   //双层车牌 分割 拼接
{cv::Rect  upper_rect_area = cv::Rect(0,0,img.cols,int(5.0/12*img.rows));cv::Rect  lower_rect_area = cv::Rect(0,int(1.0/3*img.rows),img.cols,img.rows-int(1.0/3*img.rows));cv::Mat img_upper = img(upper_rect_area);cv::Mat img_lower =img(lower_rect_area);cv::resize(img_upper,img_upper,img_lower.size());cv::Mat out(img_lower.rows,img_lower.cols+img_upper.cols, CV_8UC3, cv::Scalar(114, 114, 114));img_upper.copyTo(out(cv::Rect(0,0,img_upper.cols,img_upper.rows)));img_lower.copyTo(out(cv::Rect(img_upper.cols,0,img_lower.cols,img_lower.rows)));return out;
}

训练自己的数据集

  1. 修改alphabets.py,修改成你自己的字符集,plateName,plate_chr都要修改,plate_chr 多了一个空的占位符'#'
  2. 通过plateLabel.py 生成train.txt, val.txt
  3. 训练

数据增强

cd Text-Image-Augmentation-python-masterpython demo1.py --src_path /mnt/Gu/trainData/test_aug --dst_path /mnt/Gu/trainData/result_aug/

src_path 是数据路径, dst_path是保存的数据路径

然后把两份数据放到一起进行训练,效果会好很多!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/589845.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DDL ---- 数据库的操作

1.查询所有数据库 show databases; 上图除了自创的,其他的四个都是mysql自带的数据库 。(不区分大小写) 2.查询当前数据库 select database(); 最开始没有使用数据库,那么查找结果为NULL 所以我们就需要先使用数据库&#xff…

shopee虾皮业绩一直没办法提升?不同时期要有不同的运营思路

店铺运营“开荒期”需要根据自身店铺数据调整运营策略,“运营期”就需要更多分析竞品的运营数据,分析接近上架时间段的出单同款/相似款,有效找到影响起量的因素;在出单缓慢,接近瓶颈期时找同行的策略方案,抓…

PyLMKit(8):ChatDB与你的数据库聊天,数据库问答

功能介绍 与你的结构化数据聊天:支持主流数据库、表格型excel等数据! ChatDB:支持数据库问答ChatTable:支持txt,excel,csv等pandas dataframe表格的问答 1.下载安装 pip install pylmkit -U pip install pymysql sqlalchemy s…

【学习心得】Numpy学习指南或复习手册

本文是自己在学习Numpy过后总是遗忘的很快,反思后发现主要是两个原因: numpy的知识点很多,很杂乱。练习不足,学习过后一段时间不敲代码就会忘记。 针对这两个问题,我写了这篇文章。希望将numpy的知识点织成一张网&…

【智能算法】金枪鱼群优化算法(TSO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.代码展示4.参考文献 1.背景 2021年,Xie等人受到自然界中金枪鱼狩猎行为启发,提出了金枪鱼优化算法(Tuna swarm optimization,TSO)。 2.算法原理 2.1算法思想 TSO模…

选数异或(DP)

题目描述 给定一个长度为 n 的数列 A1, A2, , An 和一个非负整数 x,给定 m 次查询, 每次询问能否从某个区间 [l,r] 中选择两个数使得他们的异或等于 x 。 输入格式 输入的第一行包含三个整数 n, m, x 。 第二行包含 n 个整数 A1, A2, , An 。 接下来 m 行…

【Java基础】Java基础知识整合

文章目录 1. 转义字符2. 变量2.1 字符串与整型相加2.2 byte和short的区别2.3 float和double的区别2.4 char类型2.5 boolean类型2.6 自动类型转换及运算2.7 强制类型转换2.8 String的转换2.9 除法运算2.10 取模规则 3. 自增4. 逻辑运算符5. 赋值运算 6. 三元运算符:7…

FreeRTOS中断管理以及实验

FreeRTOS中断管理以及实验 继续记录学习FreeRTOS的博客,参照正点原子FreeRTOS的视频。 ARM Cortex-M 使用了 8 位宽的寄存器来配置中断的优先等级,这个寄存器就是中断优先级配置寄存器 , STM32寄存器中并且这个寄存器只使用[7:4]&#xff0c…

HCIP实验--5

实验要求: 实现过程: (一)配置IP地址: AR1: [AR1]int g0/0/0 [AR1-GigabitEthernet0/0/0]ip add 200.1.1.1 24 Apr 3 2024 19:25:38-08:00 AR1 %%01IFNET/4/LINK_STATE(l)[0]:The line protocol IP on the interf…

实体机双系统安装

实体机双系统安装 第一步:下载openKylin镜像 前往官网下载x86_64的镜像(https://www.openkylin.top/downloads/628-cn.html) tips:下载完镜像文件后,请先检查文件MD5值是否和官网上的一致,如果不一致请重…

WebKit简介

1、简介(WebKit) WebKit 是一个开源的浏览器引擎,最初由苹果公司基于KHTML(K Desktop Environment的HTML渲染引擎)开发,并广泛应用于Safari浏览器,后来也被其他多款浏览器和应用采用。WebKit负…

算法练习—day1

title: 算法练习—day1 date: 2024-04-03 21:49:55 tags: 算法 categories:LeetCode typora-root-url: 算法练习—day1 网址:https://red568.github.io 704. 二分查找 题目: 题目分析: 左右指针分别为[left,right],每次都取中…

由平行公设的不同而来三种几何学浅谈

由平行公设的不同而来三种几何学浅谈 欧几里德的《几何原本》 欧几里德的《几何原本》一开始就给出了23个定义,5个公设,5个公理。 23个定义(部分): 点是没有部分的东西。 线是没有宽度的长度。 线的端点是点。 直线是各点都在同一方向上…

vue快速入门(三)差值表达式

注释很详细&#xff0c;直接上代码 上一篇 新增内容 插值表达式基本用法插值表达式常用公式 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wid…

知识产权与标准化

根据希赛相关视频课程汇总整理而成&#xff0c;是个人软考的复习笔记&#xff0c;仅供参考 知识产权概述 知识产权类型&#xff1a; ①著作权&#xff08;版权、文学产权&#xff09; ② 工业产权&#xff08;产业产权&#xff09; 知识产权的特点&#xff1a; 无形性、独占性…

Android Studio 打开Local Changes界面

在编写代码的过程中&#xff0c;经常要回顾本地仓库做了那些修改。打开Local Changes界面&#xff0c;能做到一目了然&#xff0c;不用再去使用git命令查看。 File->Settings->Version control->Commit 把Use non-modal commit interface 选项 取消勾选 即可

复现带积分柱状图+多个分类注释

Original research: Tumor microenvironment evaluation promotes precise checkpoint immunotherapy of advanced gastric cancer - PMC (nih.gov) 补充文件位置:https://www.ncbi.nlm.nih.gov/pmc/articles/PMC8356190/bin/jitc-2021-002467supp001.xlsx 原图 该图展示了样…

新手使用GIT上传本地项目到Github(个人笔记)

亲测下面的文章很有用处。 1. 初次使用git上传代码到github远程仓库 - 知乎 (zhihu.com) 2. 使用Git时出现refusing to merge unrelated histories的解决办法 - 知乎

台湾花莲地震已致4死97伤,地震时刻,你需要知道的一切

近日&#xff0c;台湾花莲县海域发生了一次强震&#xff0c;引发了广泛关注。据中国地震台网测定&#xff0c;这次地震的震级高达7.3级&#xff0c;震源深度为12公里&#xff0c;造成了台湾全岛范围内的震感&#xff0c;以及福建、广东等地的明显震感。在这样的紧急情况下&…

终端测试cuda.is_available是true,但是在运行代码时返回的却是false该如何解决?

在运行一个程序的时候出现了这样一个报错、 RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False. If you are running on a CPU-only machine, please use torch.load with map_locationtorch.device(cpu) to map your…