基于pytorch+transformers的车牌识别

news2024/10/5 14:04:04

目录

  • 程序流程设计
  • 熟悉训练数据集
    • CCPD2019数据集
    • CCPD数据集标注信息
    • 单例再现
  • 加载本地车牌数据集

程序流程设计

1,熟悉训练数据集;
2,加载本地车牌数据集;
3,定义网络模型;
4,输入数据集训练模型;
5,保存模型在线推理;
6,GUI可视化 ;

熟悉训练数据集

CCPD2019数据集

本项目所有的数据都是基于CCPD2019数据集,CCPD2019数据集包含了25万多幅中国城市车牌图像和车牌检测与识别信息的标注,主要采集于合肥市,采集人员手持Android POS机对停车场的车辆拍照进行数据采集。所拍摄的车牌照片涉及多种复杂环境,包括模糊、倾斜、雨天、雪天等。具体分类如下

类别描述数量级
CCPD-base通用车牌图片200k
CCPD-blur由于摄像机镜头抖动导致的模糊车牌图片5k
CCPD-challenge在车牌检测识别任务中较有挑战性的图片10k
CCPD-db车牌区域亮度较亮、较暗或者不均匀20k
CCPD-fn车牌离摄像头拍摄位置相对较近或较远20k
CCPD-np没有安装车牌的新车图片3k
CCPD-rotate车牌水平倾斜20到50度,竖直倾斜-10到10度10k
CCPD-tilt车牌水平倾斜15到45度,竖直倾斜15到45度10k
CCPD-weather车牌在雨雪雾天气拍摄得到10k

同目录下的splits文件夹包含各类别的标签 ,包含了由CCPD-Base中的图像被拆分成的训练train集,验证val集,测试test则由非CCPD-Base中的图像组成。

CCPD数据集标注信息

CCPD数据集里面的每张图像的文件名就是该图像对应的数据标注。例如图片

ccpd_base\01-86_91-298&341_449&414-458&394_308&410_304&357_454&341-0_0_14_28_24_26_29-124-24.jpg的文件名可以由分割符’-'分为多个部分:
  • ccpd_base 表示图片所属的类别,这是base类;
  • 01为区域(应该是哪个区域);
  • 86_91对应车牌的两个倾斜角度-水平倾斜角和垂直倾斜角, 水平倾斜97度, 竖直倾斜100度。水平倾斜度是车牌与水平线之间的夹角。二维旋转后,垂直倾斜角为车牌左边界线与水平线的夹角。CCPD数据集中这个参数标注可能不那么准,这个指标具体参考了论文Hough Transform and Its Application in Vehicle License Plate Tilt Correction;
  • 298&341_449&414对应边界框左上角和右下角坐标:左下角坐标(298,341), 右上角坐标(449,414);
  • 458&394_308&410_304&357_454&341对应车牌四个顶点坐标(右上角开始逆时针走):右上(458,394),左上(308,410),左下(304,357),右下(454,341);
  • 0_0_14_28_24_26_29为车牌号码,第一位为省份代码,后面6位是大写字母和数字,有对应的关系表;
  • 124为亮度,数值越大车牌越亮;
  • 24 为模糊度,数值越小车牌越模糊。

单例再现

在知道数据大体情况和每张图片携带的信息后,其实可以情景再现,下面任选一张图片,提取像素信息和位置信息和内容信息进行展示以便更好的掌握数据集具体情况。

# -*- encoding: utf-8 -*-
'''
@Project :   license_plate
@Desc    :   车牌识别,包括车牌语义分割,车牌识别
@Time    :   2023/04/19 20:42:53
@Author  :   帅帅de三叔,zengbowengood@163.com
'''
import os
from PIL import Image, ImageDraw, ImageFont

provincelist = [
    "皖", "沪", "津", "渝", "冀",
    "晋", "蒙", "辽", "吉", "黑",
    "苏", "浙", "京", "闽", "赣",
    "鲁", "豫", "鄂", "湘", "粤",
    "桂", "琼", "川", "贵", "云",
    "西", "陕", "甘", "青", "宁",
    "新"]

wordlist = [
    "A", "B", "C", "D", "E",
    "F", "G", "H", "J", "K",
    "L", "M", "N", "P", "Q",
    "R", "S", "T", "U", "V",
    "W", "X", "Y", "Z", "0",
    "1", "2", "3", "4", "5",
    "6", "7", "8", "9"]

def DrawBox(im, box): #车牌边框
    draw = ImageDraw.Draw(im)
    draw.rectangle(box, outline='red', width=3)

def DrawPoint(im, points):#绘制车牌四个边界点
    draw =  ImageDraw.Draw(im)
    for p in points:
        radius =3
        draw.ellipse((p[0]-radius, p[1]-radius, p[0]+radius, p[1]+radius), fill='green')
        
