基于深度学习的停车位关键点检测系统(代码+原理)

简介: 基于深度学习的停车位关键点检测系统(代码+原理)

摘要:

DMPR-PS是一种基于深度学习的停车位检测系统,旨在实时监测和识别停车场中的停车位。该系统利用图像处理和分析技术,通过摄像头获取停车场的实时图像,并自动检测停车位的位置和状态。本文详细介绍了DMPR-PS系统的算法原理、创新点和实验结果,并对其性能进行了评估。


算法创新:

DMPR-PS系统的算法创新主要体现在以下几个方面:

  1. 深度学习模型:DMPR-PS系统采用了深度学习模型来进行停车位的检测。通过大规模数据集的训练,该模型可以自动学习停车位的特征,并准确地进行检测和分类。

2.多尺度检测:为了应对不同大小的停车位,DMPR-PS系统使用了多尺度检测策略。通过在不同尺度下进行检测,可以提高系统对各种大小停车位的检测准确率。


3.实时性能:DMPR-PS系统具有较高的实时性能。它能够快速处理实时视频流,并在短时间内完成停车位的检测和识别,满足实时监测的需求。

4c7046907c5d9b36aaa7e721f4c13d18_17d4dd3255d04f07baee30a42b220208.png

实验结果与结论:

通过对多个停车场场景的实验测试,DMPR-PS系统展现了良好的性能。实验结果表明,该系统在检测准确率和实时性能方面都具有较高的水平。


代码运行

要求:

python版本3.6
pytorch版本1.4+

其他要求:

pip install -r requirements.txt
gcn-parking-slot

预训练模型

可以通过以下链接下载两个预训练模型。

链接  代码  描述
Model0  bc0a  使用ps2.0子集进行训练,如[1]所述。
Model1  pgig  使用完整的ps2.0数据集进行训练。

准备数据

可以在此处找到原始的ps2.0数据和标签。提取并组织如下:

├── datasets
│   └── parking_slot
│       ├── annotations
│       ├── ps_json_label 
│       ├── testing
│       └── training

训练和测试

将当前目录导出到PYTHONPATH:

export PYTHONPATH=`pwd`

演示

python3 tools/demo.py -c config/ps_gat.yaml -m cache/ps_gat/100/models/checkpoint_epoch_200.pth

训练

python3 tools/train.py -c config/ps_gat.yaml
• 1


测试

python3 tools/test.py -c config/ps_gat.yaml -m cache/ps_gat/100/models/checkpoint_epoch_200.pth


代码

import cv2
import time
import torch
import pprint
import numpy as np
from pathlib import Path

from psdet.utils.config import get_config
from psdet.utils.common import get_logger
from psdet.models.builder import build_model


def draw_parking_slot(image, pred_dicts):
    slots_pred = pred_dicts['slots_pred']

    width = 512
    height = 512
    VSLOT_MIN_DIST = 0.044771278151623496
    VSLOT_MAX_DIST = 0.1099427457599304
    HSLOT_MIN_DIST = 0.15057789144568634
    HSLOT_MAX_DIST = 0.44449496544202816

    SHORT_SEPARATOR_LENGTH = 0.199519231
    LONG_SEPARATOR_LENGTH = 0.46875
    junctions = []
    for j in range(len(slots_pred[0])):
        position = slots_pred[0][j][1]
        p0_x = width * position[0] - 0.5
        p0_y = height * position[1] - 0.5
        p1_x = width * position[2] - 0.5
        p1_y = height * position[3] - 0.5
        vec = np.array([p1_x - p0_x, p1_y - p0_y])
        vec = vec / np.linalg.norm(vec)
        distance =( position[0] - position[2] )**2 + ( position[1] - position[3] )**2 
        
        if VSLOT_MIN_DIST <= distance <= VSLOT_MAX_DIST:
            separating_length = LONG_SEPARATOR_LENGTH
        else:
            separating_length = SHORT_SEPARATOR_LENGTH
        
        p2_x = p0_x + height * separating_length * vec[1]
        p2_y = p0_y - width * separating_length * vec[0]
        p3_x = p1_x + height * separating_length * vec[1]
        p3_y = p1_y - width * separating_length * vec[0]
        p0_x = int(round(p0_x))
        p0_y = int(round(p0_y))
        p1_x = int(round(p1_x))
        p1_y = int(round(p1_y))
        p2_x = int(round(p2_x))
        p2_y = int(round(p2_y))
        p3_x = int(round(p3_x))
        p3_y = int(round(p3_y))
        cv2.line(image, (p0_x, p0_y), (p1_x, p1_y), (255, 0, 0), 2)
        cv2.line(image, (p0_x, p0_y), (p2_x, p2_y), (255, 0, 0), 2)
        cv2.line(image, (p1_x, p1_y), (p3_x, p3_y), (255, 0, 0), 2)

        #cv2.circle(image, (p0_x, p0_y), 3,  (0, 0, 255), 4)
        junctions.append((p0_x, p0_y))
        junctions.append((p1_x, p1_y))
    for junction in junctions:
        cv2.circle(image, junction, 3,  (0, 0, 255), 4)
    
    return image
    
