深度学习在智慧交通中的应用:行人车辆检测与计数系统详解

引言

在现代城市中,行人和车辆的检测与计数对交通管理和城市规划具有重要意义。通过使用深度学习技术,可以实现对行人和车辆的实时检测与计数,提高交通管理的效率。本文将详细介绍如何构建一个基于深度学习的行人车辆检测与计数系统,包括环境搭建、数据准备、模型训练、系统实现和用户界面设计等步骤。

系统概述

本系统的实现流程如下:

  1. 环境搭建
  2. 数据收集与处理
  3. 模型训练
  4. 系统实现
  5. 用户界面设计

环境搭建

首先,需要搭建一个适合深度学习的开发环境。本文使用Python 3.8或以上版本,并依赖于多个深度学习和图像处理库。

安装必要的库

使用以下命令安装所需库:

pip install numpy pandas matplotlib opencv-python torch torchvision ultralytics pyqt5

数据收集与处理

数据收集

收集包含行人和车辆的图像数据集,可以从公开的行人和车辆数据集下载,或者通过摄像头自行采集。确保数据集包含不同角度、不同光照条件下的行人和车辆图像。

数据处理

将图像数据整理到指定的文件夹结构,并标注行人和车辆的位置。以下是示例的文件夹结构:

datasets/├── images/│   ├── train/│   │   ├── image1.jpg│   │   ├── image2.jpg│   ├── val/│   │   ├── image1.jpg│   │   ├── image2.jpg├── labels/├── train/│   ├── image1.txt│   ├── image2.txt├── val/├── image1.txt├── image2.txt

每个标签文件的内容如下:

class x_center y_center width height

其中,class表示类别编号(行人和车辆分别有不同的类别编号),x_centery_center为归一化后的中心坐标,widthheight为归一化后的宽度和高度。

模型训练

使用YOLO模型进行训练。

配置文件

创建一个配置文件config.yaml

path: datasets
train: images/train
val: images/val
test: images/testnc: 2  # 类别数
names: ['person', 'vehicle']

训练代码

使用以下代码训练模型:

from ultralytics import YOLO# 加载模型
model = YOLO('yolov8n.pt')# 训练模型
model.train(data='config.yaml', epochs=50, imgsz=640, batch=16, lr0=0.01)

系统实现

训练好的模型可以用于实时行人和车辆检测与计数。使用OpenCV读取视频流,并调用YOLO模型进行检测与计数。

检测与计数代码

import cv2
from ultralytics import YOLO# 加载训练好的模型
model = YOLO('best.pt')# 打开视频流
cap = cv2.VideoCapture('traffic_video.mp4')while cap.isOpened():ret, frame = cap.read()if not ret:break# 检测行人和车辆results = model(frame)person_count = 0vehicle_count = 0for result in results:bbox = result['bbox']label = result['label']confidence = result['confidence']if label == 'person':person_count += 1elif label == 'vehicle':vehicle_count += 1# 画框和标签cv2.rectangle(frame, (bbox[0], bbox[1]), (bbox[2], bbox[3]), (0, 255, 0), 2)cv2.putText(frame, f'{label} {confidence:.2f}', (bbox[0], bbox[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)# 显示计数结果cv2.putText(frame, f'Persons: {person_count}', (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)cv2.putText(frame, f'Vehicles: {vehicle_count}', (10, 60), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)# 显示结果cv2.imshow('Pedestrian and Vehicle Detection and Counting', frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()
cv2.destroyAllWindows()

用户界面设计

为了提高系统的易用性,我们设计了一个用户友好的界面。使用PyQt5实现用户界面,提供图像或视频播放和检测计数结果显示。

界面代码

