python智慧交通数据分析可视化系统 车流实时检测分析 深度学习 车流量实时检测跟踪 轨迹跟踪 毕业设计✅

博主介绍:✌全网粉丝50W+,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,选择我们,就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅

点击查看作者主页,了解更多项目!

🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅

1、毕业设计:2025年计算机专业毕业设计选题汇总(建议收藏)✅

2、最全计算机专业毕业设计选题大全(建议收藏)✅

1、项目介绍

技术栈:Python语言、YOLOv8、深度学习模型、PySide图形界面、智慧交通、车流实时检测系统
智慧交通车流实时检测系统-深度学习

2、项目界面

(1)车流量实时检测监控,实时流量检测折线图
在这里插入图片描述

(2)车流量轨迹实时跟踪
在这里插入图片描述

(3)数据监控大屏,大屏数据展示

在这里插入图片描述

(4)车流量检测识别记录

在这里插入图片描述

(5)车流量检测识别2

在这里插入图片描述

(6)检测识别结果
在这里插入图片描述

(7)登录界面
在这里插入图片描述

3、项目说明

技术栈:Python语言、YOLOv8、深度学习模型、PySide图形界面、智慧交通、车流实时检测系统
智慧交通车流实时检测系统-深度学习

(一)基本内容

智慧交通车流量检测系统是针对城市交通管理和规划而开发的一种技术应用。随着城市化进程的加快,城市交通问题日益突出,如交通拥堵、交通事故频发等。为了解决这些问题,智慧交通系统应运而生。车流量检测是智慧交通系统的一个重要组成部分。通过对交通流的实时监测和分析,可以及时发现交通拥堵、交通事故等问题,并采取相应的措施进行调整和处理。
YOLOv8算法是一种目标检测算法,能够快速高效地对图像中的物体进行检测和识别。在智慧交通车流量检测系统中,可以利用YOLOv8算法对交通流中的车辆进行实时检测和计数,从而获取车流量的信息。Python语言是一种简单易学、功能强大的编程语言,具有丰富的第三方库和工具,适合进行数据处理和算法实现。在智慧交通车流量检测系统中,可以使用Python语言编写相关的算法和程序,实现对车流量的检测和统计。PySide图形界面是Python的一个GUI开发框架,可以实现用户友好的交互界面。在智慧交通车流量检测系统中,可以使用PySide框架搭建用户界面,方便用户进行系统的配置和操作。
智慧交通车流量检测系统的研究背景是基于城市交通管理和规划的需求,利用先进的信息技术和算法,对交通流进行实时监测和管理,以提高交通效率和安全性。技术栈包括Python语言、YOLOv8算法、PySide图形界面等。

(二)拟解决的主要问题
智慧交通车流量检测系统的研究背景是基于城市交通管理和规划的需求,利用先进的信息技术和算法,对交通流进行实时监测和管理,以提高交通效率和安全性。技术栈包括Python语言、YOLOv8算法、PySide图形界面等。

4、核心代码

