CCPD是一个大型的、多样化的、经过仔细标注的中国城市车牌开源数据集。CCPD数据集主要分为CCPD2019数据集和CCPD2020(CCPD-Green)数据集。CCPD2019数据集车牌类型仅有普通车牌(蓝色车牌),CCPD2020数据集车牌类型仅有新能源车牌(绿色车牌)。

在CCPD数据集中,每张图片仅包含一张车牌,车牌的车牌省份主要为皖。CCPD中的每幅图像都包含大量的标注信息,但是CCPD数据集没有专门的标注文件,每张图像的文件名就是该图像对应的数据标注。标注最困难的部分是注释四个顶点的位置。为了完成这项任务,数据发布者首先在10k图像上手动标记四个顶点的位置。然后设计了一个基于深度学习的检测模型,在对该网络进行良好训练后,对每幅图像的四个顶点位置进行自动标注。最后,数据发布者雇用了7名兼职工人在两周内纠正这些标注。CCPD提供了超过250k个独特的车牌图像和详细的注释。每张图像的分辨率为720(宽度)× 1160(高)× 3(通道)。实际上,这种分辨率足以保证每张图像中的车牌清晰可辨,但是该数据有些图片标注可能不准。不过总的来说CCPD数据集非常推荐研究车牌识别算法的人员学习使用。

CCPD官方开源仓库地址为CCPD,该仓库介绍了CCPD2019和CCPD2020的相关信息和下载地址。关于CCPD数据集更详细的介绍见其ECCV2018发表论文,地址为Towards End-to-End License Plate Detection and Recognition: A Large Dataset

CCPD数据集介绍

CCPD2019数据集

CCPD2019数据集主要采集于合肥市停车场,采集时间为上午7:30到晚上10:00,停车场采集人员手持Android POS机对停车场的车辆拍照进行数据采集。所拍摄的车牌照片涉及多种复杂环境,包括模糊、倾斜、雨天、雪天等。CCPD2019数据集包含了25万多幅中国城市车牌图像和车牌检测与识别信息的标注。主要介绍如下:

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

CCPD2019/CCPD-Base中的图像被拆分为train/val数据集。使用CCPD2019中的子数据集(CCPD-DB、CCPD-Blur、CCPD-FN、CCPD-Rotate、CCPD-Tilt、CCPD-Challenge)进行测试。CCPD2019数据集(数据大小12.26G)下载地址:

CCPD2019中部分图片如下图所示:

CCPD2020数据集

CCPD2020数据集采集方法应该和CCPD2019数据集类似。CCPD2020仅仅有新能源车牌图片,包含不同亮度,不同倾斜角度,不同天气环境下的车牌。CCPD2020中的图像被拆分为train/val/test数据集,train/val/test数据集中图片数分别为5769/1001/5006。CCPD2020数据集(数据大小865.7MB)下载地址:

CCPD2020中部分图片如下图所示:

CCPD数据集标注处理

CCPD数据集没有专门的标注文件,每张图像的文件名就是该图像对应的数据标注。例如图片3061158854166666665-97_100-159&434_586&578-558&578_173&523_159&434_586&474-0_0_3_24_33_32_28_30-64-233.jpg的文件名可以由分割符'-'分为多个部分:

  1. 3061158854166666665为区域(这个值可能有问题,可以不管);
  2. 97_100对应车牌的两个倾斜角度-水平倾斜角和垂直倾斜角, 水平倾斜97度, 竖直倾斜100度。水平倾斜度是车牌与水平线之间的夹角。二维旋转后,垂直倾斜角为车牌左边界线与水平线的夹角。CCPD数据集中这个参数标注可能不那么准,这个指标具体参考了论文Hough Transform and Its Application in Vehicle License Plate Tilt Correction
  3. 159&434_586&578对应边界框左上角和右下角坐标:左上(159, 434), 右下(586, 578);
  4. 558&578_173&523_159&434_586&474对应车牌四个顶点坐标(右下角开始顺时针排列):右下(558, 578),左下(173, 523),左上(159, 434),右上(586, 474);
  5. 0_0_3_24_33_32_28_30为车牌号码(第一位为省份缩写),在CCPD2019中这个参数为7位,CCPD2020中为8位,有对应的关系表;
  6. 64为亮度,数值越大车牌越亮(可能不准确,仅供参考);
  7. 233为模糊度,数值越小车牌越模糊(可能不准确,仅供参考)。

