# 交通路口智能监控系统 **Repository Path**: boyfriend/Intelligent-Traffic ## Basic Information - **Project Name**: 交通路口智能监控系统 - **Description**: 项目主要由三个模块组成,分别是:流媒体服务器,云端“”GPU服务器,本地客户端. 首先,网络摄像机将交通路口的监控视频实时上传到**流媒体服务器**。(基于腾讯云轻量应用服务器) 然后,当流媒体服务器有视频流输入时,**本地GPU服务器**拉取原始视频流,然后通过YOLO等目标检测算法对视频进行分析和处理,然后将处理后的视频推流到流媒体服务器。 对于**本地客户端**,一方面可以直接从流媒体 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: https://gitee.com/lllzzzyyy66/Intelligent-Traffic - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-06-02 - **Last Updated**: 2025-06-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 交通路口智能监控系统 # 一、环境配置 ## 1.安装requirements.txt 的包,注意此为服务器运行代码,所用python ==3.7 > Note:如果遇到某个包不能下载,可以先搜索该库对应版本的whl文件,下载到本地,然后安装whl. ##2.下载YOLOv3权重 - [官方下载地址](https://pjreddie.com/media/files/yolov3.weights) - [百度网盘下载链接](https://pan.baidu.com/s/1CVgvP4hQQvDNbKmXhmkxqw)   下载完成后将weights文件放在 **yolov3/weights** 目录下 #二、项目介绍 项目主要由三个模块组成,分别是:流媒体服务器,云端“”GPU服务器,本地客户端. 首先,网络摄像机将交通路口的监控视频实时上传到**流媒体服务器**。(基于腾讯云轻量应用服务器) 然后,当流媒体服务器有视频流输入时,**本地GPU服务器**拉取原始视频流,然后通过YOLO等目标检测算法对视频进行分析和处理,然后将处理后的视频推流到流媒体服务器。 对于**本地客户端**,一方面可以直接从流媒体服务器拉流,查看远端网络摄像机的实时监控画面。另一方面,本地客户端也可以选择和远端的服务器通过`Socket`进行通信(基于selectors I/O复用库,支持并发连接),获取服务器对监控视频的分析结果,比如路口的车流量、人流量等。同时,当选择与GPU服务器连接时,本地客户端也将更换`rtmp`流地址,拉取处理后的视频流. #三、项目演示 1.推流 ffmpeg -re -stream_loop -1 -i C:\Users\86180\Desktop\Intelligent-Traffic-Based-On-CV-version2.0\videos\traffic_2.flv -c copy -f flv rtmp://49.232.145.50:9090/live/stream 3.启动服务器端 server_selector.py 3.启动客户端 1.login2.py 登录注册密码账号,人脸识别注册 2.密码账号登录 3.人脸识别登录 4.选择功能 5.进入客户端 #四、代码结构说明 1. **scripts_2** : python脚本 - server_selector.py : 服务端脚本 - client_selector.py main_window.py sub_window.py : 客户端PyQt5界面 - bbox.py darknet.py video_demo.py util.py : YOLO相关代码 -admin.py face_login.py login2.py 人脸识别登录 face 人脸识别登录图片存储 zhanghao.txt 账号密码存储 2.**ui** : 使用`Qt Designer`设计的客户端界面ui文件,使用Tkinter库设计人脸识别登录 3. **yolov3** : YOLO模型配置文件 - cfg : YOLO网络模型 - data : YOLO识别类型 - weights : YOLO模型权重 6. **videos** : 提供的道路测试视频 7. **log** : 程序运行过程中保存的日志 #五、各模块功能详细说明 ### 1 流媒体服务器模块 搭建基于腾讯云的流媒体服务器.用于接收网络摄像头交通路口实时监控画面,同时将接收到的rtmp流推送到需要的地方.比如推流到GPU服务器用于视频内容分析,推流到客户端供交通管理员监控路口交通状况. ### 2 GPU服务端模块 #### 2.1 目标识别模块 (1)功能介绍:本模块通过使用YOLOv3多尺度目标识别技术对视频流的图像帧进行识别,并将事先在训练类别中的目标在视频画面中实时标注出来,并将识别的信息提供给其他模块使用,比如红绿灯检测模块,车流量检测模块等。 (2)详细实现:本模块我们使用YOLO(You Only Look Once)模型对图像中的物体进行识别。首先在模型构建方面,我们读取darknet框架使用的yolov3.cfg 卷积神经网络模型文件,对网络的结构进行分析然后转换为相应的pytorch模型,使用已经加载的yolov3.weight权重模型,至此我们的CNN识别模块已经搭建完成。然后将opencv读取的图像帧丢入已经定义的卷积神经网络模型对结果进行预测,得到输出信息(包括置信度、位置坐标),使用opencv作图模块将这些输出信息实时标注在对应的图像帧上。最后将处理过的图像帧显示在界面上即可。 #### 2.2 红绿灯检测模块 (1)功能介绍:本模块使用目标识别模块的输出信息得到交通灯的位置坐标,使用颜色识别算法对交通灯状态进行分析。 (2)详细实现:首先对pytorch预测输出的信息进行分析,得到交通灯对应的位置信息。接着,调用opencv模块将交通灯对应的ROI区域截取出来,由于HSV空间能够非常直观的表达色彩的明暗,色调,以及鲜艳程度,方便进行颜色之间的对比,因此将截取出区域的RGB图像先转换为HSV图像。最后将每种颜色对应的HSV阈值与截取区域中的HSV颜色进行比对,重合率最高的即为识别到的颜色种类。 #### 2.3 车流量检测模块 (1)功能介绍:本模块对图像帧中出现的车辆数目进行统计,实时分析交通路口的车流量,提供参考数据给使用人员。 (2)详细实现:首先对pytorch预测输出的信息进行分析,得到图像帧中所有识别到的车辆信息,对车辆信息进行统计,然后实时在界面上显示。 #### 2.4 人流量检测模块 (1)功能介绍:本模块对图像帧中出现的行人数目进行统计,实时分析交通路口的人流量,提供参考数据给使用人员。 (2)详细实现:首先对pytorch预测输出的信息进行分析,得到图像帧中所有识别到的行人信息,对行人信息进行统计,然后实时在界面上显示。 #### 3 客户端模块 #### 3.1 监控界面显示模块 (1)功能介绍:模块实现了本地客户端的人机交互界面部分.用于交通管理员对交通路口的视频进行监控,以及查看服务器端对视频进行分析的结果. (2)详细实现:首先,使用qt designer设计界面.然后将ui界面转为python pyqt5的源代码,以便实现更加复杂的逻辑(比如信号与槽,按钮事件的处理). #### 3.2 数据可视化模块 (1)功能介绍:本模块将从服务器获取的数据(如人流量、车流量)等信息进行可视化,方便系统管理人员查看交通路口实时流量变化. (2)详细实现:使用matplotlib提供的FigureCanvasQTAgg模块,将pyqt5设计的界面和matplotlib的画图耦合. #### 3.3 基于selectors I/O复用库的并发连接模块 (1)功能介绍:本模块用于本地客户端和云端GPU服务器之间的通信,本地客户端接收服务端发送的实时分析数据. (2)详细实现:基于selectors的I/O服用库,可以实现并发连接.服务端将分析的数据如人流量、车流量、交通灯状态等信息封装为json格式的数据发送到客户端.客户端收到数据后验证是否正确,然后将结果反馈给服务端.支持优雅地断开连接 #### 3.4 系统日志模块 (1)功能介绍:本模块对视频分析中得到的信息进行汇总,并实时在在画面上进行刷新,使用者可以方便地查看当前以及之前的分析结果; ​ (2)详细实现:首先定义一个日志消息队列,在视频分析开始运行之后将得到的信息使用put函数加载到队列当中,然后在日志显示模块使用get函数得到最新的消息并实时显示在画面上。 #### 3.5 用户登录模块 #### 3.5.1 用户登录模块 (1 ) 功能介绍:模块实现了管理员密码账号、人脸识别注册、登录功能的实现,用户可以选择两个角色,一个是系统管理员,具有用户权限管理和查看实时监控两个功能,另一个是交通管理员,只有查看实时监控的功能。 (2)详细实现:使用Tking类设计窗口,用户密码注册成功后,会将信息传送到MySQL数据库中和整理写入zhanghao.txt中,登录时会从zhanghao.txt中账号密码是否匹配,只有密码账号登录成功后,才会进入人脸识别登录。人脸识别是使用OpenCV库中的`CascadeClassifier`进行人脸识别,加载人脸识别模型。注册时会将拍照并保存的人脸图像,进行处理,提取人脸区域并保存。登录时通过比较预存的人脸图像和登录者的人脸图像的直方图信息,计算两者之间的差异度。如果差异度在一定范围内,则认为验证通过,否则验证失败。 #### 3.5.2 用户权限管理模块 (1) 功能介绍:只有系统管理员才可以进行。系统管理员成功登陆后,选择用户权限管理按钮进入。通过MySQL数据库读取用户信息,打印在窗口,管理员可以进行添加用户,删除用户,编辑用户(只有允许修改密码),查看用户信息。 (2)详细实现:使用`pymysql`库连接到MySQL数据库,进行用户信息的读取、添加、删除和更新操作。 在初始化时,通过`load_users()`方法从数据库中加载用户列表,并显示在用户列表框中。点击‘添加用户’,功能和注册一样;点击‘删除用户’,就可以将选择的用户删除,数据库和zhanghao.txt都会更新,`load_users()`方法从数据库中重新加载用户列表显示;点击‘编辑用户’,用户可以输入新密码并保存,系统会更新数据库中对应用户的密码;双击用户列表中的用户会显示该用户的详细信息,包括用户名、密码、用户类型以及权限管理信息。