f 数据仓库与分析-python3GUI-智慧交通分析平台:By:PyQt5+YOLOv8(具体先容) - Powered by qidao123.com技术社区

python3GUI--智慧交通分析平台:By:PyQt5+YOLOv8(具体先容) ...

打印 上一主题 下一主题

主题 1819|帖子 1819|积分 5457



平台规定gif最大5M,所以压缩了一下,见谅!
一.前言

本次利用PyQt5+YOLOv8开发一款“智慧交通分析平台”,利用YOLOv8检测监控画面中的车辆和行人,将检测到的画面进行绘制、标注、统计,最后展示到画面中央,主屏右侧操纵区域可以控制绘制结果。
二.效果预览


1.目标辨认与检测

本体系利用YOLOv8对目标进行辨认与检测
   YOLOv8是Ultralytics公司推出的最新一代实时目标检测算法,基于YOLO(You Only Look Once)系列架构改进,具有更高的检测精度和更快的推理速度。它支持目标检测、实例分割和图像分类任务,采取灵活的Backbone和Neck计划,并优化了训练策略与损失函数,兼容多种部署环境(如ONNX、TensorRT等),适合工业级应用。YOLOv8提供多种预训练模子(从轻量级YOLOv8n到高性能YOLOv8x),平衡速度与精度,是计算机视觉范畴的先辈工具之一。
  

本次利用YOLOv8版本对车辆和行人进行辨认,车辆的类型包罗:小汽车、摩托车、自行车、卡车,行人就是马路上行走的人,体系采取队列对读取到的视频流帧进行处置惩罚,标注分析好之后利用信号的方式发射给PyQt5的前端,前端设置槽函数吸取、处置惩罚、展示数据。
2.可视化展示

本体系利用pyecharts对上游数据进行可视化展示
   Pyecharts 是基于 Python 的数据可视化库,依托强大的 ECharts(百度开源 JavaScript 图表库)构建,提供丰富的交互式图表类型(如折线图、柱状图、散点图、地图等)。它支持链式调用和简洁的 API 计划,可轻松生成动态、可缩放的可视化结果,并兼容 Jupyter Notebook、Web 页面及 Flask/Django 等框架。Pyecharts 支持多种数据格式(如 Pandas、NumPy),答应自定义样式和主题,实用于数据分析、贸易报表和实时大屏展示,是 Python 生态中高效、美观的可视化工具之一。
  图片取自网络,仅用于echarts图效果展示,不包含在本体系中。

展示的维度包罗:
1.车流量统计

把时间作为横轴,纵轴是具体的数值,采取折线堆叠图展示可视化分析结果

2. 目标种别占比

对检测到的目标种别以及数量,采取圆环饼图进行可视化展示,图例中为全部目标物体

3. 拥堵情况展示

对于当前门路的拥堵情况采取算法动态计算当前门路的拥堵情况,采取水球图展示当前门路拥堵情况

具体来说是利用echarts图配合QWebEngineView来展示存储在内存中的html代码,
这里分享我遇到的一个坑,就是怎样设置QWebEngineView隐藏右击菜单:
直接重写QWebEngineView,实现此中的contextMenuEvent方法,忽略这个变乱,代码我贴在下面啦
  1. class NoContextMenuWebEngineView(QWebEngineView):
  2.         def __init__(self, parent=None):
  3.                 super().__init__(parent)
  4.         def contextMenuEvent(self, event: QContextMenuEvent):
  5.                 # 忽略右键点击事件,彻底禁用右键菜单
  6.                 event.ignore()
复制代码
还有一个就是怎样让echarts图背景透明,雷同于下面这种效果:

这里不卖关子,直接下面三行代码实现:
  1. self.view.setAttribute(Qt.WA_TranslucentBackground, True)
  2. self.view.setStyleSheet("background: transparent;")
  3. self.view.page().setBackgroundColor(Qt.transparent)
复制代码
4.目标数量可视化

这里我们利用了自定义组件,自定义组件是垂直结构,顶部是当前种别的数量,中间是当前种别文字说明,底部是当前种别可视化图像,用户可以直观地看到具体种别的具体数据,因为目标种别的种别数量是确定的,这里我们直接就直接绘制好了效果。

3.控制台

控制台区域分为三个部分,分别是拉流控制、视频帧控制、标签表现内容控制,这里我们利用了自定义组件-开关组件可以或许方便地和用户交互,交互的结果直接呈现在中间内容区域中,同时用户可以控制标签中的展示项目的显隐。

4.核心内容区

这个区域是本体系的核心部分,主要是对输入的rtmp、rtsp流的帧画面进行视觉分析,利用多线程的方式在线程中处置惩罚视频画面数据,然后利用cv2对图像进行绘制,再利用信号的方式将处置惩罚结果发射到主线程中,主线程界面吸取到数据将画面、可视化结果展示。
下面我引用一下AI的分析原话:
   VideoProcessingThread 是一个基于 PyQt5 的 QThread 子类,专为实时视频流处置惩罚计划,集成了 YOLOv8 目标检测与追踪功能。它通过多线程架构实现高效帧处置惩罚:主线程负责从 RTMP 流异步读取帧,子线程利用 YOLOv8 模子进行目标检测、追踪(支持车辆/行人等种别),并计算运动轨迹与速度(含超速判断)。类内维护三个线程安全队列(原始帧、渲染帧、统计结果),通过 frame_ready 信号实时推送渲染后的帧(含边界框、轨迹线、标签等可视化元素),同时支持动态流切换、断线重连及 GPU 加速(自动切换 FP16 模式)。该类封装了完备的视频分析流水线,实用于智能交通监控等实时视觉应用,并通过模块化计划答应灵活配置检测参数与绘制选项。

  

