基于python的车牌识别数据集的创建
时间: 2023-09-13 19:11:36 浏览: 149
创建车牌识别数据集需要以下步骤:
1. 收集车牌图片:可以从公共数据集中下载,也可以自己收集。收集的图片需要涵盖不同的车牌类型、不同的角度和不同的光照条件。
2. 标注车牌图片:使用图像标注工具,对车牌图片进行标注,标注信息应包括车牌字符和位置。
3. 数据清洗:删除低质量、重复或不合规的图片。
4. 数据增强:通过旋转、缩放、平移、加噪等方式,增加数据集的多样性。
5. 划分训练集和测试集:将数据集分成训练集和测试集,用于模型的训练和测试。
以下是基于Python的车牌识别数据集创建示例:
```python
import os
import cv2
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 车牌图片文件夹路径
image_dir = "path/to/image/dir"
# 图像标注信息文件路径
anno_file = "path/to/annotation/file"
# 读取图像标注信息
anno_df = pd.read_csv(anno_file)
# 遍历文件夹,读取车牌图片并标注
dataset = []
for filename in os.listdir(image_dir):
if filename.endswith(".jpg"):
# 读取图片
img = cv2.imread(os.path.join(image_dir, filename))
# 获取图片标注信息
plate_num = anno_df.loc[anno_df["filename"]==filename, "plate_num"].values[0]
x1, y1, x2, y2 = anno_df.loc[anno_df["filename"]==filename, ["x1", "y1", "x2", "y2"]].values[0]
# 绘制标注框并保存
cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(img, plate_num, (x1, y1-5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1)
cv2.imwrite(os.path.join("path/to/save/dir", filename), img)
# 添加到数据集
dataset.append({"filename": filename, "plate_num": plate_num})
# 数据清洗
dataset = [sample for sample in dataset if sample["plate_num"].isalnum()]
# 数据增强
augmented_dataset = []
for sample in dataset:
img = cv2.imread(os.path.join("path/to/save/dir", sample["filename"]))
# 随机旋转
angle = np.random.randint(-10, 10)
M = cv2.getRotationMatrix2D((img.shape[1]//2, img.shape[0]//2), angle, 1)
img_rot = cv2.warpAffine(img, M, (img.shape[1], img.shape[0]))
# 随机平移
x, y = np.random.randint(-10, 10, 2)
M = np.float32([[1, 0, x], [0, 1, y]])
img_trans = cv2.warpAffine(img_rot, M, (img.shape[1], img.shape[0]))
# 随机加噪
mean = 0
var = np.random.randint(10, 50)
sigma = var ** 0.5
noise = np.random.normal(mean, sigma, img.shape)
img_noise = img_trans + noise
img_noise = np.clip(img_noise, 0, 255).astype(np.uint8)
# 保存增强后的图片
filename = sample["filename"].split(".")[0] + "_aug.jpg"
cv2.imwrite(os.path.join("path/to/save/dir", filename), img_noise)
# 添加到增强后的数据集
augmented_dataset.append({"filename": filename, "plate_num": sample["plate_num"]})
# 划分训练集和测试集
train_dataset = augmented_dataset[:int(len(augmented_dataset)*0.8)]
test_dataset = augmented_dataset[int(len(augmented_dataset)*0.8):]
# 可视化样本
plt.figure(figsize=(20, 10))
for i in range(10):
sample = train_dataset[np.random.randint(len(train_dataset))]
img = cv2.imread(os.path.join("path/to/save/dir", sample["filename"]))
plt.subplot(2, 5, i+1)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.title(sample["plate_num"])
plt.show()
```
以上示例代码演示了如何读取车牌图片和图像标注信息、对车牌图片进行标注并保存、数据清洗、数据增强以及划分训练集和测试集。最后,可以通过可视化样本来检查数据集是否合适。
阅读全文