YOLO11在停车场管理中的应用

部署运行你感兴趣的模型镜像

前言

目前停车场管理相关技术已经比较成熟,特别是随着深度学习技术的深入应用,在停车场出入口进行车辆特征、车牌号码识别等方面,产品日臻成熟。在大型地下车库,也发展了包括超声波、视频检测、区域空位显示等多种技术手段,进行车位检测和停车引导,但是在大型的室外停车场,特别是景区停车场以及大型活动的临时停车场,人们倾向于把车辆停放的离出入口较近的位置,导致大型停车场各个区域停车不均衡,停车位资源得不到有效利用。使用人工方式巡查和引导车辆有一定的效果,但是无法持久。通过在每个停车位安装检测器,能够解决车位检测的问题,但是往往投资较高,维护工作量较大,没有得到广泛应用。

对于固定停车场,通过在高处安装一定数量的摄像机,使用视频技术实时分析较大区域的车辆停放情况,能够提供物美价廉的解决方案。对于大型活动的临时停车,通过使用无人机获取各个区域的图像,也能够获得同样效果。

YOLO11停车场管理方案

Ultralytics YOLO11提供了一个停车场管理方案。

Ultralytics提供了一个简单Python程序,演示如何对停车场进行车位标注。当然 ,在使用这些演示代码前,需要先配置Python运行环境,主要是使用pip install ultralytics安装ultralytics运行所需的所有库文件,依赖库较多,安装需要较长时间。环境配置完成后,就可以按照下面的步骤测试这些例子代码。

首先,需要获得一幅停车场的图片,可以是拍照或截取摄像机图像帧。

其次,运行演示代码,调出图形界面,打开上述图片,然后使用鼠标在每个停车位的顶点点击生成多边形,点击4个点自动连线成四边形。

from ultralytics import solutions

solutions.ParkingPtsSelection()

点击"Upload Image",选择一张图片打开,就是停车场的标注界面。使用鼠标点击就可以完成车位标注。

完成后,点击“Save”,将把标注保存到bounding_boxes.json。文件数据结构如下:

[
    {
        "points": [
            [
                16,
                510
            ],
            [
                237,
                584
            ],
            [
                61,
                666
            ],
            [
                10,
                651
            ]
        ]
    },
   
	......
]

标注完成后,可以使用下面的代码进行演示。

import cv2

from ultralytics import solutions

# Video capture
cap = cv2.VideoCapture("test.mp4")
assert cap.isOpened(), "Error reading video file"

