CCPD数据集

2024-06-17 04:44
文章标签 数据 ccpd

本文主要是介绍CCPD数据集,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

官网:https://github.com/detectRecog/CCPD

其它介绍:https://blog.csdn.net/qianbin3200896/article/details/103009221

CCPD (Chinese City Parking Dataset, ECCV)

provinces = ["皖", "沪", "津", "渝", "冀", "晋", "蒙", "辽", "吉", "黑", "苏", "浙", "京", "闽", "赣", "鲁", "豫", "鄂", "湘", "粤", "桂", "琼", "川", "贵", "云", "藏", "陕", "甘", "青", "宁", "新", "警", "学", "O"]
alphabets = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W','X', 'Y', 'Z', 'O']
ads = ['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', 'O']

官网github给的3个列表最后都有一个字母O,不是数字0,当作结尾符号,因为中国车牌没有大写字母O,其实也没有大写字母I

省份简称里的"警" 公安内部车, "学" 驾校的车,车牌号没有小写字母

图片名称例子

name = "025-95_113-154&383_386&473-386&473_177&454_154&383_363&402-0_0_22_27_27_33_16-37-15.jpg"print(len(name.split('-')))
print(name.split('-'))

结果如下

7
['025', '95_113', '154&383_386&473', '386&473_177&454_154&383_363&402', '0_0_22_27_27_33_16', '37', '15.jpg']

分割成了7段

  • 154&383_386&473:车牌框的第1、第4个点
  • 0_0_22_27_27_33_16:省份简称_字母_5个字母或数字组合

2020年绿牌数据

车牌号有8位 

train数量

5769
['./CCPD2020/ccpd_green/train/0245182291667-88_93-221&481_490&573-489&561_221&573_223&485_490&481-0_0_3_25_29_31_31_31-132-139.jpg','./CCPD2020/ccpd_green/train/0161783854167-93_97-255&489_465&566-465&566_258&553_255&489_461&495-0_0_3_24_27_26_31_30-148-296.jpg','./CCPD2020/ccpd_green/train/0133203125-90_102-228&515_426&583-426&583_240&582_228&518_413&515-0_0_5_24_29_33_33_30-121-38.jpg']
val数量
import globval_dir = './CCPD2020/ccpd_green/val'
val_imgPaths = glob.glob(val_dir+'/*.jpg')
print(len(val_imgPaths))
print(val_imgPaths[0])
1001
./CCPD2020/ccpd_green/val/04189453125-105_107-165&464_435&620-435&620_172&540_165&464_433&532-0_0_3_25_29_29_30_30-95-92.jpg
test数量
import globtest_dir = './CCPD2020/ccpd_green/test'
test_imgPaths = glob.glob(test_dir+'/*.jpg')
print(len(test_imgPaths))
print(test_imgPaths[0])
5006
./CCPD2020/ccpd_green/test/00954022988505747-90_263-190&522_356&574-356&574_195&571_190&522_351&523-0_0_3_29_32_26_26_26-151-54.jpg
画框

用上面这张图为例

import osimgPath = 'CCPD2020/ccpd_green/val/02-84_90-245&479_437&584-437&551_245&584_245&503_429&479-0_0_3_24_33_26_33_26-103-32.jpg'print(os.path.splitext(imgPath))

打印如下

('CCPD2020/ccpd_green/val/02-84_90-245&479_437&584-437&551_245&584_245&503_429&479-0_0_3_24_33_26_33_26-103-32', '.jpg')

分割图片名称

import osimgPath = 'CCPD2020/ccpd_green/val/02-84_90-245&479_437&584-437&551_245&584_245&503_429&479-0_0_3_24_33_26_33_26-103-32.jpg'numName, _ = os.path.splitext(imgPath)
print(numName.split('-'))

打印如下

['CCPD2020/ccpd_green/val/02', '84_90', '245&479_437&584', '437&551_245&584_245&503_429&479', '0_0_3_24_33_26_33_26', '103', '32']

分割框的2个坐标

