当前位置: 首页 > article >正文

智慧巡检-基于改进RT-DETR的道路交通小目标检测系统(含UI界面、yolov8、Python代码、数据集)基于 PyTorch 和 PyQt5 RT-DETR 或 YOLOv8

智慧巡检-基于改进RT-DETR的道路交通小目标检测系统含UI界面、yolov8、Python代码、数据集外接摄像头实时检测识别。以官方yolov8为主干实现对道路交通小目标检测识别OpenCV实现对交通目标的检测训练的分类模型识别对小目标种类的检测且利用PyQt5设计了简约的系统UI界面。在界面中您可以选择自己的视频文件、图片文件进行检测。此外您还可以更换自己训练的主干模型进行自己数据的检测。它具备多目标实时检测同时可以自由选择感兴趣的检测目标。数据集为VisDrone2019-DET-train训练集6417张验证集548张测试集130张种类10种 ‘pedestrian’, ‘people’, ‘bicycle’, ‘car’, ‘van’, ‘truck’, ‘tricycle’, ‘awning-tricycle’, ‘bus’, ‘motor’构建该系统的核心代码包含模型加载、推理逻辑以及仿照你截图设计的 PyQt5 界面。1. 环境依赖首先你需要安装必要的库。请在终端运行以下命令# 基础库pipinstalltorch torchvision opencv-python numpy pandas matplotlib# 界面库pipinstallPyQt5# 目标检测库 (支持 YOLOv8 和 RT-DETR)pipinstallultralytics2. 核心代码实现 (main.py)将以下代码保存为main.py。这段代码实现了模型加载自动检测并加载 RT-DETR 或 YOLOv8 权重。多源输入支持图片、视频、摄像头实时检测。可视化界面左侧控制面板右侧视频流显示底部数据表格。数据记录实时记录检测到的目标信息。importsysimporttimeimportcv2importtorchimportnumpyasnpimportpandasaspdfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QWidget,QVBoxLayout,QHBoxLayout,QLabel,QPushButton,QTableWidget,QTableWidgetItem,QFileDialog,QMessageBox,QComboBox,QHeaderView)fromPyQt5.QtGuiimportQImage,QPixmap,QFont,QIconfromPyQt5.QtCoreimportQt,QThread,pyqtSignal,QTimerfromultralyticsimportRTDETR,YOLO# --- 配置参数 ---MODEL_PATHbest.pt# 你的训练好的权重文件 (rtdetr.pt 或 yolov8.pt)USE_RTDETRTrue# 设置为 True 使用 RT-DETRFalse 使用 YOLOv8# VisDrone 类别名称CLASS_NAMES[pedestrian,people,bicycle,car,van,truck,tricycle,awning-tricycle,bus,motor]classDetectThread(QThread):# 定义信号用于传输处理后的图像和检测结果change_pixmap_signalpyqtSignal(np.ndarray)update_table_signalpyqtSignal(list)def__init__(self,model,source0):super().__init__()self.modelmodel self.sourcesource self.runningTruedefrun(self):capcv2.VideoCapture(self.source)whileself.runningandcap.isOpened():ret,framecap.read()ifret:# 推理resultsself.model(frame,verboseFalse)resultresults[0]# 解析结果boxesresult.boxes.xyxy.cpu().numpy()confsresult.boxes.conf.cpu().numpy()classesresult.boxes.cls.cpu().numpy()detected_data[]# 绘制框forbox,conf,clsinzip(boxes,confs,classes):x1,y1,x2,y2map(int,box)labelf{CLASS_NAMES[int(cls)]}{conf:.2f}# 随机颜色colortuple(np.random.randint(0,255,3).tolist())cv2.rectangle(frame,(x1,y1),(x2,y2),color,2)cv2.putText(frame,label,(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.5,color,2)detected_data.append({class:CLASS_NAMES[int(cls)],conf:f{conf:.2f},x1:x1,y1:y1,x2:x2,y2:y2})# 发送信号self.change_pixmap_signal.emit(frame)self.update_table_signal.emit(detected_data)else:breakcap.release()defstop(self):self.runningFalseself.wait()classMainWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(基于改进RT-DETR的道路交通小目标检测系统)self.setGeometry(100,100,1200,800)# 加载模型self.load_model()# UI 初始化self.init_ui()self.threadNonedefload_model(self):try:ifUSE_RTDETR:self.modelRTDETR(MODEL_PATH)else:self.modelYOLO(MODEL_PATH)print(模型加载成功)exceptExceptionase:QMessageBox.critical(self,错误,f模型加载失败:{e})sys.exit()definit_ui(self):# 主布局main_widgetQWidget()main_layoutQHBoxLayout()main_widget.setLayout(main_layout)self.setCentralWidget(main_widget)# --- 左侧控制面板 ---left_panelQWidget()left_layoutQVBoxLayout()left_panel.setFixedWidth(250)left_panel.setStyleSheet(background-color: #f0f0f0; padding: 10px;)# 按钮样式btn_styleQPushButton { background-color: #4a90e2; color: white; border: none; padding: 10px; border-radius: 5px; font-size: 14px; }\QPushButton:hover { background-color: #357abd; }self.btn_imgQPushButton(选择图片文件)self.btn_img.setStyleSheet(btn_style)self.btn_img.clicked.connect(self.load_image)self.btn_videoQPushButton(选择视频文件)self.btn_video.setStyleSheet(btn_style)self.btn_video.clicked.connect(self.load_video)self.btn_camQPushButton(打开摄像头)self.btn_cam.setStyleSheet(btn_style)self.btn_cam.clicked.connect(self.open_camera)self.btn_stopQPushButton(结束运行)self.btn_stop.setStyleSheet(QPushButton { background-color: #e74c3c; color: white; padding: 10px; border-radius: 5px; })self.btn_stop.clicked.connect(self.stop_detection)left_layout.addWidget(self.btn_img)left_layout.addWidget(self.btn_video)left_layout.addWidget(self.btn_cam)left_layout.addSpacing(20)left_layout.addWidget(self.btn_stop)left_layout.addStretch()# --- 右侧显示区域 ---right_panelQWidget()right_layoutQVBoxLayout()# 视频显示标签self.video_labelQLabel()self.video_label.setFixedSize(900,600)self.video_label.setStyleSheet(background-color: #000;)# 结果表格self.tableQTableWidget()self.table.setColumnCount(6)self.table.setHorizontalHeaderLabels([序号,类别,置信度,X1,Y1,X2,Y2])self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)right_layout.addWidget(self.video_label)right_layout.addWidget(self.table)# 添加到主布局main_layout.addWidget(left_panel)main_layout.addWidget(right_panel)defload_image(self):fname,_QFileDialog.getOpenFileName(self,Open file,.,Image files (*.jpg *.png))iffname:self.run_detection(sourcefname,is_imageTrue)defload_video(self):fname,_QFileDialog.getOpenFileName(self,Open file,.,Video files (*.mp4 *.avi))iffname:self.run_detection(sourcefname,is_imageFalse)defopen_camera(self):self.run_detection(source0,is_imageFalse)defrun_detection(self,source,is_image):ifself.threadisnotNone:self.thread.stop()self.threadDetectThread(self.model,source)self.thread.change_pixmap_signal.connect(self.update_image)self.thread.update_table_signal.connect(self.update_table)self.thread.start()defstop_detection(self):ifself.threadisnotNone:self.thread.stop()self.threadNoneself.video_label.clear()self.table.setRowCount(0)defupdate_image(self,cv_img):将 OpenCV 图像转换为 Qt 图像并显示rgb_imagecv2.cvtColor(cv_img,cv2.COLOR_BGR2RGB)h,w,chrgb_image.shape bytes_per_linech*w convert_to_Qt_formatQImage(rgb_image.data,w,h,bytes_per_line,QImage.Format_RGB888)pconvert_to_Qt_format.scaled(900,600,Qt.KeepAspectRatio)self.video_label.setPixmap(QPixmap.fromImage(p))defupdate_table(self,data):self.table.setRowCount(0)# 清空表格如果是实时视频流通常只保留当前帧或累积# 这里为了演示如果是视频流每次更新会覆盖如果是图片则显示所有forrow_num,row_datainenumerate(data):self.table.insertRow(row_num)self.table.setItem(row_num,0,QTableWidgetItem(str(row_num1)))self.table.setItem(row_num,1,QTableWidgetItem(row_data[class]))self.table.setItem(row_num,2,QTableWidgetItem(row_data[conf]))self.table.setItem(row_num,3,QTableWidgetItem(str(row_data[x1])))self.table.setItem(row_num,4,QTableWidgetItem(str(row_data[y1])))self.table.setItem(row_num,5,QTableWidgetItem(str(row_data[x2])))self.table.setItem(row_num,6,QTableWidgetItem(str(row_data[y2])))if__name____main__:appQApplication(sys.argv)windowMainWindow()window.show()sys.exit(app.exec_())3. 代码功能详解模型兼容性代码中使用了ultralytics库。通过USE_RTDETR True代码会自动调用RTDETR类加载模型。如果你需要切换回 YOLOv8只需将USE_RTDETR改为False即可。多线程处理 (DetectThread)为了防止界面卡顿视频读取和推理过程被放在了一个单独的线程中。使用pyqtSignal将处理后的图像numpy数组发送回主线程进行显示。界面布局左侧是操作区选择文件、打开摄像头、停止采用了固定宽度和背景色模仿了截图中的风格。右侧上方是视频显示区下方是数据表格实时展示检测到的目标类别、坐标和置信度。数据导出虽然截图中有一个“导出数据”按钮为了保持代码简洁核心逻辑已包含在表格更新中。你可以使用pandas将detected_data列表保存为 CSV 文件。4. 如何训练你的模型VisDrone 数据集同学你需要先训练一个模型。创建一个train.pyfromultralyticsimportRTDETR# 加载预训练模型modelRTDETR(rtdetr-l.pt)# 或者 rtdetr-x.pt# 训练model.train(datapath/to/visdrone.yaml,# 你的数据集配置文件路径epochs100,imgsz640,batch8,# 根据显存调整namertdetr_visdrone_v1)训练完成后将生成的best.pt放在项目根目录下即可运行main.py进行检测。以上即为构建该道路交通小目标检测系统的完整代码与训练指南。