# -*- coding: utf-8 -*-# @Description : python main.pyfrom PySide6.QtWidgets import QApplication, QMainWindow, QFileDialog, QMenu
from PySide6.QtGui import QImage, QPixmap, QColor,QCursor
from PySide6.QtCore import QTimer, QThread, Signal, QObject, Qtfrom ui.main_window import Ui_MainWindow
from ui.pop.pop_box import MessageBox
from ui.ui_function import *
from ui.toast.toast import DialogOver
from ui.dialog.rtsp_win import Window
from ui.dialog.id_win import id_Windowfrom utils.main_utils import check_url, check_path
from utils.AtestCamera import Camera
from classes.yolo import YoloPredictor
from classes.main_config import MainConfig
from classes.car_chart import WorkerThreadfrom PIL import Image
import numpy as np
import supervision as sv
import subprocess
import sys
import cv2
import os
import datetimeclass MainWindow(QMainWindow, Ui_MainWindow):# 主窗口向yolo实例发送执行信号main2yolo_begin_sgl = Signal()def __init__(self, parent=None):super(MainWindow, self).__init__()self.setupUi(self)# 背景设置为半透明 & 无边框窗口self.setAttribute(Qt.WA_TranslucentBackground) self.setWindowFlags(Qt.FramelessWindowHint)# UI动作(动效)UIFuncitons.uiDefinitions(self)# 变量设置self.car_threshold = 0 # 车辆阈值self.web_flag = True # 可以开启self.server_process = None # 服务器进程self.image_id = 0 # 图片 idself.txt_id = 0 # 标签 id# 设置阴影UIFuncitons.shadow_style(self, self.Class_QF, QColor(162,129,247))UIFuncitons.shadow_style(self, self.Target_QF, QColor(251, 157, 139))UIFuncitons.shadow_style(self, self.Fps_QF, QColor(170, 128, 213))UIFuncitons.shadow_style(self, self.Model_QF, QColor(64, 186, 193))# 设置 为 -- (好看)self.Class_num.setText('--')self.Target_num.setText('--')self.fps_label.setText('--')# 计时器:每2秒监视模型文件更改一次self.Qtimer_ModelBox = QTimer(self)self.Qtimer_ModelBox.timeout.connect(self.ModelBoxRefre)self.Qtimer_ModelBox.start(2000)self.yolo_init()  # 实例化YOLOself.model_bind() # 预测参数-数值变动绑定 主页面# 主要功能绑定       @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@self.main_function_bind()self.load_config() # 配置加载self.model_load()  # 模型加载# 画图线程self.is_draw_thread = Falseself.draw_thread = WorkerThread()self.show_status('欢迎使用智能车流分析系统!')# 实例化YOLOdef yolo_init(self):# Yolo-v8 threadself.yolo_predict = YoloPredictor()                           #实例化yolo检测self.select_model = self.model_box.currentText()self.yolo_thread = QThread()# 显示预测视频(左,右)self.yolo_predict.yolo2main_trail_img.connect(lambda x: self.show_image(x, self.pre_video))self.yolo_predict.yolo2main_box_img.connect(lambda x: self.show_image(x, self.res_video))# 输出信息、FPS、类数、总数self.yolo_predict.yolo2main_status_msg.connect(lambda x: self.show_status(x))self.yolo_predict.yolo2main_fps.connect(lambda x: self.fps_label.setText(x))self.yolo_predict.yolo2main_class_num.connect(lambda x:self.Class_num.setText(str(x)))self.yolo_predict.yolo2main_progress.connect(lambda x: self.progress_bar.setValue(x))# 移动线程里面去(通过main2yolo_begin_sgl信号控制-先要开启yolo_thread线程,才能启动yolo_predict的run方法)self.yolo_predict.moveToThread(self.yolo_thread)self.main2yolo_begin_sgl.connect(self.yolo_predict.run)# 显示总车流量self.yolo_predict.yolo2main_target_num.connect(lambda x:self.Target_setText(x))# 模型加载def model_load(self):# 创建模型文件夹check_path(self.config.models_path)self.model_box.clear()self.pt_list = os.listdir(f'./{self.config.models_path}')self.pt_list = [file for file in self.pt_list if file.endswith('.pt') or file.endswith('.engine')]self.pt_list.sort(key=lambda x: os.path.getsize(f'./{self.config.models_path}/' + x))   #按文件大小排序self.model_box.clear()self.model_box.addItems(self.pt_list)# 主页面各功能绑定def main_function_bind(self):self.src_file_button.clicked.connect(self.open_src_file) # 打开文件夹self.src_cam_button.clicked.connect(self.camera_select) # 摄像头# self.src_rtsp_button.clicked.connect(self.rtsp_seletction) # RTPSself.src_graph_button.clicked.connect(self.show_traffic_graph) # 流量图self.src_lock_button.clicked.connect(self.lock_id_selection) # 单目追踪# self.src_web_button.clicked.connect(self.web_back_end)   # 后端开启与关闭self.run_button.clicked.connect(self.run_or_continue) # 开始self.stop_button.clicked.connect(self.stop) # 终止self.save_res_button.toggled.connect(self.is_save_res) # 是否 保存 视频self.save_txt_button.toggled.connect(self.is_save_txt) # 是否 保存 标签self.show_labels_checkbox.toggled.connect(self.is_show_labels)  # 是否 显示标签self.show_trace_checkbox.toggled.connect(self.is_show_trace)  # 是否 显示轨迹self.ToggleBotton.clicked.connect(lambda: UIFuncitons.toggleMenu(self, True))self.settings_button.clicked.connect(lambda: UIFuncitons.settingBox(self, True))# 模型参数绑定def model_bind(self):self.model_box.currentTextChanged.connect(self.change_model)self.iou_spinbox.valueChanged.connect(lambda x:self.change_val(x, 'iou_spinbox'))    # iou boxself.iou_slider.valueChanged.connect(lambda x:self.change_val(x, 'iou_slider'))      # iou scroll barself.conf_spinbox.valueChanged.connect(lambda x:self.change_val(x, 'conf_spinbox'))  # conf boxself.conf_slider.valueChanged.connect(lambda x:self.change_val(x, 'conf_slider'))    # conf scroll barself.speed_spinbox.valueChanged.connect(lambda x:self.change_val(x, 'speed_spinbox'))# speed boxself.speed_slider.valueChanged.connect(lambda x:self.change_val(x, 'speed_slider'))  # speed scroll barself.speed_sss.valueChanged.connect(lambda x: self.change_val(x, 'speed_sss'))  # speed boxself.speed_nnn.valueChanged.connect(lambda x:self.change_val(x, 'speed_nnn'))  # speed scroll bar# JSON配置文件初始化def load_config(self):self.config = MainConfig("./config/config.json")self.save_res_button.setChecked(self.config.save_res)self.save_txt_button.setChecked(self.config.save_txt)self.iou_slider.setValue(self.config.iou * 100)self.conf_slider.setValue(self.config.conf * 100)self.speed_slider.setValue(self.config.rate)self.speed_sss.setValue(self.config.car_threshold)self.yolo_predict.save_txt = self.config.save_txt # 保存标签self.yolo_predict.save_res = self.config.save_res # 保存结果self.yolo_predict.save_txt_path = self.config.save_txt_pathself.yolo_predict.save_res_path = self.config.save_res_pathself.yolo_predict.new_model_name = f"./{self.config.models_path}/%s" % self.select_modelself.yolo_predict.show_trace = self.config.show_trace  # 轨迹self.show_trace_checkbox.setChecked(self.config.show_trace) # 轨迹self.yolo_predict.show_labels = self.config.show_labels  # 标签self.show_labels_checkbox.setChecked(self.config.show_labels) # 标签self.open_fold = self.config.open_foldself.rtsp_ip = self.config.rtsp_ipself.car_id = self.config.car_idself.run_button.setChecked(False)# 如果超出了车流阈值,那么就变红!!def Target_setText(self, num):num = str(num)self.Target_num.setText(num)self.char_label.setText(f"当前车流量: {num}")if (int(num) > int(self.car_threshold)):self.char_label.setStyleSheet("color: red;")else:self.char_label.setStyleSheet("color: green;")#主窗口显示轨迹图像和检测图像 (缩放在这里)@staticmethoddef show_image(img_src, label):try:# 检查图像的通道数,确定图像是否为彩色图像if len(img_src.shape) == 3:ih, iw, _ = img_src.shapeif len(img_src.shape) == 2:ih, iw = img_src.shape# 根据标签窗口的大小调整图像的大小w = label.geometry().width()h = label.geometry().height()# 根据图像宽高比例进行缩放if iw / w > ih / h:scal = w / iwnw = wnh = int(scal * ih)img_src_ = cv2.resize(img_src, (nw, nh))else:scal = h / ihnw = int(scal * iw)nh = himg_src_ = cv2.resize(img_src, (nw, nh))# 将OpenCV图像从BGR格式转换为RGB格式,并创建QImage对象frame = cv2.cvtColor(img_src_, cv2.COLOR_BGR2RGB)img = QImage(frame.data, frame.shape[1], frame.shape[0], frame.shape[2] * frame.shape[1],QImage.Format_RGB888)# 在标签窗口中显示图像label.setPixmap(QPixmap.fromImage(img))except Exception as e:print(repr(e))#控制开始|暂停def run_or_continue(self):# 检测是否有模型if self.yolo_predict.new_model_name == '' or self.yolo_predict.new_model_name == None:DialogOver(parent=self, text="请检测模型", title="运行失败", flags="danger")self.run_button.setChecked(False)return# 检测输入源if self.yolo_predict.source == '' or self.yolo_predict.source == None:self.show_status('请在检测前选择输入源...')self.run_button.setChecked(False)DialogOver(parent=self, text="请检测输入源", title="运行失败", flags="danger")returnself.yolo_predict.stop_dtc = False # 线程开始# 开始if self.run_button.isChecked():# 图片预测file_extension = self.yolo_predict.source[-3:].lower()if file_extension == 'png' or file_extension == 'jpg':self.img_predict()return# 视频预测DialogOver(parent=self, text="开始检测...", title="运行成功", flags="success")self.run_button.setChecked(True)self.draw_thread.run_continue()  # 折线图开始# 不可再改变设置(config动态调整 关闭)self.save_txt_button.setEnabled(False)self.save_res_button.setEnabled(False)self.conf_slider.setEnabled(False)self.iou_slider.setEnabled(False)self.speed_slider.setEnabled(False)self.show_status('检测中...')if '0' in self.yolo_predict.source or 'rtsp' in self.yolo_predict.source:self.progress_bar.setFormat('实时视频流检测中...')if 'avi' in self.yolo_predict.source or 'mp4' in self.yolo_predict.source:self.progress_bar.setFormat("当前检测进度:%p%")self.yolo_predict.continue_dtc = True# 开始检测if not self.yolo_thread.isRunning():self.yolo_thread.start()self.main2yolo_begin_sgl.emit()# 暂停else:self.draw_thread.pause()  # 折线图暂停self.yolo_predict.continue_dtc = Falseself.show_status("暂停...")DialogOver(parent=self, text="已暂停检测", title="运行暂停", flags="warning")self.run_button.setChecked(False)# 显示状态 (底部栏def show_status(self, msg):self.status_bar.setText(msg)  # 显示输出if msg == '检测完成':self.save_res_button.setEnabled(True)self.save_txt_button.setEnabled(True)self.run_button.setChecked(False)    self.progress_bar.setValue(0)# 终止yolo线程if self.yolo_thread.isRunning():self.yolo_thread.quit()# 修改画图线程状态self.draw_thread.stop()self.is_draw_thread = Falseelif msg == '检测终止':self.save_res_button.setEnabled(True)self.save_txt_button.setEnabled(True)self.run_button.setChecked(False)    self.progress_bar.setValue(0)# 终止yolo线程if self.yolo_thread.isRunning():self.yolo_thread.quit()# 修改画图线程状态self.draw_thread.stop()self.is_draw_thread = Falseself.pre_video.clear()          self.res_video.clear()          self.Class_num.setText('--')self.Target_num.setText('--')self.fps_label.setText('--')# 打开文件def open_src_file(self):name, _ = QFileDialog.getOpenFileName(self, 'Video/image', self.open_fold, "Pic File(*.mp4 *.mkv *.avi *.flv *.jpg *.png)")if name:self.yolo_predict.source = nameself.show_status('加载文件:{}'.format(os.path.basename(name)))self.open_fold = os.path.dirname(name)# 终止事件self.stop()DialogOver(parent=self, text=f"文件路径: {name}", title="加载成功", flags="success")# camera选择def camera_select(self):#try:# 关闭YOLO线程self.stop()#获取本地摄像头数量_, cams = Camera().get_cam_num()popMenu = QMenu()popMenu.setFixedWidth(self.src_cam_button.width())popMenu.setStyleSheet('''QMenu {font-size: 20px;font-family: "Microsoft YaHei UI";font-weight: light;color:white;padding-left: 5px;padding-right: 5px;padding-top: 4px;padding-bottom: 4px;border-style: solid;border-width: 0px;border-color: rgba(255, 212, 255, 255);border-radius: 3px;background-color: rgba(16,155,226,50);}''')for cam in cams:exec("action_%s = QAction('%s 号摄像头')" % (cam, cam))exec("popMenu.addAction(action_%s)" % cam)pos = QCursor.pos()action = popMenu.exec(pos)# 设置摄像头来源if action:str_temp = ''selected_stream_source = str_temp.join(filter(str.isdigit, action.text())) #获取摄像头号,去除非数字字符self.yolo_predict.source = selected_stream_sourceself.show_status(f'摄像头设备:{action.text()}')DialogOver(parent=self, text=f"当前摄像头为: {action.text()}", title="摄像头选择成功", flags="success")# 1、选择rtspdef rtsp_seletction(self):self.rtsp_window = Window()self.rtsp_window.rtspEdit.setText(self.rtsp_ip)self.rtsp_window.show()# 如果点击则加载RTSPself.rtsp_window.rtspButton.clicked.connect(lambda: self.load_rtsp(self.rtsp_window.rtspEdit.text()))# 2、加载RTSPdef load_rtsp(self, ip):MessageBox(self.close_button, title='提示', text='加载 rtsp...', time=1000, auto=True).exec()self.stop() # 关闭YOLO线程self.yolo_predict.source = ipself.rtsp_ip = ip # 写会ipself.rtsp_window.close()#状态显示self.show_status(f'加载rtsp地址:{ip}')DialogOver(parent=self, text=f"rtsp地址为: {ip}", title="RTSP加载成功", flags="success")# 1、设置 单目标def lock_id_selection(self):self.yolo_predict.lock_id = Noneself.id_window = id_Window()self.id_window.idEdit.setText(str(self.car_id))self.id_window.show()self.id_window.idButton.clicked.connect(lambda: self.set_lock_id(self.id_window.idEdit.text()))# 2、设置 单目标 IDdef set_lock_id(self,lock_id):self.yolo_predict.lock_id = Noneself.yolo_predict.lock_id = lock_idself.car_id = lock_id  # 写回lock_idself.show_status('加载ID:{}'.format(lock_id))self.id_window.close()#加载流量折线图def show_traffic_graph(self):# 没有开始检测if not self.run_button.isChecked():DialogOver(parent=self, text="请先开始目标检测!", title="开启失败", flags="danger")return# 避免重复开启if self.is_draw_thread:DialogOver(parent=self, text="流量图已经开启啦!", title="不能重复开启", flags="danger")returnself.draw_thread.start()self.is_draw_thread = True# 开启Web后端def web_back_end(self):# 终止事件self.stop()base_dir = os.path.dirname(os.path.abspath(__file__))flask_app_path = os.path.join(base_dir, 'app.py')# True是可以开启# if (self.web_flag):#     self.server_process = subprocess.Popen(['python', flask_app_path])#     MessageBox(self.close_button, title='提示', text='正在开启网页端...', time=2000, auto=True).exec()##     # 检查子进程是否启动#     try:#         if self.server_process.pid is not None:#             self.src_web_button.setText("关闭网页端")#             self.web_flag = False#             DialogOver(parent=self, text="网页端已开启", title="开启成功", flags="success")#     except Exception as e:#         DialogOver(parent=self, text=str(e), title="开启失败", flags="danger")### # False是关闭后端# else:#     try:#         self.server_process.terminate()#         MessageBox(self.close_button, title='提示', text='正在关闭网页端...', time=2000, auto=True).exec()##         self.src_web_button.setText("开启网页端")#         self.web_flag = True#         DialogOver(parent=self, text="网页端已关闭", title="关闭成功", flags="success")#     except Exception as e:#         DialogOver(parent=self, text=str(e), title="关闭失败", flags="danger")#保存提示(MP4)def is_save_res(self):if self.save_res_button.checkState() == Qt.CheckState.Unchecked:self.show_status('提示: 监测结果不会被保存')self.yolo_predict.save_res = Falseelif self.save_res_button.checkState() == Qt.CheckState.Checked:self.show_status('提示: 监测结果将会被保存')self.yolo_predict.save_res = True#保存提示(txt)def is_save_txt(self):if self.save_txt_button.checkState() == Qt.CheckState.Unchecked:self.show_status('提示: 标签信息不会被保存')self.yolo_predict.save_txt = Falseelif self.save_txt_button.checkState() == Qt.CheckState.Checked:self.show_status('提示: 标签信息将会被保存')self.yolo_predict.save_txt = True# 是否显示 标签def is_show_labels(self):if self.show_labels_checkbox.checkState() == Qt.CheckState.Unchecked:self.yolo_predict.show_labels = Falseself.show_status('提示: 不再显示标签')elif self.show_labels_checkbox.checkState() == Qt.CheckState.Checked:self.yolo_predict.show_labels = Trueself.show_status('提示: 显示标签')# 是否显示 轨迹def is_show_trace(self):if self.show_trace_checkbox.checkState() == Qt.CheckState.Unchecked:self.yolo_predict.show_trace = Falseself.show_status('提示: 不再显示轨迹')elif self.show_trace_checkbox.checkState() == Qt.CheckState.Checked:self.yolo_predict.show_trace = Trueself.show_status('提示: 显示轨迹')#终止事件(按下终止按钮 or 输入源更换的时候)def stop(self):try:# 摄像头释放self.yolo_predict.release_capture()  # 这里是为了终止使用摄像头检测函数的线程,改了yolo源码# 结束线程self.yolo_thread.quit()except:passself.yolo_predict.stop_dtc = Trueself.run_button.setChecked(False)    #恢复按钮状态# 终止后才可以修改设置self.save_res_button.setEnabled(True)   #把保存按钮设置为可用self.save_txt_button.setEnabled(True)   #把保存按钮设置为可用self.iou_slider.setEnabled(True)        #把滑块设置为可用self.conf_slider.setEnabled(True)       #把滑块设置为可用self.speed_slider.setEnabled(True)      #把滑块设置为可用self.pre_video.clear()           #清空视频显示self.res_video.clear()           #清空视频显示self.progress_bar.setValue(0)   #进度条清零self.Class_num.setText('--')self.Target_num.setText('--')self.fps_label.setText('--')#检测参数设置def change_val(self, x, flag):# 交互比if flag == 'iou_spinbox':self.iou_slider.setValue(int(x*100))    elif flag == 'iou_slider':self.iou_spinbox.setValue(x/100) self.show_status('IOU Threshold: %s' % str(x/100))self.yolo_predict.iou_thres = x/100# 置信度elif flag == 'conf_spinbox':self.conf_slider.setValue(int(x*100))elif flag == 'conf_slider':self.conf_spinbox.setValue(x/100)self.show_status('Conf Threshold: %s' % str(x/100))self.yolo_predict.conf_thres = x/100# 延时elif flag == 'speed_spinbox':self.speed_slider.setValue(x)elif flag == 'speed_slider':self.speed_spinbox.setValue(x)self.show_status('Delay: %s ms' % str(x))self.yolo_predict.speed_thres = x  # ms# 车辆数预测警报elif flag == 'speed_nnn':self.speed_sss.setValue(x)elif flag == 'speed_sss':self.speed_nnn.setValue(x)self.show_status('流量阈值设置: %s 辆' % str(x))self.car_threshold = x  # ms#模型更换def change_model(self,x):self.select_model = self.model_box.currentText()self.yolo_predict.new_model_name = f"./{self.config.models_path}/%s" % self.select_modelself.show_status('更改模型:%s' % self.select_model)self.Model_name.setText(self.select_model)#循环监测文件夹的文件变化def ModelBoxRefre(self):pt_list = os.listdir(f'./{self.config.models_path}')pt_list = [file for file in pt_list if file.endswith('.pt') or file.endswith('.engine')]pt_list.sort(key=lambda x: os.path.getsize(f'./{self.config.models_path}/' + x))#必须排序后再比较,否则列表会一直刷新if pt_list != self.pt_list:self.pt_list = pt_listself.model_box.clear()self.model_box.addItems(self.pt_list)#获取鼠标位置(用于按住标题栏拖动窗口)def mousePressEvent(self, event):p = event.globalPosition()globalPos = p.toPoint()self.dragPos = globalPos#拖动窗口大小时优化调整def resizeEvent(self, event):# Update Size GripsUIFuncitons.resize_grips(self)# 退出时退出线程,保存设置def closeEvent(self, event):try:self.stop()# 检测画图线程self.draw_thread.close_exec()# self.draw_thread.deleteLater()# config.jsonself.config.save_res = self.yolo_predict.save_resself.config.save_txt = self.yolo_predict.save_txtself.config.show_labels = self.yolo_predict.show_labelsself.config.show_trace = self.yolo_predict.show_traceself.config.iou = self.yolo_predict.iou_thresself.config.conf = self.yolo_predict.conf_thresself.config.rate = self.yolo_predict.speed_thresself.config.car_threshold = self.car_threshold   # 车辆警报 阈值self.config.rtsp_ip = self.rtsp_ipself.config.car_id = self.car_idself.config.open_fold = self.open_foldself.config.save_config()  # 保存设置# 退出弹窗 2sMessageBox(self.close_button, title='Note', text='退出中,请等待...', time=2000, auto=True).exec()# 检查服务器进程是否启动if self.server_process is not None:if self.server_process.pid is not None:self.server_process.terminate()  # 服务器进程关闭sys.exit(0)except Exception as e:print(e)sys.exit(0)# 预测图片def img_predict(self):if check_url(self.yolo_predict.source):DialogOver(parent=self, text="目标路径含有中文!", title="程序取消", flags="danger")returnself.run_button.setChecked(False)  # 按钮# 读取照片image = cv2.imread(self.yolo_predict.source)org_img = image.copy()# 加载模型model = self.yolo_predict.load_yolo_model()# 获取数据源iter_model = iter(model.track(source=image, show=False))result = next(iter_model)  # 这里是检测的核心,# 如果没有目标if result.boxes.id is None:DialogOver(parent=self, text="该图片中没有要检测的目标哟!", title="运行完成", flags="warning")self.show_image(image, self.pre_video)self.show_image(image, self.res_video)self.yolo_predict.source = ''return# 如果有目标detections = sv.Detections.from_yolov8(result)detections.tracker_id = result.boxes.id.cpu().numpy().astype(int)# 画标签labels_write, img_box = self.yolo_predict.creat_labels(detections, image, model)# 显示信息 —— 类别数 & 总数self.Class_num.setText(str(self.yolo_predict.get_class_number(detections)))self.Target_num.setText(str(len(detections.tracker_id)))# 显示图片self.show_image(org_img, self.pre_video)  # leftself.show_image(img_box, self.res_video)  # rightself.yolo_predict.source = ''DialogOver(parent=self, text="图片检测完成", title="运行成功", flags="success")# 保存图片if self.yolo_predict.save_res:check_path(self.config.save_res_path) # 检查保存路径# 存在同名文件,自增 self.image_id 直至文件不存在while os.path.exists(f"{self.config.save_res_path}/image_result_{self.image_id}.jpg"):self.image_id += 1# 将 BGR 格式的 frame 转换为 RGB 格式rgb_frame = cv2.cvtColor(img_box, cv2.COLOR_BGR2RGB)# 把 rgb_frame 转换为 numpy格式 就行了numpy_frame = np.array(rgb_frame)Image.fromarray(numpy_frame).save(f"./{self.config.save_res_path}/image_result_{self.image_id}.jpg")# 存储labels里的信息if self.yolo_predict.save_txt:check_path(self.config.save_txt_path) # 检查保存路径# 存在同名文件,自增 self.txt_id 直至文件不存在while os.path.exists(f"{self.config.save_txt_path}/result_{self.txt_id}.jpg"):self.txt_id += 1with open(f'{self.config.save_txt_path}/result_{self.txt_id}.txt', 'a') as f:f.write('当前时刻屏幕信息:' +str(labels_write) +f'检测时间: {datetime.datetime.now().strftime("%Y-%m-%d-%H:%M:%S")}' +f' 路段通过的目标总数: {len(detections.tracker_id)}')f.write('\n')returnif __name__ == "__main__":app = QApplication(sys.argv)Home = MainWindow()Home.show()sys.exit(app.exec())  