import osimgPath = 'CCPD2020/ccpd_green/val/02-84_90-245&479_437&584-437&551_245&584_245&503_429&479-0_0_3_24_33_26_33_26-103-32.jpg'numName, _ = os.path.splitext(imgPath)
x1_y1,x2_y2 = numName.split('-')[2].split('_')
print(x1_y1,x2_y2)
x1,y1 = x1_y1.split('&')
x2,y2 = x2_y2.split('&')
print(x1,y1,x2,y2)

打印如下

245&479 437&584
245 479 437 584

显示框

import os
import cv2imgPath = 'CCPD2020/ccpd_green/val/02-84_90-245&479_437&584-437&551_245&584_245&503_429&479-0_0_3_24_33_26_33_26-103-32.jpg'numName, _ = os.path.splitext(imgPath)
x1_y1,x2_y2 = numName.split('-')[2].split('_')
x1,y1 = x1_y1.split('&')
x2,y2 = x2_y2.split('&')img = cv2.imread(imgPath)
cv2.rectangle(img, (int(x1),int(y1)), (int(x2), int(y2)), (0, 0, 255), 2)
cv2.imshow('img',img)
cv2.waitKey(10000)
cv2.destroyAllWindows()

车牌号名称
import os
import cv2imgPath = 'CCPD2020/ccpd_green/val/02-84_90-245&479_437&584-437&551_245&584_245&503_429&479-0_0_3_24_33_26_33_26-103-32.jpg'numName, _ = os.path.splitext(imgPath)
print(numName.split('-')[4])
print(numName.split('-')[4].split('_'))

打印如下

0_0_3_24_33_26_33_26
['0', '0', '3', '24', '33', '26', '33', '26']

换成号码

import os
import cv2provinces = ["皖", "沪", "津", "渝", "冀", "晋", "蒙", "辽", "吉", "黑", "苏", "浙", "京", "闽", "赣", "鲁", "豫", "鄂", "湘", "粤", "桂", "琼", "川", "贵", "云", "藏", "陕", "甘", "青", "宁", "新", "警", "学", "O"]
alphabets = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W','X', 'Y', 'Z', 'O']
ads = ['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', 'O']imgPath = 'CCPD2020/ccpd_green/val/02-84_90-245&479_437&584-437&551_245&584_245&503_429&479-0_0_3_24_33_26_33_26-103-32.jpg'numName, _ = os.path.splitext(imgPath)
index = [int(i) for i in numName.split('-')[4].split('_')]
first_index = index[0]
second_index = index[1]
last5_index = index[2:]print(provinces[first_index],alphabets[second_index])
print([ads[i] for i in last5_index])

打印如下

皖 A
['D', '0', '9', '2', '9', '2']

拼成号码
import os
import cv2provinces = ["皖", "沪", "津", "渝", "冀", "晋", "蒙", "辽", "吉", "黑", "苏", "浙", "京", "闽", "赣", "鲁", "豫", "鄂", "湘", "粤", "桂", "琼", "川", "贵", "云", "藏", "陕", "甘", "青", "宁", "新", "警", "学", "O"]
alphabets = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W','X', 'Y', 'Z', 'O']
ads = ['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', 'O']imgPath = 'CCPD2020/ccpd_green/val/02-84_90-245&479_437&584-437&551_245&584_245&503_429&479-0_0_3_24_33_26_33_26-103-32.jpg'numName, _ = os.path.splitext(imgPath)
index = [int(i) for i in numName.split('-')[4].split('_')]
first_index = index[0]
second_index = index[1]
last5_index = index[2:]s = ''
for i in [ads[i] for i in last5_index]:s += iprint(provinces[first_index]+alphabets[second_index]+s)

打印如下

皖AD09292