对于每张图片的标注信息直接字符分割即可。一个展示CCPD数据集单张图片标注的Python代码如下。

# -*- coding: utf-8 -*-
"""
Created on Wed Jun 9 18:24:10 2021 @author: luohenyueji
""" from PIL import Image, ImageDraw, ImageFont
import os 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([tuple(box[0]), tuple(box[1])], outline="#FFFFFF", width=3) # --- 绘制四个关键点 def DrawPoint(im, points): draw = ImageDraw.Draw(im) for p in points:
center = (p[0], p[1])
radius = 5
right = (center[0]+radius, center[1]+radius)
left = (center[0]-radius, center[1]-radius)
draw.ellipse((left, right), fill="#FF0000") # --- 绘制车牌 def DrawLabel(im, label):
draw = ImageDraw.Draw(im)
# draw.multiline_text((30,30), label.encode("utf-8"), fill="#FFFFFF")
font = ImageFont.truetype('simsun.ttc', 64)
draw.text((30, 30), label, font=font) # --- 图片可视化 def ImgShow(imgpath, box, points, label):
# 打开图片
im = Image.open(imgpath)
DrawBox(im, box)
DrawPoint(im, points)
DrawLabel(im, label)
# 显示图片
im.show()
im.save('result.jpg') def main():
# 图像路径
imgpath = 'ccpd_green/val/0136360677083-95_103-255&434_432&512-432&512_267&494_255&434_424&449-0_0_3_25_30_24_24_32-98-218.jpg' # 图像名
imgname = os.path.basename(imgpath).split('.')[0] # 根据图像名分割标注
_, _, box, points, label, brightness, blurriness = imgname.split('-') # --- 边界框信息
box = box.split('_')
box = [list(map(int, i.split('&'))) for i in box] # --- 关键点信息
points = points.split('_')
points = [list(map(int, i.split('&'))) for i in points]
# 将关键点的顺序变为从左上顺时针开始
points = points[-2:]+points[:2] # --- 读取车牌号
label = label.split('_')
# 省份缩写
province = provincelist[int(label[0])]
# 车牌信息
words = [wordlist[int(i)] for i in label[1:]]
# 车牌号
label = province+''.join(words) # --- 图片可视化
ImgShow(imgpath, box, points, label) main()

上面的代码读取了CCPD中的一张图片,并绘制了其车牌的边界框,关键点,车牌名。结果如下所示

类型 图片
原图
标注展示图