🍅✌感兴趣的可以先收藏起来,点赞关注不迷路,想学习更多项目可以查看主页,大家在毕设选题,项目编程以及论文编写等相关问题都可以给我留言咨询,希望可以帮助同学们顺利毕业!🍅✌

5、源码获取方式

🍅由于篇幅限制,获取完整文章或源码、代做项目的,拉到文章底部即可看到个人联系方式。🍅

点赞、收藏、关注,不迷路,下方查看👇🏻获取联系方式👇🏻

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

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

相关文章

计算机视觉第一课opencv(四)保姆级教学

目录 简介 一、轮廓检测 1.查找轮廓的API 2.代码分析 2.1.图像二值化处理 2.2轮廓检测 2.3轮廓绘制 2.4轮廓面积计算 2.5轮廓周长计算 2.6筛选特定面积的轮廓 2.7查找最大面积的轮廓 2.8绘制轮廓的外接圆 2.9绘制轮廓的外接矩形 二、轮廓的近似 三、模板匹配 简…

基于Vue2+elementUi实现树形 横向 合并 table不规则表格

1、实现效果 共N行&#xff0c;但是每一列对应的单元格列数固定&#xff0c;行数不固定2、实现方式说明&#xff1a;使用的是vue2 elementUI表格组件 js实现<template><div class"table-container" ><el-table height"100%" :span-metho…