裁剪车牌保存
import os
import cv2provinces = ["皖", "沪", "津", "渝", "冀", "晋", "蒙", "辽", "吉", "黑", "苏", "浙", "京", "闽", "赣", "鲁", "豫", "鄂", "湘", "粤", "桂", "琼", "川", "贵", "云", "藏", "陕", "甘", "青", "宁", "新", "警", "学", "O"]
alphabets = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W','X', 'Y', 'Z', 'O']
ads = ['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', 'O']imgPath = 'CCPD2020/ccpd_green/val/02-84_90-245&479_437&584-437&551_245&584_245&503_429&479-0_0_3_24_33_26_33_26-103-32.jpg'numName, _ = os.path.splitext(imgPath)
index = [int(i) for i in numName.split('-')[4].split('_')]
first_index = index[0]
second_index = index[1]
last5_index = index[2:]
s = ''
for i in [ads[i] for i in last5_index]: s += i
imgName = provinces[first_index]+alphabets[second_index]+s+'.jpg'x1_y1,x2_y2 = numName.split('-')[2].split('_')
x1,y1 = x1_y1.split('&')
x2,y2 = x2_y2.split('&')
img = cv2.imread(imgPath)
img_crop = img[int(y1):int(y2),int(x1):int(x2)]
cv2.imwrite(imgName,img_crop)

train/val/test的图片是否重名
import globtrain_dir = './CCPD2020/ccpd_green/train'
train_imgPaths = glob.glob(train_dir+'/*.jpg')val_dir = './CCPD2020/ccpd_green/val'
val_imgPaths = glob.glob(val_dir+'/*.jpg')test_dir = './CCPD2020/ccpd_green/test'
test_imgPaths = glob.glob(test_dir+'/*.jpg')print(len(train_imgPaths)+len(val_imgPaths)+len(test_imgPaths))merge = set()
merge.update(train_imgPaths,val_imgPaths,test_imgPaths)
print(len(merge))

打印如下

11776
11776

没有重名的图片

合并train/val/test文件夹

把train/val/test文件夹下的图片拷到green文件夹

11776
 同一车牌是否多次采集
import glob
import os
import cv2provinces = ["皖", "沪", "津", "渝", "冀", "晋", "蒙", "辽", "吉", "黑", "苏", "浙", "京", "闽", "赣", "鲁", "豫", "鄂", "湘", "粤", "桂", "琼", "川", "贵", "云", "藏", "陕", "甘", "青", "宁", "新", "警", "学", "O"]
alphabets = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W','X', 'Y', 'Z', 'O']
ads = ['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', 'O']def get_chepai(path):numName, _ = os.path.splitext(path)index = [int(i) for i in numName.split('-')[4].split('_')]first_index = index[0]second_index = index[1]last5_index = index[2:]s = ''for i in [ads[i] for i in last5_index]: s += ireturn provinces[first_index]+alphabets[second_index]+sgreen_dir = './CCPD2020/ccpd_green/green'
green_imgPaths = glob.glob(green_dir+'/*.jpg')
print('图片数量:',len(green_imgPaths))chepai = set()
for imgPath in green_imgPaths:chepai.add(get_chepai(imgPath))
print('车牌数量:', len(chepai))

打印如下

图片数量: 11776
车牌数量: 3298

同一车牌采集了多次