def DrawLable(im,  label): #绘制车牌
    draw = ImageDraw.Draw(im)
    font = ImageFont.truetype('simsun.ttc',  64)
    draw.text((30, 30), label, font=font, fill='red')

def ImgShow(imgpath, box, points, label):  #显示效果
    im = Image.open(imgpath)
    DrawBox(im, box)
    DrawPoint(im, points)
    DrawLable(im, label)
    im.show()
    im.save(r"D:\项目\车牌\result.jpg")

if __name__=="__main__":
    imgpath = r"D:\项目\车牌\CCPD\CCPD2019\ccpd_base\01-86_91-298&341_449&414-458&394_308&410_304&357_454&341-0_0_14_28_24_26_29-124-24.jpg"
    im = Image.open(imgpath)
    imgname = os.path.basename(imgpath).split('.')[0]
    _,_,box, points,label,brightness,blurriness = imgname.split('-')
    box  = box.split('_')
    box= [tuple(map(int, i.split('&')))  for i in  box]
    
    # DrawBox(im, box) 
    # im.show() #显示带车牌框的图片

    points = points.split('_')
    points = [tuple(map(int, i.split('&'))) for i in points]
    # DrawPoint(im, points)
    # im.show()

    label = label.split('_')
    province  = provincelist[int(label[0])]
    word = [wordlist[int(i)] for i in label[1:]]
    label = province+''.join(word)
    # print(label)
    # DrawLable(im, label)
    # im.show()

    ImgShow(imgpath,box,points,label)

展示效果如下

展示效果
从展示效果图可以看到车牌框圈出来了,车牌四个角也用绿色点描上了,车牌内容也在左上角标注了,是不是对数据集有了更深的了解呢?

加载本地车牌数据集

参考文献
1,CCPD车牌数据集介绍
https://blog.csdn.net/LuohenYJ/article/details/117752120
https://blog.csdn.net/guyuealian/article/details/128704181
2,图像语义分割
https://huggingface.co/docs/transformers/tasks/semantic_segmentation
3,基于深度学习的车牌检测识别(Pytorch)(ResNet +Transformer)
https://blog.csdn.net/weixin_48866452/article/details/120319588
4,pytorch加载自己的图片数据集的两种方法
https://blog.csdn.net/qq_53345829/article/details/124308515
5,pytorch的 Custom Dataset
https://pytorch.org/tutorials/beginner/basics/data_tutorial.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于复杂事件处理和事件驱动架构的争论

复杂事件处理(Complex Event Processing,CEP)系统和事件驱动架构(Event Driven Architecture,EDA)都被认为会在目前和未来的精致繁杂的系统设计中扮演重要角色。但是它们的角色是什么?会对业界产…

初识vue-模板

目录 模板语法 模板插值 指令 条件渲染(v-if ;v-show) 列表循环(v-for) ref JSX(render渲染) 条件渲染 列表渲染 八皇后框架-背景格(循环) 模板语法 Vue.js使用了…

Vue3+Element Plus环境搭建和一键切换明暗主题的配置

Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。而Element Plus是一款基于Vue3面向设计师和开发者的组件库。 最终效果: 环境搭建 已安装 16.0 或更高版本的 Node.js,终端: npm init vuelatest这一…

智慧校园系统平台实现校内导航资产管线一体化管理

构建智慧校园系统平台是国家和大专院校共同倡议的校园信息化建设方向,是运用物联网技术搭建的一体化综合平台,基于各种应用服务系统,把学校的教务、办公、教学、学习、管理、资产、校园安全、安防、消防等各个环节融为一体,提高学…

MATLAB算法实战应用案例精讲-【人工智能】对比学习(概念篇)(补充篇)

目录 前言 几个高频面试题目 基于对比学习(ContrastiveLearning)的文本表示模型【为什么】能学到文本【相似】度? 为什么对比学习能学到很好的语义相似度? 那么如何评价这个表示空间的质量呢? 知识储备 监督学习和非监督学习 算法原理…

Web开发人员的10个数据库优化最佳实践

数据库优化已经成为web开发人员提高web应用程序性能,从而改善用户体验的关键。对一些人来说,这可能听起来不太吸引人,但如果能正确地优化数据库,就可以提高性能、减少瓶颈并节省资源。 幸运的是,有些优化技术在sql查询…

sqlserver object_id()函数学习

在SQLServer数据库中,如果查询数据库中是否存在指定名称的索引或者外键约束等,经常会用到object_id(name,type)方法, 语法:object_id(objectname)或object(objectname,type) 作用:该函数会返回指定对象的ID值&#xf…

springboot 整合ehchace 缓存教程