深度学习在计算机视觉中的应用:对象检测

引言 对象检测是计算机视觉领域中的一项基础任务&#xff0c;目标是在图像或视频帧中识别和定位感兴趣的对象。随着深度学习技术的发展&#xff0c;对象检测的准确性和效率都有了显著提升。本文将详细介绍如何使用深度学习进行对象检测&#xff0c;并提供一个实践案例。 环境准…

node.js 安装步骤

在Node.js中安装包通常通过npm(Node Package Manager)来完成,这是Node.js的包管理工具。以下是安装Node.js和通过npm安装包的基本步骤: 1. 安装Node.js 方法一:使用nvm(Node Version Manager) 推荐使用nvm来安装Node.js,因为它允许你安装多个Node.js版本,并轻松地在…

面试-故障案例解析

一、NFS故障&#xff0c;造成系统cpu使用率低而负载极高。故障概述: 公司使用NFS为web节点提供共享存储服务,某一天下午发现web节点CPU使用率低,而负载极高.登录web节点服务器排查发现后段NFS服务器故障. 影响范围: 网站看不到图片了。 处理流程: 通过ssh登录NFS服务…

医疗AI时代的生物医学Go编程:高性能计算与精准医疗的案例分析(一)

摘要: 随着高通量测序、医学影像和电子病历等生物医学数据的爆炸式增长,对高效、可靠、可扩展的计算工具需求日益迫切。Go语言凭借其原生并发模型、卓越的性能、简洁的语法和强大的标准库,在生物医学信息学领域展现出独特优势。本文以“生物医学Go编程探析”为主题,通过三个…