批量裁剪车牌
import glob
import os
import cv2provinces = ["皖", "沪", "津", "渝", "冀", "晋", "蒙", "辽", "吉", "黑", "苏", "浙", "京", "闽", "赣", "鲁", "豫", "鄂", "湘", "粤", "桂", "琼", "川", "贵", "云", "藏", "陕", "甘", "青", "宁", "新", "警", "学", "O"]
alphabets = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W','X', 'Y', 'Z', 'O']
ads = ['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', 'O']def get_chepai(path):numName, _ = os.path.splitext(path)index = [int(i) for i in numName.split('-')[4].split('_')]first_index = index[0]second_index = index[1]last5_index = index[2:]s = ''for i in [ads[i] for i in last5_index]: s += ireturn provinces[first_index]+alphabets[second_index]+sdef get_box(path):numName, _ = os.path.splitext(path)x1_y1,x2_y2 = numName.split('-')[2].split('_')x1,y1 = x1_y1.split('&')x2,y2 = x2_y2.split('&')return [int(x1),int(y1),int(x2),int(y2)]green_dir = './CCPD2020/ccpd_green/green'
green_imgPaths = glob.glob(green_dir+'/*.jpg')
print('图片数量:',len(green_imgPaths))name2num = dict()
for imgPath in green_imgPaths:chepai = get_chepai(imgPath)if chepai in name2num: name2num[chepai] += 1else: name2num[chepai] = 0crop_dir = './CCPD2020/ccpd_green/green_crop/'
for index,imgPath in enumerate(green_imgPaths):chepai = get_chepai(imgPath)img = cv2.imread(imgPath)x1,y1,x2,y2 = get_box(imgPath)img_crop = img[y1:y2,x1:x2]cv2.imwrite(crop_dir+'{}_{}.jpg'.format(chepai,name2num[chepai]),img_crop)name2num[chepai] -= 1if index % 2000==0: print(index)
图片数量: 11776
0
2000
4000
6000
8000
10000
import globcrop_dir = './CCPD2020/ccpd_green/green_crop'
crop_imgPaths = glob.glob(crop_dir+'/*.jpg')
print('裁剪的车牌图片数量:',len(crop_imgPaths))
裁剪的车牌图片数量: 11776

批量裁剪成94x24大小
import glob
import os
import cv2provinces = ["皖", "沪", "津", "渝", "冀", "晋", "蒙", "辽", "吉", "黑", "苏", "浙", "京", "闽", "赣", "鲁", "豫", "鄂", "湘", "粤", "桂", "琼", "川", "贵", "云", "藏", "陕", "甘", "青", "宁", "新", "警", "学", "O"]
alphabets = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W','X', 'Y', 'Z', 'O']
ads = ['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', 'O']def get_chepai(path):numName, _ = os.path.splitext(path)index = [int(i) for i in numName.split('-')[4].split('_')]first_index = index[0]second_index = index[1]last5_index = index[2:]s = ''for i in [ads[i] for i in last5_index]: s += ireturn provinces[first_index]+alphabets[second_index]+sdef get_box(path):numName, _ = os.path.splitext(path)x1_y1,x2_y2 = numName.split('-')[2].split('_')x1,y1 = x1_y1.split('&')x2,y2 = x2_y2.split('&')return [int(x1),int(y1),int(x2),int(y2)]green_dir = './CCPD2020/ccpd_green/green'
green_imgPaths = glob.glob(green_dir+'/*.jpg')
print('图片数量:',len(green_imgPaths))name2num = dict()
for imgPath in green_imgPaths:chepai = get_chepai(imgPath)if chepai in name2num: name2num[chepai] += 1else: name2num[chepai] = 0crop_dir = './CCPD2020/ccpd_green/green_crop_94x24/'
for index,imgPath in enumerate(green_imgPaths):chepai = get_chepai(imgPath)img = cv2.imread(imgPath)x1,y1,x2,y2 = get_box(imgPath)img_crop = img[y1:y2,x1:x2]img_crop = cv2.resize(img_crop,(94,24))cv2.imwrite(crop_dir+'{}_{}.jpg'.format(chepai,name2num[chepai]),img_crop)name2num[chepai] -= 1if index % 2000==0: print(index)crop_imgPaths = glob.glob(crop_dir+'/*.jpg')
print('裁剪的车牌图片数量:',len(crop_imgPaths))

打印结果

图片数量: 11776
0
2000
4000
6000
8000
10000
裁剪的车牌图片数量: 11776

这篇关于CCPD数据集的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1068507

相关文章

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

SpringBatch数据写入实现

《SpringBatch数据写入实现》SpringBatch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,... 目录python引言一、ItemWriter核心概念二、数据库写入实现三、文件写入实现四、多目标写入

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

Mysql如何将数据按照年月分组的统计

《Mysql如何将数据按照年月分组的统计》:本文主要介绍Mysql如何将数据按照年月分组的统计方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql将数据按照年月分组的统计要的效果方案总结Mysql将数据按照年月分组的统计要的效果方案① 使用 DA

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分