1.目标检测参数

本次利用罗列类对目标检测参数进行设置,我在这里贴出来,这些参数主要是给目标检测线程类利用,每个变量都是有表明的。
  1. class Config(Enum):
  2.         # RTMP 流地址:替换为实际的视频流地址(来自摄像头或推流服务器)
  3.         RTMP_STREAM_URL = 'rtmp://192.168.99.199/stream/cam1'
  4.         # YOLO 模型文件名,可为 yolov8s.pt、yolov8n.pt 等,需确保文件存在
  5.         MODEL_NAME = 'yolov8s.pt'
  6.         # 每个跟踪对象保存的历史帧数,用于计算速度(历史越多越稳定,但更耗内存)
  7.         MAX_TRACK_HISTORY = 5
  8.         # 估算用的像素与实际距离的换算比例(单位:米/像素),用于速度换算
  9.         METERS_PER_PIXEL = 0.05
  10.         # 超速阈值(单位:km/h),超过该速度将高亮显示为红色
  11.         OVERSPEED_THRESHOLD = 30
  12.         # 当无法从视频流中获取 FPS 时使用的默认帧率
  13.         DEFAULT_FPS = 25
  14.         # 框标签文字的缩放比例(影响标签大小)
  15.         LABEL_FONT_SCALE = 0.5
  16.         # 标签边框线的粗细(单位:像素),需为整数
  17.         THICKNESS = 1
  18.         # 使用的字体类型(OpenCV 字体)
  19.         FONT = cv2.FONT_HERSHEY_SIMPLEX
  20.         # 每行标签文字之间的间距(单位:像素)
  21.         LINE_SPACING = 5
  22.         # 标签信息背景透明度(前景图层 alpha 值,范围 0.0 - 1.0)
  23.         OVERLAY_ALPHA = 0.65
  24.         # 标签信息背景透明度(背景图层 beta 值,1 - alpha)
  25.         OVERLAY_BETA = 0.35
  26.         FRAME_QUEUE_SIZE = 60
  27.         FRAME_SKIP = 2  # 每 2 帧推理一次,可根据设备调整
复制代码
2.帧转QPixmap

我们通过cv2拿到视频帧之后是无法直接展示在界面上的,这就需要用到帧转QPixmap了,这里我封装好一个方法给各人,直接调用就可以或许实现帧转QPixmap!
  1. def frame_to_pix(frame):
  2.         rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
  3.         h, w, ch = rgb_frame.shape
  4.         bytes_per_line = ch * w
  5.         qt_image = QImage(rgb_frame.data, w, h, bytes_per_line, QImage.Format_RGB888)
  6.         return QPixmap.fromImage(qt_image)
复制代码
3.数据管理

我们利用单例模式定义了一个DataManager类,这个类可以或许帮我们动态管理YOLOv8分析后的结果,很方便地在其他类、函数里利用,这里先容一下单例模式
   Python 单例模式(Singleton Pattern) 是一种计划模式,确保一个类仅有一个实例,并提供全局访问点。通常通过重写 new 方法或利用装饰器、元类等方式实现,实用于需要全局唯一对象的场景(如配置管理、日志记录、数据库连接池等)。Python 的模块导入机制天然支持单例(模块在初次导入时缓存),但显式实现可通过类变量存储实例,并在实例化时查抄是否已存在,制止重复创建,从而保证体系资源的高效利用和状态划一性。

  DataManager 是一个数据管理类,用于维护和操纵结构化键值数据(如统计图表数据)。它基于 system_conf.base_chart_data 初始化,支持深拷贝原始数据以制止共享题目。核心功能包罗:

  • 数据更新:提供单键更新(update)和批量更新(batch_update),支持绝对赋值或累加模式,自动过滤非法键并补全缺失键为默认值
  • 数据查询:可获取单个键的值(get)、中文标签(get_label)或完备数据副本(get_all,确保包含所有默认键)
  • 数据维护:支持重置所有值为零(reset)、查抄键存在(has_key)及删除键(remove)
  • 容错计划:自动处置惩罚未定义键(返回0或空字符串),并通过告诫日志提示无效操纵
    该类通过全局实例 dataManager 提供统一的数据管理入口,实用于需要动态维护标准化数据集合的场景(如实时数据可视化、状态监控等),确保数据完备性和操纵安全性。
5.项目结构

本项目在Python3.8环境下开发,依赖pyqt5==5.15.2版本。
本项目是基于YOLOv8的项目,检测模子为yolov8s.pt,这个模子位于./data/models/目次下面,各人可以自行替换自己训练的模子,软件团体的代码文件结构为:
我相信,有下面的示意图,各人能很快的上手本项目!

三.总结

本次和各人分享了我利用PyQt5+YOLOv8开发的智慧交通分析平台,有图有文字,具体地先容了体系以及具体功能实现,但是我以为博客仍然不够直观,各人还是亲身体验比较好!
需要代码可以私聊我,但是CSDN我不常常在,各人可以点击下面的链接加我WX,肯定尽力支持!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户国营

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表