针对 “TCP 连接建立阶段” 的攻击

针对 “TCP 连接建立阶段” 的攻击一、定义二、共性防御思路三、攻击手段3.1、SYN 洪水攻击&#xff08;SYN Flood&#xff09;3.2、Land 攻击&#xff08;Land Attack&#xff09;一、定义 什么是针对 “TCP 连接建立阶段” 的攻击&#xff1f;核心特征是利用 TCP “三次握手…

聊一聊 单体分布式 和 微服务分布式

微服务 与 单体架构对比维度单体架构微服务架构​​架构本质​​一个单一的、功能齐全的应用程序一组​​小型、独立​​的服务集合​​开发​​团队工作在同一个代码库&#xff0c;易产生冲突。技术栈统一。每个服务可以由​​ 独立的小团队 ​​负责&#xff0c;允许使用​​…

【C++八股文】计算机网络篇

网络协议核心知识点详解 TCP头部结构 TCP头部包含多个关键字段&#xff0c;每个字段都有其特定作用&#xff1a; 16位源端口&#xff1a;标识发送方应用程序的端口号16位目的端口&#xff1a;标识接收方应用程序的端口号32位序号&#xff1a;保证数据包有序传输的唯一标识32…

小迪Web自用笔记7

游戏一般不走http https协议&#xff0c;一般的抓包工具抓不到。科来&#xff0c;这个工具是从网卡抓包。你一旦打怪数据就会多起来↓但不是很专业。可以抓到https。wep↑这个西东是全部协议都做流量包&#xff0c;你不知道他是从哪儿来的&#xff0c;他全都抓&#xff08;专业…