ehcache介绍 Ehcache是一种高性能、开源的Java缓存框架,被广泛应用于许多大规模、高并发的分布式系统中。它提供了一种快速、可扩展、分布式的数据缓存方案,支持各种内存级别的缓存、磁盘级别的缓存、分布式缓存等。Ehcache设计目标主要是提供高性能和可…

【LeetCode】198.打家劫舍

198.打家劫舍(中等) 思路 定义数组 dp, dp[i] 表示抢劫到第 i 个房子的时候,可以抢劫的最大数量。dp[i] 有两种可能:一种是我们选择不抢劫这个房子,此时累积金额为 dp[i-1] ;另一种是我们选择抢…

儿童用灯哪个品牌好?推荐专业的儿童护眼台灯

一款好的儿童台灯,主要是从5个方面决定,照度及均匀度,蓝光,色温,显指,频闪 ① 照度及均匀度最高是国AA级,其次就是国A级 ② 蓝光一定要选择RG0无危险级,蓝光能量最强,…

给你安利一款不需要魔法就能免费使用的idea插件Bito-ChatGPT

一款不需要魔法就能免费使用的idea插件Bito-ChatGPT 一 、写在前面二、Bito是什么? 🔑🔑 **What does Bito AI do?**三 、安装Bito四、使用Bito4.1 创建个人工作空间4.2 使用Bito4.2.1 问任何技术问题(Ask any technical questio…

端口聚合与Hash算法

目录 前言 一、Hash算法简介 二、负载分担 1.逐流负载分担 2.逐包负载分担 三、Hash算法与负载分担 1.转发原理 四、堆叠情况下的负载分担 五、配置流程 前言 提示:关于Hash与负载分担方式 提示:以下是本篇文章正文内容,下面案例可供…

Win11电脑桌面的图标变成白色了怎么解决?

Win11电脑桌面的图标变成白色了怎么解决?有用户将自己的电脑开机之后,出现了桌面图标变成白色的情况,虽然软件还是可以正常的打开,但是图标消失了看起来非常的不习惯,那么这个问题要怎么去解决呢?来看看以下…

PP825A 3BSE042240R3转换为后备控制系统和控制系统中的报警系统

​ ​ PP825A 3BSE042240R3转换为后备控制系统和控制系统中的报警系统 步进系统(Stepper motor)的优缺点是什么 步进电机-直流电流产生磁场。它是恒流系统。由于转子极数,扭矩随速度下降。 步进电机的优点 设计简单 控制简单 出色的低速扭矩…

德国 DocuWare 文档管理软件平台

DocuWare 是一个先进的平台,可让您集中、快速、有效地管理、处理和利用业务信息。 我们的文档管理和工作流程解决方案的各项功能可以集成到任何 IT 系统中,可以数字化任何部门的手动或纸质业务流程。提高您公司的生产力,让您的团队更轻松地完…

Matlab与ROS---TF坐标系(七)

0. 简介 我们上面讲了最基础的通信机制以及在Matlab中如何使用这些通信,下面我们这一讲来主要介绍ROS当中最常用的TF坐标系在Matlab中的使用。tf是分布式的,因此所有的坐标帧信息对ROS网络中的每个节点都是可用的。所以这一节就是带领读者熟悉该怎么在M…

gpt人工智能写论文怎么样-chatGTP如何写论文

用gpt写论文怎么样 使用 GPT 写论文具体的操作方法因人而异,但可以提供一些建议: 充分理解论文的题目、主题和结构,并确定论文所需的内容和方向。 针对论文的不同部分,使用 GPT 模型进行自动化生成或补充,例如摘要、…

Android签名 一 查看签名信息

你可能想知道 通过这篇文章可以解决哪些问题以及学到什么: 1.如果我们有一个应用,如何查看应用的签名信息? 2.如果我们有签名原始文件,如何查看签名文件中的签名信息? 这篇文章介绍了如何查看应用和签名文件中的签名信…

DiskGenius硬盘分区及数据恢复软件

目录 一、DiskGenius介绍 二、DiskGenius下载 三、DiskGenius功能 1、软件详细教程 2、将空闲空间合并到现有分区 3、无损扩容分区 4、注意事项: 一、DiskGenius介绍 DiskGenius是一款硬盘分区及数据恢复软件。它是在最初的DOS版的基础上开发而成的。Window…

PMP课堂模拟题目及解析(第3期)

21. 一家农业设备制造商因一个缺陷部件而召回数千个产品。这个问题导致许多客户不满,公司花费 500 万美元来修理和更换零件。哪一种成本预算类型可以防止这个问题? A. 非一致性成本 B. 一致性成本 C. 矩阵图 D. 多标准决策分析 22. 一位团队成员…