基于深度学习的停车位关键点检测系统(代码+原理)
摘要:
DMPR-PS是一种基于深度学习的停车位检测系统,旨在实时监测和识别停车场中的停车位。该系统利用图像处理和分析技术,通过摄像头获取停车场的实时图像,并自动检测停车位的位置和状态。本文详细介绍了DMPR-PS系统的算法原理、创新点和实验结果,并对其性能进行了评估。
算法创新:
DMPR-PS系统的算法创新主要体现在以下几个方面:
-
深度学习模型:DMPR-PS系统采用了深度学习模型来进行停车位的检测。通过大规模数据集的训练,该模型可以自动学习停车位的特征,并准确地进行检测和分类。
-
多尺度检测:为了应对不同大小的停车位,DMPR-PS系统使用了多尺度检测策略。通过在不同尺度下进行检测,可以提高系统对各种大小停车位的检测准确率。
-
实时性能:DMPR-PS系统具有较高的实时性能。它能够快速处理实时视频流,并在短时间内完成停车位的检测和识别,满足实时监测的需求。
实验结果与结论:
通过对多个停车场场景的实验测试,DMPR-PS系统展现了良好的性能。实验结果表明,该系统在检测准确率和实时性能方面都具有较高的水平。
、
代码运行
要求:
python版本3.6pytorch版本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
测试
python3 tools/test.py -c config/ps_gat.yaml -m cache/ps_gat/100/models/checkpoint_epoch_200.pt
h
代码
import cv2
import time
import torch
import pprint
import numpy as np
from pathlib import Pathfrom psdet.utils.config import get_config
from psdet.utils.common import get_logger
from psdet.models.builder import build_modeldef draw_parking_slot(image, pred_dicts):slots_pred = pred_dicts['slots_pred']width = 512height = 512VSLOT_MIN_DIST = 0.044771278151623496VSLOT_MAX_DIST = 0.1099427457599304HSLOT_MIN_DIST = 0.15057789144568634HSLOT_MAX_DIST = 0.44449496544202816SHORT_SEPARATOR_LENGTH = 0.199519231LONG_SEPARATOR_LENGTH = 0.46875junctions = []for j in range(len(slots_pred[0])):position = slots_pred[0][j][1]p0_x = width * position[0] - 0.5p0_y = height * position[1] - 0.5p1_x = width * position[2] - 0.5p1_y = height * position[3] - 0.5vec = 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_LENGTHelse:separating_length = SHORT_SEPARATOR_LENGTHp2_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 imagedef 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 checkpointmodel.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.stemdata_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] = 0image += carcv2.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系统是一种基于深度学习的停车位检测系统,通过创新的算法设计和实时性能优化,可以有效地监测和识别停车场中的停车位。该系统在提高停车场资源利用率和管理效率方面具有重要的应用价值。
相关文章:
基于深度学习的停车位关键点检测系统(代码+原理)
摘要: DMPR-PS是一种基于深度学习的停车位检测系统,旨在实时监测和识别停车场中的停车位。该系统利用图像处理和分析技术,通过摄像头获取停车场的实时图像,并自动检测停车位的位置和状态。本文详细介绍了DMPR-PS系统的算法原理、…...
C#,入门教程(09)——运算符的基础知识
上一篇: C#,入门教程(08)——基本数据类型及使用的基础知识https://blog.csdn.net/beijinghorn/article/details/123906998 一、算术运算符号 算术运算符号包括:四则运算 加 , 减-, 乘*, 除/与取模%。 // 加法,运算 int va 1 …...
企业出海数据合规:GDPR中的个人数据与非个人数据之区分
GDPR仅适用于个人数据,这意味着非个人数据不在其适用范围内。因此,个人数据的定义是一个至关重要的因素,因为它决定了处理数据的实体是否要遵守该法规对数据控制者规定的各种义务。尽管如此,什么是个人数据仍然是当前数据保护制度…...
如何在Ubuntu搭建Emlog博客站点并发布至公网可随时远程访问管理界面——“cpolar内网穿透”
文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道(云端设置)2.3.Cpolar稳定隧道(本地设置) 3. 公网访问测试总结 前言 博客作为使…...
【金猿CIO展】是石科技CIO侯建业:算力产业赋能,促进数字经济建设
侯建业 本文由是石科技CIO侯建业撰写并投递参与“数据猿年度金猿策划活动——2023大数据产业年度优秀CIO榜单及奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 是石科技(江苏)有限公司成立于2021年,由国家超级计算无锡中心与…...
TypeScript 类
目录 1、实例 2、创建类的数据成员 3、创建实例化对象 4、完整实例 5、类的继承 6、继承类的方法重写 7、static关键字 8、instanceof运算符 9、访问控制修饰符 10、类和接口 TypeScript 是面向对象的 JavaScript。类描述了所创建的对象共同的属性和方法。支持面向对…...
Oracle分区表
文章目录 A. varchar2类型时间字段(20240102)分区实战1. 表要不要分区2. 将已经存在的表改造为分区表(时间字段,varchar2类型)3. 增加分区3.1 增加分区3.2 置换分区,不会复制索引,不要用这种语法建表,这是专门为置换分区用的3.3 分…...
【leetcode】力扣算法之旋转图像【难度中等】
题目描述 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 用例 输入: matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&…...
【Java集合类篇】HashMap的数据结构是怎样的?
HashMap的数据结构是怎样的? ✔️HashMap的数据结构✔️ 数组✔️ 链表 ✔️HashMap的数据结构 在Java中,保存数据有两种比较简单的数据结构: 数组和链表(或红黑树)。 HashMap是 Java 中常用的数据结构,它实现了 Map 接口。Has…...
Spring 应用合并之路(一):摸石头过河 | 京东云技术团队
公司在推进降本增效,在尝试多种手段之后,发现应用太多,每个应用都做跨机房容灾部署,则最少需要 4 台机器(称为容器更合适)。那么,将相近应用做一个合并,减少维护项目,提高…...
Android13配置selinux让system应用可读sys,proc,SN号
system权限应用读sys,proc目录及SN号 Android13预置的system应用,需要读/sys, /proc目录,读(SN)serial number号, 需要修改selinux配置,否则会报avc错. 其修改方法会比Android11复杂一些. 实现 system_app.te中添加…...
防勒索病毒攻击的关键措施
【作者】朱向东 中原银行 高级工程师 在当今数字化时代,勒索病毒成为了企业和个人面临的一项严峻威胁。勒索病毒攻击可以导致数据丢失、系统瘫痪以及经济损失。为了保护自己和组织的利益,采取一系列的防范措施是至关重要的。下面是一些关键的措施&#…...
代表团坐车 - 华为OD统一考试
OD统一考试(B卷) 分值: 100分 题解: Java / Python / C++ 题目描述 某组织举行会议,来了多个代表团同时到达,接待处只有一辆汽车可以同时接待多个代表团,为了提高车辆利用率,请帮接待员计算可以坐满车的接待方案输出方案数量。 约束: 一个团只能上一辆车,并且代表团…...
运用Jmeter进行登录测试
开始了解Jmeter,写篇关于Jmeter的博客做备忘,这里以苏宁易购网站的登录请求为例实战来说明测试计划元件,创建一个 Web 测试计划。 今天简单介绍Jemeter的入门,Jmeter 的安装这边就跳过,直接讲述如何使用JMETER,如何运用Jmeter进行测试。 a.下载jmeter软件 b.安装…...
Docker学习与应用(四)-容器数据卷
1、容器数据卷 1)什么是容器数据卷 docker的理念回顾 将应用和环境打包成一个镜像! 数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化 MySQL,容器删…...
CentOS 7.6下HTTP隧道代理的安全性考虑
在CentOS 7.6上配置HTTP隧道代理时,安全性是一个不可忽视的重要因素。以下是对HTTP隧道代理安全性的一些关键考虑因素: 1. 加密和数据安全 使用强加密算法:确保您使用的是经过广泛认可和强化的加密算法,如AES-256-GCM。数据完整…...
Mockito+junit5搞定单元测试
目录 一、简介1.1 单元测试的特点1.2 Mock类框架的使用场景1.3 常见的Mock框架1.3.1 Mockito1.3.2 EasyMock1.3.3 PowerMock1.3.4 Testable1.3.5 比较 二、Mockito的使用2.1 导入pom文件2.2 mock对象和spy对象2.3 初始化mock/spy对象的方式2.4 参数匹配2.5 方法插桩2.6 InjectM…...
PostgreSQL获取当天、昨天、本月、上个月、本年、去年的数据
gps_time为timestamp类型日期字段 获取当天的数据 WHERE DATE_TRUNC(day, gps_time) CURRENT_DATE --或 WHERE DATE(gps_time) CURRENT_DATE获取昨天的数据 WHERE DATE_TRUNC(day, gps_time) CURRENT_DATE - INTERVAL 1 day获取本月的数据 WHERE DATE_TRUNC(month, gps_…...
XCTF:stage1[WriteUP]
从题目中下载到图片: 考虑图片是png,隐写方式有可能是高宽修改,也可能是色相隐藏,色彩通道位隐藏等等 使用stegsolve对图片进行一下伽马、颜色转换 在图片的左上角就显示出了一个二维码 使用QR_Rresearch工具对二维码扫描 获得一…...
STM32CubeMX教程13 ADC - 单通道转换
目录 1、准备材料 2、实验目标 3、ADC概述 4、实验流程 4.0、前提知识 4.1、CubeMX相关配置 4.1.1、时钟树配置 4.1.2、外设参数配置 4.1.3、外设中断配置 4.2、生成代码 4.2.1、外设初始化调用流程 4.2.2、外设中断调用流程 4.2.3、添加其他必要代码 5、常用函数…...
矩阵的乘法
首先矩阵的乘法定义如下: #include <stdio.h> int main() { int i 0; int j 0; int arr[20][20] { 0 }; int str[20][20] { 0 }; int s[20][20] { 0 }; int n1 0; int n2 0; int m2 0; int z 0; int m1 0;…...
python爬取招聘网站数据
这段代码是使用Selenium自动化测试模块进行网页爬取的示例代码。它通过模拟人的行为在浏览器中操作网页来实现爬取。具体的流程如下: 导入所需的模块,包括Selenium、时间、随机、csv等模块。打开浏览器,创建一个Chrome浏览器实例。设置要爬取…...
灌区信息化方案(什么是现代化灌区,如何一步到位)
一、系统概述 详情:https://www.key-iot.com.cn/ 本灌区信息化方案以星创易联公司的各类智能设备为基础,通过其产品完成水文、雨情、土壤等多源异构数据的采集,以无线自组网的方式实现数据传输,并在后台管理中心建立信息化软件平台,对数据进行融合处理。系统实现对…...
jmeter自动录制脚本功能
问题排查: 建议用 google浏览器; 重启一下jmeter; 过滤规则重新检查下; 看下代理设置是否正常; 注意:下面的的过滤设置中 用的都是正则表达式的规则。...
十一、工具盒类(MyQQ)(Qt5 GUI系列)
目录 编辑 一、设计需求 二、实现代码 三、代码解析 四、总结 一、设计需求 抽屉效果是软件界面设计中的一种常用形式,可以以一种动态直观的方式在有限大小的界面上扩展出更多的功能。本例要求实现类似 QQ 抽屉效果。 二、实现代码 #include "dialog.…...
postgresql 查询字段 信息
SELECT base.“column_name”, col_description ( t1.oid, t2.attnum ), base.udt_name, COALESCE(character_maximum_length, numeric_precision, datetime_precision), (CASE WHEN ( SELECT t2.attnum ANY ( conkey ) FROM pg_constraint WHERE conrelid t1.oid AND contyp…...
antv/x6_2.0学习使用(四、边)
一、添加边 节点和边都有共同的基类 Cell,除了从 Cell 继承属性外,还支持以下选项。 属性名类型默认值描述sourceTerminalData-源节点或起始点targetTerminalData-目标节点或目标点verticesPoint.PointLike[]-路径点routerRouterData-路由connectorCon…...
C++ stack用法总结
std::stack 是 C 标准模板库(STL)中的容器适配器,它提供了栈(stack)的功能,基于其他序列容器实现。以下是 std::stack 的用法总结: 包含头文件: #include <stack>创建 std::…...
【大数据进阶第三阶段之Datax学习笔记】阿里云开源离线同步工具Datax概述
【大数据进阶第三阶段之Datax学习笔记】阿里云开源离线同步工具Datax概述 【大数据进阶第三阶段之Datax学习笔记】阿里云开源离线同步工具Datax快速入门 【大数据进阶第三阶段之Datax学习笔记】阿里云开源离线同步工具Datax类图 【大数据进阶第三阶段之Datax学习笔记】使用…...
PHP 基础编程 2
文章目录 时间函数dategetdatetime 使用数组实现登录注册和修改密码简单数组增加元素方法修改元素方法删除元素方法 具体实现方法数组序列化数组写入文件判断元素是否在关联数组中(登录功能实现)实现注册功能实现修改admin用户密码功能 时间函数 时区&am…...
佛山做外贸网站/中国互联网协会官网
Ubuntu截图工具Shutter 1、添加安装包软件源 sudo add-apt-repository ppa:shutter/ppa 2、更新源并安装 shutter sudo apt-get update sudo apt-get install shutter 3、搜索 shutter 可看到已安装成功 4、设置 Shutter 快捷键 打开系统--->键盘, 然后设置 转载…...
网站建设后台管理流程/百度seo效果怎么样
ApcCache根据应用程序组件提供APC缓存。 要使用此应用程序组件,必须加载APC PHP扩展。或者,可以通过将useApcu设置为true来使用APCu PHP扩展。要为CLI启用APC或APCu,您应该在php.ini中添加“apc.enable_cli 1”。 有关ApcCache支持的常见缓…...
企业网站模板建设/推广app软件
1.先到网上下载phpmyadmin,再解压到可以访问的web目录下(如果是虚拟空间,可以解压后通过ftp等上传到web目录下),当然您可以修改解压后该文件的名称。 2.配置config文件打开libraries下的config.default.php文件&#x…...
wordpress+更改数据库/上首页的seo关键词优化
我正在尝试按照本教程中的步骤创建一个简单的jquery文件上传:http://net.tutsplus.com/tutorials/javascript-ajax/uploading-files-with-ajax/并且它功能齐全且非常出色 . 但是我希望对用户上传图像的内容有更多的控制和更多的安全性,例如我希望能够发送…...
java做网站seo/排名点击软件怎样
因为实际项目中没用用到这个东西,所以我也没深入研究下去,就是简单做下使用而已。如果要深入研究,看这边文章就可以https://www.iteye.com/magazines/132-Java-NIO 案例 客户端 package fei.com.nitty.sendstring.client;import io.netty.b…...
关于开通网站建设的请示/我对网络营销的理解
在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。 这需要为Activity配置特定的加载模式,而不是使用默认的加载模…...