现代 Linux 发行版为何忽略Shell脚本的SUID位?

在现代Linux系统中&#xff0c;为Shell脚本设置 SUID&#xff08;Set User ID&#xff09; 权限位几乎是无效的。这个看似简单的现象背后&#xff0c;是Linux内核设计者们在安全与便利性之间做出的一个至关重要的历史性抉择。要彻底理解这一点&#xff0c;我们需要深入到内核层…

Qt节点编辑器设计与实现:动态编辑与任务流可视化(一)

文章目录一、项目概述二、整体架构&#xff1a;模型-视图分离的设计哲学1. 模型层&#xff1a;数据与业务逻辑的核心2. 视图层&#xff1a;图形渲染与用户交互3. 交互层&#xff1a;连接模型与视图的桥梁三、核心模块解析1. 样式管理系统&#xff1a;视觉表现的基石2. 图形数据…

MySQL常见报错分析及解决方案总结(4)---ERROR 1040(00000):Too many connections

报错信息&#xff1a;ERROR 1040(00000):Too many comnections异常效果&#xff1a;原因分析&#xff1a;“ERROR 1040 (00000): Too many connections” 是 MySQL 数据库最常见的连接数超限错误&#xff0c;本质是 “当前试图连接数据库的客户端数量&#xff0c;超过了 MySQL …