以下是一个简单的PyQt5界面代码示例:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton, QFileDialog
from PyQt5.QtGui import QPixmap, QImage
import cv2
from ultralytics import YOLOclass PedestrianVehicleDetectionUI(QWidget):def __init__(self):super().__init__()self.initUI()self.model = YOLO('best.pt')def initUI(self):self.setWindowTitle('Pedestrian and Vehicle Detection System')self.layout = QVBoxLayout()self.label = QLabel(self)self.layout.addWidget(self.label)self.button = QPushButton('Open Image or Video', self)self.button.clicked.connect(self.open_file)self.layout.addWidget(self.button)self.setLayout(self.layout)def open_file(self):options = QFileDialog.Options()file_path, _ = QFileDialog.getOpenFileName(self, "Open File", "", "All Files (*);;MP4 Files (*.mp4);;JPEG Files (*.jpg);;PNG Files (*.png)", options=options)if file_path:if file_path.endswith('.mp4'):self.detect_pedestrian_vehicle_video(file_path)else:self.detect_pedestrian_vehicle_image(file_path)def detect_pedestrian_vehicle_image(self, file_path):frame = cv2.imread(file_path)results = self.model(frame)person_count = 0vehicle_count = 0for result in results:bbox = result['bbox']label = result['label']confidence = result['confidence']if label == 'person':person_count += 1elif label == 'vehicle':vehicle_count += 1cv2.rectangle(frame, (bbox[0], bbox[1]), (bbox[2], bbox[3]), (0, 255, 0), 2)cv2.putText(frame, f'{label} {confidence:.2f}', (bbox[0], bbox[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)cv2.putText(frame, f'Persons: {person_count}', (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)cv2.putText(frame, f'Vehicles: {vehicle_count}', (10, 60), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)height, width, channel = frame.shapebytesPerLine = 3 * widthqImg = QImage(frame.data, width, height, bytesPerLine, QImage.Format_RGB888).rgbSwapped()self.label.setPixmap(QPixmap.fromImage(qImg))def detect_pedestrian_vehicle_video(self, file_path):cap = cv2.VideoCapture(file_path)while cap.isOpened():ret, frame = cap.read()if not ret:breakresults = self.model(frame)person_count = 0vehicle_count = 0for result in results:bbox = result['bbox']label = result['label']confidence = result['confidence']if label == 'person':person_count += 1elif label == 'vehicle':vehicle_count += 1cv2.rectangle(frame, (bbox[0], bbox[1]), (bbox[2], bbox[3]), (0, 255, 0), 2)cv2.putText(frame, f'{label} {confidence:.2f}', (bbox[0], bbox[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)height, width, channel = frame.shapebytesPerLine = 3 * widthqImg = QImage(frame.data, width, height, bytesPerLine, QImage.Format_RGB888).rgbSwapped()self.label.setPixmap(QPixmap.fromImage(qImg))QApplication.processEvents()cap.release()if __name__ == '__main__':app = QApplication(sys.argv)ex = PedestrianVehicleDetectionUI()ex.show()sys.exit(app.exec_())

总结与声明

本文详细介绍了如何构建一个基于深度学习的行人车辆检测与计数系统。从环境搭建、数据收集与处理、模型训练、系统实现到用户界面设计,提供了完整的实现步骤和代码示例。通过本系统,可以实现对行人和车辆的实时检测与计数,为智能交通管理提供有力支持。
声明:本文只是简单的项目思路,如有部署的想法,想要(UI界面+YOLOv8/v7/v6/v5代码+训练数据集)的可以联系作者.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/51626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读:Deformable DETR: Deformable Transformers for End-to-End Object Detection

论文阅读:Deformable DETR: Deformable Transformers for End-to-End Object Detection Deformable DETR: 基于稀疏空间采样的注意力机制,让DCN与Transformer一起玩! - 知乎 (zhihu.com) 【Deformable DETR 论文源码解读】Deformable Trans…

The Llama 3 Herd of Models.Llama 3 模型第1,2,3部分全文

现代人工智能(AI)系统是由基础模型驱动的。本文提出了一套新的基础模型,称为Llama 3。它是一组语言模型,支持多语言、编码、推理和工具使用。我们最大的模型是一个密集的Transformer,具有405B个参数和多达128K个tokens的上下文窗口。本文对Llama 3进行了广泛的实证评价。我们…

【error】AttributeError: module ‘cv2.dnn‘ has no attribute ‘DictValue‘(库冲突)

conda list conda remove opencv pip uninstall opencv-python conda list pip 同时卸载两个库 pip uninstall opencv-contrib-python opencv-python 没有and 直接写库名 module ‘cv2.dnn‘ has no attribute ‘DictValue‘解决办法_module cv2.dnn has no attribute d…

实分析与测度论问题的分类

实分析主要研究实数、实数序列、实数极限以及实值函数的分析,而度量空间则是一个具有距离函数的集合,其分类可以从多个角度进行。 实分析 实分析主要关注实数、实数序列、实数极限以及实值函数的分析。它涉及到多个重要的概念和理论,包括但…

Linux - 环境变量、程序地址空间、进程地址空间及Linux2.6内核进程调度队列

目录 环境变量 基本概念 常见环境变量 查看环境变量的方法 测试PATH 测试HOME 测试SHELL 和环境变量相关的命令 环境变量的组织方式 通过代码获取环境变量 通过系统调用获取环境变量 程序地址空间 进程地址空间 Linux2.6内核进程调度队列 一个CPU拥有一个runqueue 优先级 活…

谈一谈爬虫开发工程师

爬虫就只是抓数据的吗?并不是,爬虫工程师的工作不再仅仅是抓取数据,还需要处理其他各种复杂问题,今天我们就来聊聊爬虫开发工程师。 一、 爬虫开发工程师工作内容 爬虫开发工程师是负责编写和维护网络爬虫程序的专业人员。他们的…

Springboot与SpringSecurity使用(2):授权、自定义异常处理

一、用户授权 在SpringSecurity中,会使用默认的FilterSecurityInterceptor来进行权限校验。在FilterSecurityInterceptor中会从SecurityContextHolder获取其中的Authentication,然后获取其中的权限信息。判断当前用户是否拥有访问当前资源所需的权限。Sp…

2024-HW最新漏洞整理及相应解决方案(一)

前言: 漏洞是基于部分安全厂家、软件厂商的公众号或官方网站,以及一些非官方渠道等途径整理的HW安全漏洞情报,情报里附含漏洞详情和解决方案。护网期间我将持续更新分享,希望可以在护网期间帮助到大家 漏洞 用友U8CLOUDv3.6版本以…

c++初阶篇(七):类和对象(日期类)

1.头文件 定义了日期类&#xff0c;给出了类成员变量及成员函数的声明 #pragma once #include<iostream> #include<assert.h> using namespace std; class Date{public:friend ostream& operator<<(ostream& out, const Date& d);friend istre…

计算机网络中的 IPv6 部署与转换

背景介绍 随着互联网的迅速发展&#xff0c;IPv4 地址资源日益枯竭&#xff0c;无法满足未来互联网设备连接的需求。为了解决这一问题&#xff0c;IPv6 应运而生。IPv6&#xff08;互联网协议第六版&#xff09;提供了比 IPv4 更大的地址空间、更好的安全性和扩展性。然而&…

【多模态大模型】 ALBEF in NeurIPS 2021

一、引言 论文&#xff1a; Align before Fuse: Vision and Language Representation Learning with Momentum Distillation 作者&#xff1a; Salesforce Research 代码&#xff1a; ALBEF 特点&#xff1a; 该方法使用ViT进行图像特征提取&#xff0c;提出将BERT分两部分&am…

Cocos Creator2D游戏开发(3)-飞机大战(1)-背景动起来

资源见: https://pan.baidu.com/s/1cryYNdBOry5A4YEEcLwhDQ?pwdzual 步骤 1, 让背景动起来 2, 玩家飞机显现,能操控,能发射子弹 3.敌机出现 4. 碰撞效果(子弹和敌机,敌机和玩家) 5. 积分和游戏结束 6. 游戏存档,对接微信小游戏,保存历史最高分 7. cocos发布到微信小游戏 资源…

探索Python的进度条神器:tqdm

文章目录 探索Python的进度条神器&#xff1a;tqdm一、背二、tqdm简介三、安装tqdm四、tqdm的五个简单使用示例五、tqdm在不同场景下的应用六、常见问题及解决方案七、总结 探索Python的进度条神器&#xff1a;tqdm 一、背 景&#xff1a;为什么选择tqdm&#xff1f; 在Python…

苦学Opencv的第十四天:人脸检测和人脸识别

Python OpenCV入门到精通学习日记&#xff1a;人脸检测和人脸识别 前言 经过了十三天的不懈努力&#xff0c;我们终于也是来到了人脸检测和人脸识别啦&#xff01;相信大家也很激动吧。接下来我们开始吧&#xff01; 人脸识别是基于人的脸部特征信息进行身份识别的一种生物识…

Spring 常用的三种拦截器详解

前言 在开发过程中&#xff0c;我们常常使用到拦截器来处理一些逻辑。最常用的三种拦截器分别是 AOP、 Interceptor 、 Filter&#xff0c;但其实很多人并不知道什么时候用AOP&#xff0c;什么时候用Interceptor&#xff0c;什么时候用Filter&#xff0c;也不知道其拦截顺序&am…

spring —— 事务管理器

事务管理主要针对数据源进行操作&#xff1a;在数据库方面&#xff0c;通过 TransactionManager 事务管理器进行管理&#xff0c;表明一旦出现错误&#xff0c;该数据源的所有数据全部复原。那么数据库如何判断是否发生了错误呢&#xff1f;这就需要在代码方面&#xff0c;通过…

TreeSize-Pro-9.0.1磁盘占用分析工具

软件下载 TreeSize-Pro-9.0.1磁盘占用分析工具是一个热门的 精品软件 网站&程序 这款软件操作简单&#xff0c;选择需要分析的磁盘开始分析后&#xff0c;左侧列表中很明显的看到磁盘下各个文件夹的大小。 选择文件夹后能在右边显示文件夹下的内容&#xff0c;并且也能显…

抖音直播弹幕数据逆向:websocket和JS注入

&#x1f50d; 思路与步骤详解 &#x1f575;️‍♂️ 思路介绍 首先&#xff0c;我们通过抓包工具进入的直播间&#xff0c;捕获其网络通信数据&#xff0c;重点关注WebSocket连接。发现直播弹幕数据通过WebSocket传输&#xff0c;这种方式比传统的HTTP更适合实时数据的传输。…

前端基于 axios 实现批量任务调度管理器 demo

一、背景介绍 这是一个基于 axios 实现的批量任务调度管理器的 demo。它使用了axios、promise 等多种技术和原理来实现批量处理多个异步请求&#xff0c;并确保所有请求都能正确处理并报告其状态。 假设有一个场景&#xff1a;有一个任务列表&#xff0c;有单个任务的处理功能…

alova的二次封装

alova的二次封装 为什么要进行alova二次封装二次封装的具体步骤1. index.js2. api.js3. service.js4. 在Vue中使用 为什么要进行alova二次封装 上篇文章介绍了alova的基本使用方法&#xff1a;alova详解&#xff0c;对比axios&#xff0c;alova的具体使用&#xff0c;但是每次…