随着城市化进程的加快,城市交通问题日益严重,停车难成为了许多城市的共性问题。针对这一问题,基于深度学习的远距离停车位检测系统能够有效提升停车管理效率和用户体验。本文将详细介绍如何构建一个基于 YOLOv5(或更高版本,如 YOLOv6、YOLOv7、YOLOv8、YOLOv10)的远距离停车位检测系统,包括数据集的准备、模型训练、用户界面设计和系统实现。最终,我们将提供完整的代码示例以及相关的 data.yaml
配置文件。
目录
1. 系统架构
该系统主要包括以下几个模块:
- 数据集准备
- 模型选择与训练
- 停车位检测与实时推理
- 用户界面设计(UI)
- 系统测试与评估
1.1 技术选型
- 深度学习框架:PyTorch
- 目标检测模型:YOLOv5、YOLOv6、YOLOv7、YOLOv8、YOLOv10
- 用户界面:PyQt5
- 图像处理:OpenCV
2. 数据集准备
2.1 数据收集
首先,我们需要收集停车场的图像数据集。这些数据可以通过以下方式获取:
- 自行拍摄停车场的照片
- 从公开数据集(如 COCO、Open Images)中提取相关图像
- 使用网络爬虫从互联网上获取停车位图片
2.2 数据标注
使用标注工具(如 LabelImg 或 VoTT)对图像进行标注,标注内容包括停车位的坐标、类别等信息。每个停车位应标注为一个边界框。
2.3 数据集格式
YOLOv5 数据集要求的格式为:
- 每张图片对应一个同名的文本文件,文件名为
image_name.txt
,其中每一行包含:<class_id> <x_center> <y_center> <width> <height>
(相对坐标)。
2.4 数据集结构示例
dataset/
│
├── images/
│ ├── train/
│ ├── val/
│ └── test/
│
├── labels/
│ ├── train/
│ ├── val/
│ └── test/
│
└── data.yaml
2.5 data.yaml
文件示例
train: ./images/train
val: ./images/val
nc: 1 # 类别数量
names: ['Parking Spot'] # 类别名称
3. 模型选择与训练
3.1 环境准备
确保已经安装了所需的库:
pip install torch torchvision torchaudio
pip install opencv-python
pip install PyQt5
pip install matplotlib
3.2 YOLOv5 模型训练
下载 YOLOv5 仓库并进入目录:
git clone https://github.com/ultralytics/yolov5
cd yolov5
然后使用以下命令进行训练:
python train.py --img 640 --batch 16 --epochs 50 --data data.yaml --weights yolov5s.pt
训练完成后,模型权重将保存在 runs/train/exp/weights/best.pt
中。
4. 停车位检测与实时推理
4.1 推理代码实现
以下是使用 YOLOv5 进行停车位检测的示例代码:
import torch
import cv2
# 加载模型
model = torch.hub.load('ultralytics/yolov5', 'custom', path='runs/train/exp/weights/best.pt', force_reload=True)
def detect_parking_spots(img_path):
# 读取图像
img = cv2.imread(img_path)
# 进行检测
results = model(img)
# 解析结果
results.print() # 打印结果
results.save() # 保存结果
# 在图像上绘制结果
annotated_img = results.render()[0]
# 显示图像
cv2.imshow('Parking Spot Detection', annotated_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 使用示例
detect_parking_spots('path_to_test_image.jpg')
4.2 实时检测
对于实时检测,我们可以使用摄像头或视频流进行检测:
def detect_video(): cap = cv2.VideoCapture(0) # 使用摄像头 while True: ret, frame = cap.read() if not ret: break # 进行检测 results = model(frame) annotated_frame = results.render()[0] # 显示结果 cv2.imshow('Real-time Parking Spot Detection', annotated_frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() # 调用实时检测 detect_video()
5. 用户界面设计
使用 PyQt5 创建简单的用户界面,允许用户上传图片或实时视频进行停车位检测。
5.1 UI 设计代码
以下是基本的 PyQt5 用户界面设计代码:
import sys
import cv2
import torch
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QFileDialog, QVBoxLayout
from PyQt5.QtGui import QPixmap
class ParkingSpotDetectionApp(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('Parking Spot Detection')
self.setGeometry(100, 100, 800, 600)
self.layout = QVBoxLayout()
self.image_label = QLabel(self)
self.layout.addWidget(self.image_label)
self.upload_button = QPushButton('Upload Image', self)
self.upload_button.clicked.connect(self.upload_image)
self.layout.addWidget(self.upload_button)
self.detect_button = QPushButton('Detect Parking Spots', self)
self.detect_button.clicked.connect(self.detect_parking_spots)
self.layout.addWidget(self.detect_button)
self.setLayout(self.layout)
# 加载模型
self.model = torch.hub.load('ultralytics/yolov5', 'custom', path='runs/train/exp/weights/best.pt', force_reload=True)
def upload_image(self):
img_path, _ = QFileDialog.getOpenFileName(self, 'Select an Image', '', 'Images (*.png *.jpg *.jpeg)')
if img_path:
self.image_path = img_path
pixmap = QPixmap(img_path)
self.image_label.setPixmap(pixmap.scaled(self.image_label.size(), aspectRatioMode=True))
def detect_parking_spots(self):
if hasattr(self, 'image_path'):
img = cv2.imread(self.image_path)
results = self.model(img)
annotated_img = results.render()[0]
# 转换为 QPixmap
height, width, channel = annotated_img.shape
bytes_per_line = 3 * width
q_img = QPixmap.fromImage(QImage(annotated_img.data, width, height, bytes_per_line, QImage.Format_RGB888))
self.image_label.setPixmap(q_img)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = ParkingSpotDetectionApp()
win.show()
sys.exit(app.exec_())
5.2 实时视频流 UI
可以扩展上面的用户界面,添加实时视频流的检测按钮,以便用户选择使用摄像头进行实时检测。
6. 测试与评估
在系统开发完成后,使用不同的停车场图像和视频进行测试,评估系统的准确性和实时性。可以使用标准指标(如 mAP、FPS)对模型性能进行评估。
6.1 性能评估
- 准确性:检测框的准确性和漏检率
- 实时性:每秒帧数(FPS)
7. 总结与展望
本文详细介绍了如何构建一个基于深度学习的远距离停车位检测系统,包括数据集准备、模型训练、停车位检测实现及用户界面设计。通过该系统,用户可以方便地进行停车位检测,提高停车管理效率。未来,我们可以通过模型的进一步优化和更多功能的添加,使该系统在实际应用中更加完善。