GRPO(组相对策略优化):大模型强化学习的高效进化

本文由「大千AI助手」原创发布&#xff0c;专注用真话讲AI&#xff0c;回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我&#xff0c;一起撕掉过度包装&#xff0c;学习真实的AI技术&#xff01; ✨ 1. GRPO概述&#xff1a;重新定义大模型强化学习效率 GRPO&#x…

【Canvas与戳记】蓝底黄面十六角Premium Quality戳记

【成图】【代码】<!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>蓝底黄面十六角Premium Quality戳记 Draft1</title><style ty…

深度学习:洞察发展趋势,展望未来蓝图

在科技飞速发展的当下&#xff0c;深度学习作为人工智能领域的璀璨明星&#xff0c;正以前所未有的速度重塑着各个行业的格局。从日常使用的智能语音助手&#xff0c;到医疗领域精准的疾病诊断&#xff0c;再到自动驾驶汽车对复杂路况的实时感知与决策&#xff0c;深度学习无处…

基于Docker部署的Teable应用

简介Teable 是一款高性能多维表格本地化的解决方案&#xff0c;通过无代码方式快速构建业务管理系统&#xff0c;支持私有部署和精细权限管理。对于个人或者小团队使用&#xff0c;可以避免昂贵的集成软件带来的成本压力。特点Excel 式任意拖拽选区编辑支持双向关联&#xff0c…