相关文章:

智慧巡检-基于改进RT-DETR的道路交通小目标检测系统(含UI界面、yolov8、Python代码、数据集)基于 PyTorch 和 PyQt5 RT-DETR 或 YOLOv8

智慧巡检-基于改进RT-DETR的道路交通小目标检测系统(含UI界面、yolov8、Python代码、数据集)外接摄像头实时检测识别。以官方yolov8为主干,实现对道路交通小目标检测识别(OpenCV实现对交通目标的检测,训练的分类模型识…...

扣图操作方法完全指南:一键去背景,从小白到高手只需3步

每次看到朋友圈里别人的证件照、商品图、头像背景都换得很专业,你是不是也想试试?但一提到"扣图",很多人的第一反应就是打开Photoshop,结果被复杂的工具栏劝退了。其实,现在扣图已经不是什么高技术门槛的事儿…...

如何快速搭建Sunshine游戏串流服务器:终极自托管指南

如何快速搭建Sunshine游戏串流服务器:终极自托管指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 想要在任何设备上畅玩PC游戏吗?Sunshine开源游戏串流服…...

2026届学术党必备的六大AI论文工具推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 撰写AI毕业论文之时,需一直坚守学术伦理底线,严格禁止直接靠着生成式…...

别再只用AES了!手把手教你用Java BouncyCastle库实现SM4国密加密(附完整工具类)

国密算法实战:用Java BouncyCastle实现SM4加密的完整指南 在数据安全领域,国际通用算法长期占据主导地位,但随着技术自主可控需求的提升,国产密码算法正成为企业级应用的新选择。SM4作为我国商用密码标准体系中的重要对称加密算法…...

LlamaGen:自回归模型在图像生成领域挑战扩散模型

1. 项目概述:当Llama遇见图像生成最近在图像生成领域,一个名为LlamaGen的项目引起了我的注意。它提出了一个非常大胆且反直觉的观点:纯自回归模型(AR)在图像生成任务上,可以超越当前如日中天的扩散模型&…...

深入Android系统源码:screencap命令背后,SurfaceFlinger如何“画”出一张图?

深入Android系统源码:screencap命令背后,SurfaceFlinger如何“画”出一张图? 当我们轻敲adb shell screencap -p /sdcard/screenshot.png命令时,手机屏幕上瞬间闪现的内容便被永久定格。这个看似简单的操作背后,却隐藏…...

深耕高性价比多模型聚合平台赛道,这些企业值得重点关注

随着AI大模型的普及,单一模型的适配局限、高成本问题逐渐凸显,多模型聚合平台成为企业降本增效的核心选择。行业报告显示,近6个月国内多模型聚合平台的企业付费用户增速超40%,其中高性价比赛道更是成为竞争焦点。一、高性价比的核…...

ComfyUI-WanVideoWrapper完整指南:从零开始掌握AI视频生成神器

ComfyUI-WanVideoWrapper完整指南:从零开始掌握AI视频生成神器 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 你是否曾梦想过用AI将静态图片变成动态视频?或者让文字描述…...

靠谱多模型聚合平台供应商盘点 为AI项目匹配靠谱合作伙伴

随着大模型技术的普及,企业AI项目对模型多样性、适配灵活性的需求日益提升。单一模型难以覆盖复杂业务场景的痛点逐渐凸显,多模型聚合平台凭借统一接口、成本管控、多模型协同等优势,成为AI项目落地的关键支撑。本文将盘点主流靠谱供应商&…...

记录红米note手机忘记屏幕密码找回过程

手上一台老红米note10忘记了开机密码,但里面还有一些重要资料,今天得到一个软件MOBILedit Forensic ULTRA 9.8.0.34378可以解出屏幕密码,我就拿来试一下,果然解开了,记录一下过程给大家参考。先查这个手机的处理器是天…...

Cursor Pro破解工具:简单5步实现AI编程助手永久免费使用

Cursor Pro破解工具:简单5步实现AI编程助手永久免费使用 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your t…...

从零构建Node.js API客户端:TypeScript封装、Axios拦截器与错误处理实战

1. 项目概述:一个API客户端的诞生与价值最近在对接一个名为“Seedance2”的第三方服务时,我发现市面上缺少一个成熟、稳定且易于集成的客户端库。官方提供的文档虽然详尽,但直接使用原始的HTTP请求进行交互,代码会迅速变得臃肿且难…...

嵌入式固件开发知识体系构建:从硬件交互到系统级设计

1. 固件开发者知识体系构建:从“会写代码”到“懂系统”干了十几年嵌入式,我越来越觉得,固件开发这行,光会调库、写业务逻辑是远远不够的。你写的每一行代码,最终都要在真实的物理世界里跑起来,要和传感器、…...

数据中心48V直连供电架构:从效率瓶颈到硬件设计实战

1. 数据中心供电演进:从香农理论到48V直连架构1948年,克劳德香农发表《通信的数学理论》,用1和0的二进制语言为信息时代奠基。六十八年后的今天,当我们谈论数据中心——这个承载着全球信息洪流的数字心脏时,讨论的焦点…...

VidToText

链接:https://pan.quark.cn/s/370e0f7f3f42vidToText 离线语音转文字 工具,绝对能帮你解放双手,自带模型不用联网,95% 高准确率,音视频秒转文字,办公和创作效率直接翻倍!且这款软件免费使用&…...

Python一键打包exe

链接:https://pan.quark.cn/s/a5759c489d72...

picdone

链接:https://pan.quark.cn/s/849b9ab09851支持对图片进行基础的裁剪、格式转换,背景去除、尺寸调整、体积压缩、添加水印、证件照处理的功能,处理好后可直接下载PNG到本地。...

从NASA音频设计看极端约束下的工程权衡:可靠性如何塑造系统特性

1. 项目概述:从一次论坛讨论说起如果你和我一样,是个对技术细节有强迫症的老工程师,或者是个音频发烧友,那你肯定也曾在看NASA的航天直播或纪录片时,皱起眉头嘀咕过:“这声音怎么这么差?” 那种…...

终极CAN总线分析利器:Cangaroo完全配置与深度使用指南

终极CAN总线分析利器:Cangaroo完全配置与深度使用指南 【免费下载链接】cangaroo Open source can bus analyzer software - with support for CANable / CANable2, CANFD, and other new features 项目地址: https://gitcode.com/gh_mirrors/ca/cangaroo Ca…...

电动汽车充电站控制系统的Intel处理器实践与优化

1. 电动汽车充电站的技术架构解析电动汽车充电站作为新型能源基础设施的核心节点,其技术实现远比传统加油站复杂。一个完整的充电站系统通常包含三个层级:电力转换模块(AC/DC)、控制管理系统(CMS)和云端服务…...

从洗衣机到无人机:拆解霍尔传感器在BLDC电机中的“交通指挥”角色

从洗衣机到无人机:霍尔传感器如何成为BLDC电机的隐形指挥家 当清晨的洗衣机开始轻柔转动,或是无人机在天空划出精准轨迹时,很少有人会注意到这些设备内部藏着一个精密的"交通指挥系统"。这个系统的核心不是红绿灯,而是一…...

算法时代,技术人如何寻找自己的 “人生硬代码”

前言:我们优化了代码,却常常忽略了人生系统在 AI 日新月异、信息密度持续升高的时代,很多人比过去更忙,却也更容易迷茫。作为技术人,我们熟悉架构设计、性能优化、代码重构和系统调优。面对一个工程问题时,…...

2026届毕业生推荐的降重复率助手横评

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 使AI生成内容检测率降低的关键策略是让文本的自然性以及多样性得到增强。其一,别…...

【实战复盘】Win11 23H2 微信图片拖拽至抖店失效:跨越注册表修复的降级排障SOP

一、 故障描述与初始环境故障现象:用户无法将微信聊天窗口内的图片,直接拖拽至“抖店工作台”聊天输入框中,系统表现为拖拽操作被拦截或无响应。故障环境:Windows 11 23H2 版本。前置历史:该故障电脑此前拖拽功能正常&…...

如何在C++中使用标准库的智能指针

使用标准库的智能指针* 注意&#xff0c;在使用数组的时候需要使用数组的特化版本。#include <iostream> #include <memory>std::unique_ptr<char[]> division(int x, int y) {std::unique_ptr<char[]> sp(new char[100]{});if (y 0) {throw "Pl…...

基于Next.js 14与Sanity构建高性能个人博客:全栈技术栈解析与实践

1. 项目概述&#xff1a;一个现代、高性能的个人博客系统 最近在折腾个人博客&#xff0c;发现了一个非常亮眼的开源项目——CaliCastle/cali.so。这不仅仅是一个博客模板&#xff0c;更是一个集成了当前前端最佳实践的完整个人网站解决方案。原作者Cali&#xff08;Calvin&am…...

一种新型傅里叶邻接Transformer用于脑电情绪识别

该片文章是频域先验 空间拓扑 Transformer在 EEG 情绪识别的里程碑&#xff0c;针对现有模型频域特征挖掘不足、Transformer 缺乏归纳偏置、跨被试泛化差三大核心痛点&#xff0c;提出傅里叶邻接 Transformer&#xff08;FAT&#xff09;&#xff0c;在 SEED、DEAP 数据集上刷…...

白嫖使用 Claude Opus 4.7 一个月,新手保姆级教程

挖槽&#xff0c;最近亚马逊做了一次大善人&#xff0c;为它自家的 Kiro 做拉新活动&#xff0c;新注册账号可以直接获得一个月的 Kiro Pro 会员&#xff0c;价值 20 美刀。 教程非常详细&#xff0c;所以有点长&#xff0c;想看最短流程版的可以直接划到文章末尾。 Kiro 是什…...

Agent量产鸿沟:从数据拆解到厂商抢位,安全基建决定谁能上岸

一、数据全景——鸿沟到底在哪采纳率的数字迷宫2026年Q2&#xff0c;企业Agent落地数据密集发布&#xff0c;但数字彼此矛盾——有的报告称"78%企业有试点"&#xff0c;有的则说"仅17%已部署"。这些差异不是数据错误&#xff0c;而是定义边界不同。理解这个…...