[深度学习] CCPD车牌数据集介绍的更多相关文章

  1. 【神经网络与深度学习】CIFAR-10数据集介绍

    CIFAR-10数据集含有6万个32*32的彩色图像,共分为10种类型,由 Alex Krizhevsky, Vinod Nair和 Geoffrey Hinton收集而来.包含50000张训练图片, ...

  2. 使用深度学习的超分辨率介绍 An Introduction to Super Resolution using Deep Learning

    使用深度学习的超分辨率介绍 关于使用深度学习进行超分辨率的各种组件,损失函数和度量的详细讨论. 介绍 超分辨率是从给定的低分辨率(LR)图像恢复高分辨率(HR)图像的过程.由于较小的空间分辨率(即尺寸 ...

  3. 卷积神经网络CNN与深度学习常用框架的介绍与使用

    一.神经网络为什么比传统的分类器好 1.传统的分类器有 LR(逻辑斯特回归) 或者 linear SVM ,多用来做线性分割,假如所有的样本可以看做一个个点,如下图,有蓝色的点和绿色的点,传统的分类器 ...

  4. 深度学习开源工具——caffe介绍

    本页是转载caffe的一个介绍,之前的页面图都down了,更新一下. 目录 简介 要点记录 提问 总结 简介 报告时间是北京时间 12月14日 凌晨一点到两点,主讲人是 Caffe 团队的核心之一 E ...

  5. go微服务框架go-micro深度学习(一) 整体架构介绍

    产品嘴里的一个小项目,从立项到开发上线,随着时间和需求的不断激增,会越来越复杂,变成一个大项目,如果前期项目架构没设计的不好,代码会越来越臃肿,难以维护,后期的每次产品迭代上线都会牵一发而动全身.项目 ...

  6. 深度学习之TensorFlow的介绍与安装

    TensorFlow是一个采用数据流图(data flow graphs)用于数值计算的开源软件库.它最初是由Google大脑小组的研发人员设计开发的,用于机器学习和神经网络方面的研究.但是这个系统的 ...

  7. (zhuan) 深度学习全网最全学习资料汇总之模型介绍篇

    This blog from : http://weibo.com/ttarticle/p/show?id=2309351000224077630868614681&u=5070353058& ...

  8. Recorder︱深度学习小数据集表现、优化(Active Learning)、标注集网络获取

    一.深度学习在小数据集的表现 深度学习在小数据集情况下获得好效果,可以从两个角度去解决: 1.降低偏差,图像平移等操作 2.降低方差,dropout.随机梯度下降 先来看看深度学习在小数据集上表现的具 ...

  9. 【转】自学成才秘籍!机器学习&深度学习经典资料汇总

      小编都深深的震惊了,到底是谁那么好整理了那么多干货性的书籍.小编对此人表示崇高的敬意,小编不是文章的生产者,只是文章的搬运工. <Brief History of Machine Learn ...

随机推荐

  1. TF-GNN踩坑记录(二)

    引言 最近在尝试构建GraphTensor时,尝试把默认的特征名hidden_state改成其他时,出现了奇怪的报错. 报错 WARNING:tensorflow:Gradients do not e ...

  2. 可观测性的常见用例|Techtarget

    [ 文章来源 ]https://www.techtarget.com/searchitoperations/tip/Common-use-cases-for-observability 这些可观测性用 ...

  3. 【做题笔记】CSP-S 往年试题

    题单 本文章正在持续更新-- [2021] 廊桥分配 题目 题面描述 所有飞机分为两类--国内区和国际区,两区廊桥数量互不干扰.每架飞机遵循"先到先得"的原则,优先选择编号最小的廊 ...

  4. 腾讯云短信SDK-精简版

    /** * 腾讯云短信SDK-精简版 * 本模块使用-向腾讯云短信服务器发送请求 * @return json 腾讯服务器返回值-json字符串 */ private function send_sm ...

  5. Spring 深入——IoC 容器 02

    IoC容器的实现学习--02 目录 IoC容器的实现学习--02 回顾 IoC 容器的初始化过程: BeanDefinition 的 Resource 定位 小结: 回顾 前面学习了 IoC 模式的核 ...

  6. Abp.Zero 手机号免密登录验证与号码绑定功能的实现(一):验证码模块

    这是一篇系列博文,我将使用Abp.Zero搭建一套集成手机号免密登录验证与号码绑定功能的用户系统: Abp.Zero 手机号免密登录验证与号码绑定功能的实现(一):验证码模块 Abp.Zero 手机号 ...

  7. Python基础之模块:7、项目开发流程和项目需求分析及软件开发目录

    一.项目开发流程 1.项目需求分析 明确项目具体功能: 明确到底要写什么东西,实现什么功能,在这个阶段的具体要询问项目经理和客户的需求 参与人员: 产品经理.架构师.开发经理 技术人员主要职责: 引导 ...

  8. spring运行报500 bean不存在

    spring运行报500 bean不存在 bean不存在 步骤: ​ 查看bean是否注入成功 ​ junit单元测试 ​ 问题,不一定在我们底层,是spring出现了问题 ​ SpringMVC整合 ...

  9. K8s如何启用cgroup2支持?

    什么是 cgroup ️Reference: control groups(控制组),通常被称为cgroup,是Linux内核的一项功能.它允许将进程组织成分层的组,然后限制和监控各种资源的使用. 内 ...

  10. JAVA 用分苹果来理解本题

    思路 其实这是一道非常经典的分苹果问题:有m个一样的苹果和n个一样的盘子,把苹果放盘子里,每个盘子允许0-m个苹果,求问有多少种分法? 与本题的共通之点在于,输入的正整数可以看成m个苹果,拆分出的加数 ...