Java项目实现【记录系统操作日志】功能

✨ 哈喽&#xff0c;屏幕前的每一位开发者朋友&#xff0c;你们好呀&#xff01;✨​ 当你点开这篇文章时&#xff0c;或许正对着 IDE 里闪烁的光标发呆&#xff0c;或许刚解决一个卡了三天的 bug&#xff0c;正端着咖啡松口气 —— 不管此刻的你在经历什么&#xff0c;都想先和…

响应式编程框架Reactor【4】

文章目录七、调度与线程模型7.1 概述7.2 Scheduler: Reactor 的线程调度器7.3 两大核心操作符&#xff1a;subscribeOn vs publishOn7.4 示例详解7.4.1 subscribeOn()的全局影响7.4.2 publishOn() 的局部切换7.4.3 多个publishOn切换7.4.4 线程切换时序图7.5 核心调度器7.5.1 B…

第21节:环境贴图与PBR材质升级——构建电影级真实感渲染

第21节&#xff1a;环境贴图与PBR材质升级——构建电影级真实感渲染 概述 基于物理的渲染&#xff08;Physically Based Rendering, PBR&#xff09;是当代计算机图形学中最重要的技术进步之一&#xff0c;它彻底改变了实时渲染的质量标准。在本节中&#xff0c;我们将深入探索…