# Video writer
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
video_writer = cv2.VideoWriter("parking management.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps/30, (w, h))

# Initialize parking management object
parkingmanager = solutions.ParkingManagement(
    model="yolo11n.pt",  # path to model file
    json_file="bounding_boxes.json",  # path to parking annotations file
)

while cap.isOpened():
    ret, im0 = cap.read()
    if not ret:
        break

    i = 0
    while cap.isOpened():
        ret, im0 = cap.read()
        if not ret:
            break

        if (i%30==0):
            results = parkingmanager(im0)
            # print(results)  # access the output
            video_writer.write(results.plot_im)  # write the processed frame.
        i += 1

cap.release()
video_writer.release()
cv2.destroyAllWindows()  # destroy all opened windows

运行时可以查看视频每一帧的检测结果及使用的时间。

运行完成后,输出视频文件parking management.avi。播放这个文件,可以看到每帧的检测情况。

本方案需要对各个停车位进行精确标注,对于固定停车场,能够提供精确的检测结果,但是很多场景下是无法事先标注的,而且对较大的停车场进行标注,也是很大的工作量,因此,不标注车位,而是使用YOLO自动检测车辆和空位,有更好的场景适应性。

使用YOLO检测停车场车辆和空位

使用深度学习进行目标检测,一般流程是训练、验证、测试后输出模型,然后使用模型对输入的数据进行预测并输出结果。

YOLO11是YOLO系列最新的稳定版本,支持多种计算机视觉功能,包括对象检测、分段、分类、姿势、OBB(定向边框对象检测、跟踪等。YOLO11 基于深度学习和计算机视觉领域的尖端技术,在速度和准确性方面相比之前的版本具有显著提升。其流线型设计使其适用于各种应用,并可轻松适应从边缘设备到云 API 等不同硬件平台。YOLO11 融入了计算机视觉研究的最新进展,为实际应用提供了更好的速度-精度权衡。面对开发者,YOLO11提供了更友好的应用界面,包括CLI和Python接口。

对于停车场管理,最直接的是使用YOLO的对象检测功能,即在图片或视频中检测识别对象的位置和类别。对于停车场,我们可以只检测车辆或者检测车辆+空闲车位。本文以检测检测车辆+空闲车位进行描述。

准备数据集

首先需要准备数据集。可以自己收集应用场景的图片,进行标注,也可以下载公开数据集,用于检测训练。

停车场是复杂场景,包括在不同光照条件下的检测、遮挡处理、多角度和不同尺寸停车位的识别等,解决这些问题,除了算法的改进,还需要不断扩充和优化用于训练模型的数据集,以提高模型的泛化能力。

YOLO11需要的标注文件格式:

classID x y w h
数据需要经过归一化处理。
例如:
1 0.3671875 0.5 0.28125 0.228125
0 0.17890625 0.73515625 0.2921875 0.2609375

定义data.yaml

path: #数据集所在的根目录
train: train
val: val

names: 
  0: car
  1: free

数据集目录结构

path 
|--	datasets
    |--	train
    |	|--	images
    |	|--	labels
    |--	val
        |--	images
        |--	labels

训练和验证

Ultralytics官方文档给出了几种使用方法:用户可以使用Python或者CLI训练数据集。

Python:

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.yaml")  # 从 YAML文件构建新模型
#model = YOLO("yolo11n.pt")  # 使用预训练模型进行训练
#model = YOLO("yolo11n.yaml").load("yolo11n.pt")  # 使用YAML和预训练模型构建新模型

# Train the model
results = model.train(data="coco8.yaml", epochs=100, imgsz=640) #不传入device参数时,系统根据机器配置自动使用GPU或CPU,优先选用GPU

CLI

# 使用YAML训练新模型
yolo detect train data=coco8.yaml model=yolo11n.yaml epochs=100 imgsz=640

# 使用预训练模型进行训练
yolo detect train data=coco8.yaml model=yolo11n.pt epochs=100 imgsz=640

# 使用YAML和预训练模型构建新模型
yolo detect train data=coco8.yaml model=yolo11n.yaml pretrained=yolo11n.pt epochs=100 imgsz=640

我这里使用Python进行训练。代码如下:

import datetime
from ultralytics import YOLO

def yolo11_detect_train():
    model = YOLO('./models/yolo11n.yaml').load('./models/yolo11n.pt')      # build from YAML and transfer weights
    model.info()
    # data.yaml在当前目录,数据集在./datasets
    data='data.yaml'
    
    start_time = datetime.datetime.now()
    print(f"开始训练 {start_time.strftime('%Y-%m-%d %H:%M:%S')}")
    model.train(data=data, epochs=100, imgsz=640, batch=4, workers=4)
    end_time = datetime.datetime.now()
    print(f"训练结束 {end_time.strftime('%Y-%m-%d %H:%M:%S')}")

if __name__ == '__main__':

    #Park lot detection, detect car(occupied) and free spot

    yolo11_detect_train()

执行100轮次训练,需要比较长的时间,具体时间根据机器配置、训练数据集规模具有比较大的差异。

训练结束后,输出一系列训练结果文档,包括各种lables分布图、PR曲线、F1曲线、mAP50、mAP50-95等各种图表,用于对训练结果进行评价分析。当然,最重要的是训练权重文件:best.pt和last.pt。

预测(推理)

YOLO11可以对图像、视频文件甚至实时视频里进行推理。

  • 性能:专为实时、高速处理而设计,同时不影响精度。

  • 易用性:直观的Python 和CLI 界面,便于快速部署和测试。

  • 高度可定制:各种设置和参数可根据具体要求调整模型的推理行为。

我们可以使用训练模型对各种数据源进行预测/推理。以下是参考代码:

import os
import shutil
from ultralytics import YOLO
from functions import process_images

def yolo11_detect_predict(repo_path, model, conf, iou):
    
    modelname = os.path.basename(model)
    # Remove folder if it exists
    if os.path.exists(os.path.join(repo_path, f'results/{modelname[:-3]}/')):
        shutil.rmtree(os.path.join(repo_path, f'results/{modelname[:-3]}/'))
    
    dest_path=modelname[:-3]
    model = YOLO(model)
    source=os.path.join(repo_path, 'data/images')
    project=os.path.join(repo_path, 'results/')
    name=dest_path+"/yolo_images"
    #为了减少内存需求,设置stream-True
    print(f"开始预测 {name}")
    model.predict(source=source, save_txt=True, save=True, exist_ok=True, imgsz=1280, conf=conf, iou=iou, project=project, name=name, stream=True)

    print("运行预测完成")
    

if __name__ == '__main__':
    repo_path = os.getcwd() 
    model = "./models/best.pt"
    
    # Execute the yolo11 predict
    yolo11_detect_predict(repo_path, model, conf=0.4, iou=0.45)

程序执行完成后,在results/yolo_images目录下,是叠加了检测结果数据的图像文件,同时labels目录下是检测结果数据。

小而规则的场景:

大而不规则的场景:

本方案对各种停车场有比较好的场景适应性,对不同大小的检测区域能够提供精确或者比较精确的车位状态,对于分区域停车指挥和调度,提供了物美价廉的解决方案。

您可能感兴趣的与本文相关的镜像

Yolo-v8.3

Yolo-v8.3

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值