YOLO和OpenCV的智能停车位检测系统

YOLO和OpenCV的智能停车位检测系统 🅿️

🔍 项目概述

本项目利用YOLO(You Only Look Once)目标检测算法和OpenCV图像处理库,实时检测并监控停车场内的车位状态。通过高精度的空位与占用车位识别,帮助优化停车场管理效率。
在这里插入图片描述

🛠️ 核心功能

✅ 基于YOLOv4/YOLOv8的实时车位检测
✅ OpenCV图像处理技术
✅ 车辆边界框标注与目标检测
✅ 可自定义的停车区域映射
✅ 支持实时摄像头流与视频输入

📸 演示效果

![Screenshot 2025-02-19 211822]
在这里插入图片描述

🏗️ 安装指南

1️⃣ 进代码


cd Smart-Parking-Space-Detector-using-YOLO-and-OpenCV

2️⃣ 安装依赖库

pip install -r requirements.txt

3️⃣ 下载YOLO权重文件
从YOLO官网下载YOLOv4权重或使用预训练的YOLOv8模型,将权重文件放入models/目录。
4️⃣ 运行检测脚本

python detect_parking.py --source video.mp4

或使用摄像头实时检测:

python detect_parking.py --source 0
import cv2
import pickle
import numpy as np

try:
  with open(r"E:\Car_Parking_Space_Detector_YOLOv8-main\Car_Parking_Space_Detector_YOLOv8-main\Space_ROIs",
              'rb') as f:
      posList = pickle.load(f)
except FileNotFoundError:
    posList = []

polygon_points = []  # List to store points of the polygon

def mouseClick(event, x, y, flags, params):
    global polygon_points, posList

    if event == cv2.EVENT_LBUTTONDOWN:
        polygon_points.append((x, y))

        if len(polygon_points) == 4:
            posList.append(polygon_points.copy())
            with open('carParkPos', 'wb') as f:
                pickle.dump(posList, f)
            polygon_points = []

    elif event == cv2.EVENT_RBUTTONDOWN:
        for i, polygon in enumerate(posList):
            if cv2.pointPolygonTest(np.array(polygon, dtype=np.int32), (x, y), False) >= 0:
                posList.pop(i)
                with open('carParkPos', 'wb') as f:
                    pickle.dump(posList, f)
                break

while True:
    img = cv2.imread(r"E:\Car_Parking_Space_Detector_YOLOv8-main\Car_Parking_Space_Detector_YOLOv8-main\ROI_Reference.png")
    for polygon in posList:
        pts = np.array(polygon, np.int32)
        pts = pts.reshape((-1, 1, 2))
        cv2.polylines(img, [pts], True, (0, 0, 255), 2)

    for point in polygon_points:
        cv2.circle(img, point, 5, (0, 255, 0), -1)

    cv2.imshow("Image", img)
    cv2.setMouseCallback("Image", mouseClick)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cv2.destroyAllWindows()

📂 项目结构

📂 Smart-Parking-Space-Detector  
 ┣ 📂 models/              # YOLO模型权重文件  
 ┣ 📂 data/                # 停车场图像/视频数据  
 ┣ 📂 utils/               # 辅助功能函数  
 ┣ 📜 detect_parking.py    # 主检测脚本  
 ┣ 📜 requirements.txt     # 依赖库列表  
 ┣ 📜 README.md            # 项目文档

🚀 未来扩展计划

🔹 开发移动端应用提供便捷访问 📱
🔹 接入云数据库存储停车统计信息 ☁️
🔹 集成车牌识别功能加强安保 🔢

处理并使用YOLO格式的停车位检测数据集进行目标检测模型训练需要一系列详细的数据预处理步骤。首先,确保你已经下载了《停车位空闲/满位检测数据集7339张图片VOC+YOLO格式》这一资源。接下来,按照以下步骤进行数据预处理: 参考资源链接:[停车位空闲/满位检测数据集7339张图片VOC+YOLO格式](https://wenku.csdn.net/doc/51cs8toxp5?spm=1055.2569.3001.10343) 1. 数据集组织:确保数据集的结构清晰,即图片文件对应的标注文件应放置在合理的目录结构中,方便访问管理。 2. 数据清洗:检查图片文件是否有损坏,标注文件是否完整,以及标注的准确性一致性。使用自动化脚本或手动检查确保每个标注与图片内容相匹配。 3. 数据转换:如果你的模型训练框架需要特定的数据格式,可能需要将YOLO格式的数据转换成框架所需的格式。例如,如果你使用的是Darknet框架来训练YOLO模型,你需要确保标注文件的格式与YOLO所要求的一致。 4. 数据增强:为了提高模型的泛化能力,可以通过旋转、缩放、裁剪、颜色变换等手段对图片进行数据增强。这有助于模型处理不同的输入条件并提高其准确性。 5. 分割数据集:将数据集分割为训练集、验证集测试集。通常情况下,可以按照70%训练、15%验证15%测试的比例进行划分。 6. 配置文件准备:YOLO模型训练需要一个配置文件,该文件定义了网络结构训练参数。根据你的数据集类别数量,修改配置文件中的类别数相应的过滤器大小。 7. 标注信息转换:YOLO格式要求标注信息为对象的中心点坐标以及对象的宽度高度。确保所有的标注信息都已经被转换成这种格式。 8. 环境搭建:根据你的选择,安装适合进行目标检测训练的操作系统相关依赖库,如Python、NumPy、OpenCV等。 9. 模型选择:根据你的需求选择合适的YOLO版本(如YOLOv3、YOLOv4、YOLOv5等)进行训练。每个版本可能有不同的安装配置要求。 10. 训练模型:使用准备好的数据集配置文件,通过命令行或脚本启动模型训练。监控训练过程中的损失曲线评估指标,确保训练过程正常。 在进行上述步骤时,考虑到数据集已经包含了与YOLO格式对应的标注,你主要关注点应放在数据集的组织、数据增强模型训练方面。《停车位空闲/满位检测数据集7339张图片VOC+YOLO格式》作为一个资源,其提供的详细数据准确标注将大大简化你的数据预处理工作,使得你可以更快地专注于模型训练优化。 参考资源链接:[停车位空闲/满位检测数据集7339张图片VOC+YOLO格式](https://wenku.csdn.net/doc/51cs8toxp5?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值