def main():

    cfg = get_config()
    logger = get_logger(cfg.log_dir, cfg.tag)
    logger.info(pprint.pformat(cfg))

    model = build_model(cfg.model)
    logger.info(model)
    
    image_dir = Path(cfg.data_root) / 'testing' / 'outdoor-normal daylight'
    display = False

    # load checkpoint
    model.load_params_from_file(filename=cfg.ckpt, logger=logger, to_cpu=False)
    model.cuda()
    model.eval()
    
    if display:
        car = cv2.imread('images/car.png')
        car = cv2.resize(car, (512, 512))

    with torch.no_grad():

        for img_path in image_dir.glob('*.jpg'):
            img_name = img_path.stem
            
            data_dict = {} 
            image  = cv2.imread(str(img_path))
            image0 = cv2.resize(image, (512, 512))
            image = image0/255.

            data_dict['image'] = torch.from_numpy(image).float().permute(2, 0, 1).unsqueeze(0).cuda()

            start_time = time.time()
            pred_dicts, ret_dict = model(data_dict)
            sec_per_example = (time.time() - start_time)
            print('Info speed: %.4f second per example.' % sec_per_example)

            if display:
                image = draw_parking_slot(image0, pred_dicts)
                image[145:365, 210:300] = 0
                image += car
                cv2.imshow('image',image.astype(np.uint8))
                cv2.waitKey(50)
                
                save_dir = Path(cfg.output_dir) / 'predictions'
                save_dir.mkdir(parents=True, exist_ok=True)
                save_path = save_dir / ('%s.jpg' % img_name)
                cv2.imwrite(str(save_path), image)
    if display:
        cv2.destroyAllWindows()

if __name__ == '__main__':
    main()


结论

DMPR-PS系统是一种基于深度学习的停车位检测系统,通过创新的算法设计和实时性能优化,可以有效地监测和识别停车场中的停车位。该系统在提高停车场资源利用率和管理效率方面具有重要的应用价值。

相关文章
|
17天前
|
机器学习/深度学习 数据采集 人工智能
AI赋能教育:深度学习在个性化学习系统中的应用
【10月更文挑战第26天】随着人工智能的发展,深度学习技术正逐步应用于教育领域,特别是个性化学习系统中。通过分析学生的学习数据,深度学习模型能够精准预测学生的学习表现,并为其推荐合适的学习资源和规划学习路径,从而提供更加高效、有趣和个性化的学习体验。
74 9
|
5天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
25 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
5天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
25 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
16天前
|
机器学习/深度学习 数据采集 存储
使用Python实现智能农业灌溉系统的深度学习模型
使用Python实现智能农业灌溉系统的深度学习模型
71 6
|
14天前
|
机器学习/深度学习 PyTorch TensorFlow
使用Python实现智能食品质量检测的深度学习模型
使用Python实现智能食品质量检测的深度学习模型
61 1
|
20天前
|
机器学习/深度学习 搜索推荐 安全
深度学习之社交网络中的社区检测
在社交网络分析中,社区检测是一项核心任务,旨在将网络中的节点(用户)划分为具有高内部连接密度且相对独立的子群。基于深度学习的社区检测方法,通过捕获复杂的网络结构信息和节点特征,在传统方法基础上实现了更准确、更具鲁棒性的社区划分。
35 7
|
20天前
|
机器学习/深度学习 数据采集 算法框架/工具
使用Python实现智能生态系统监测与保护的深度学习模型
使用Python实现智能生态系统监测与保护的深度学习模型
63 4
|
25天前
|
机器学习/深度学习 存储 自然语言处理
深度学习之多轮对话系统
基于深度学习的多轮对话系统是一种能够在多轮对话中保持上下文连贯并生成自然回复的系统,主要用于客服、智能助理等需要交互式交流的场景。通过深度学习的技术,特别是自然语言处理中的预训练模型和序列生成模型,这类系统已在准确理解、生成自然语言的质量上取得显著进展。
56 2
|
17天前
|
安全 搜索推荐 机器学习/深度学习
AI赋能教育:深度学习在个性化学习系统中的应用
【10月更文挑战第26天】在人工智能的推动下,个性化学习系统逐渐成为教育领域的重要趋势。深度学习作为AI的核心技术,在构建个性化学习系统中发挥关键作用。本文探讨了深度学习在个性化推荐系统、智能辅导系统和学习行为分析中的应用,并提供了代码示例,展示了如何使用Keras构建模型预测学生对课程的兴趣。尽管面临数据隐私和模型可解释性等挑战,深度学习仍有望为教育带来更个性化和高效的学习体验。
44 0
|
28天前
|
机器学习/深度学习 自然语言处理 监控
深度学习之声音事件检测
基于深度学习的声音事件检测(Sound Event Detection, SED)是指从音频数据中检测并识别出特定的声音事件(如玻璃破碎、狗叫声、警报声等)。这种技术被广泛应用于智能家居、城市监控、医疗监护等领域,随着深度学习的进步,其性能和准确性得到了显著提升。
58 0