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

基于YOLO算法的道路障碍物检测系统,支持PyQt5、PySide6等多种界面

基于YOLO的道路障碍物检测系统项目

算法:yolov5/v8/v10/11/12/26
系统:pyqt5/pyside6/streamlit/flask

yolo格式,包含10类目标共3800张图像,已划分训练集和验证集,可以直接用
文件 环境配置文档 测试图片、视频 测试代码 界面代码
配置好环境可直接使用,运行效果见图像

,文件 环境配置文档 测试图片 测试代码 界面代码
项目介绍:
算法:YOLOv8/v10/11/12/26
软件:Pycharm/vscode
环境:anaconda Python
文件:项目代码 数据集 环境文件 UI文件
功能:在界面中选择各种图片,可以是自己在路边拍摄的图片,可以选择视频,可以调用摄像头,进行道路障碍物,检测速度快,检测精度高。

基于YOLO算法的道路障碍物检测系统,支持PyQt5、PySide6等多种界面框架。基于YOLOv8和PyQt5的完整构建代码。

🚧 道路障碍物检测系统关键词表

关键词类别关键词
核心算法YOLOv8、目标检测、深度学习、计算机视觉、道路障碍物识别
检测类别交通锥、路障、坑洼、轮胎碎片、落石、限速带、交通标牌等10类
开发技术Python、PyQt5、Ultralytics、OpenCV、Anaconda
系统功能图像检测、视频流分析、实时摄像头识别、多类别高精度检测、可视化界面
性能指标mAP@0.5 (0.861)、高召回率、实时推理速度

💻 系统构建详细代码

本代码实现了基于YOLOv8PyQt5的完整图形用户界面系统。

环境准备

在运行代码前,请确保已安装必要的库:

pipinstallPyQt5 opencv-python ultralytics matplotlib
完整代码

将以下代码保存为main.py。请确保你有一个训练好的模型权重文件(例如best.pt),或者修改代码中的MODEL_PATH指向你下载的官方模型(如yolov8n.pt)。

importsysimportcv2importtorchfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QLabel,QPushButton,QVBoxLayout,QWidget,QFileDialog,QMessageBox,QHBoxLayout)fromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQt,QTimerfromultralyticsimportYOLO# ================= 配置区域 =================# 请在此处加载你的训练好的模型权重# 如果没有训练好的模型,可以使用 'yolov8n.pt' 进行测试,但效果不如专用数据集训练的模型MODEL_PATH='best.pt'# 类别名称 (根据你的数据集定义,这里根据图片图例填写)CLASS_NAMES=['cones','barrier','Signboards','Rockfall','tire','SpeedBump','ImpactAttenuator','Pothole','Barricade','Traffic_Delineator_Post']classRoadObstacleDetection(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("基于YOLO的道路障碍物检测系统")self.setGeometry(100,100,1000,700)# 加载模型try:self.model=YOLO(MODEL_PATH)exceptExceptionase:QMessageBox.critical(self,"错误",f"无法加载模型:{e}\n请检查 MODEL_PATH 是否正确。")sys.exit()# 视频捕获对象self.cap=Noneself.timer=QTimer()self.timer.timeout.connect(self.update_frame)self.init_ui()definit_ui(self):# 主布局central_widget=QWidget(self)self.setCentralWidget(central_widget)layout=QVBoxLayout(central_widget)# 图像显示区域self.image_label=QLabel(self)self.image_label.setFixedSize(800,500)self.image_label.setStyleSheet("background-color: #000000; border: 1px solid #333;")self.image_label.setAlignment(Qt.AlignCenter)layout.addWidget(self.image_label,alignment=Qt.AlignCenter)# 按钮区域btn_layout=QHBoxLayout()self.btn_image=QPushButton("检测图片",self)self.btn_image.clicked.connect(self.detect_image)btn_layout.addWidget(self.btn_image)self.btn_video=QPushButton("检测视频",self)self.btn_video.clicked.connect(self.detect_video)btn_layout.addWidget(self.btn_video)self.btn_camera=QPushButton("开启摄像头",self)self.btn_camera.clicked.connect(self.detect_camera)btn_layout.addWidget(self.btn_camera)self.btn_stop=QPushButton("停止",self)self.btn_stop.clicked.connect(self.stop_detection)self.btn_stop.setStyleSheet("background-color: #ff4d4d; color: white;")btn_layout.addWidget(self.btn_stop)layout.addLayout(btn_layout)defprocess_frame(self,frame):"""使用YOLO模型进行推理并绘制结果"""# 推理results=self.model(frame)# 绘制结果# results[0].plot() 会自动绘制边界框和标签annotated_frame=results[0].plot()returnannotated_framedefupdate_frame(self):ifself.cap:ret,frame=self.cap.read()ifret:# 处理帧processed_frame=self.process_frame(frame)# 转换为Qt格式显示self.display_image(processed_frame)else:# 视频播放结束self.stop_detection()defdisplay_image(self,img):"""将OpenCV图像转换为QImage并显示"""rgb_image=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)h,w,ch=rgb_image.shape bytes_per_line=ch*w convert_to_Qt_format=QImage(rgb_image.data,w,h,bytes_per_line,QImage.Format_RGB888)p=convert_to_Qt_format.scaled(self.image_label.width(),self.image_label.height(),Qt.KeepAspectRatio)self.image_label.setPixmap(QPixmap.fromImage(p))defdetect_image(self):options=QFileDialog.Options()file_name,_=QFileDialog.getOpenFileName(self,"选择图片","","Images (*.png *.xpm *.jpg *.bmp);;All Files (*)",options=options)iffile_name:img=cv2.imread(file_name)ifimgisnotNone:processed_img=self.process_frame(img)self.display_image(processed_img)else:QMessageBox.warning(self,"错误","无法读取图片文件")defdetect_video(self):options=QFileDialog.Options()file_name,_=QFileDialog.getOpenFileName(self,"选择视频","","Videos (*.mp4 *.avi *.mov);;All Files (*)",options=options)iffile_name:self.stop_detection()# 停止之前的任务self.cap=cv2.VideoCapture(file_name)self.timer.start(30)# 约33fpsdefdetect_camera(self):self.stop_detection()# 停止之前的任务self.cap=cv2.VideoCapture(0)# 打开默认摄像头ifnotself.cap.isOpened():QMessageBox.warning(self,"错误","无法打开摄像头")self.cap=Nonereturnself.timer.start(30)defstop_detection(self):self.timer.stop()ifself.cap:self.cap.release()self.cap=Noneself.image_label.clear()self.image_label.setText("检测已停止")if__name__=='__main__':app=QApplication(sys.argv)window=RoadObstacleDetection()window.show()sys.exit(app.exec_())

代码说明

  1. 模型加载:在__init__中加载best.pt。你需要将你的训练权重放在同目录下,或者修改MODEL_PATH变量。
  2. 界面布局:使用QVBoxLayoutQHBoxLayout构建了一个包含图像显示区和四个功能按钮(图片、视频、摄像头、停止)的界面。
  3. 图像处理
    • process_frame:调用 YOLO 模型进行推理,并使用内置的plot()方法绘制边界框和类别。
    • display_image:将 OpenCV 的 BGR 格式转换为 Qt 支持的 RGB 格式并显示在QLabel上。
  4. 功能逻辑
    • 图片:使用QFileDialog选择文件,读取后推理并显示。
    • 视频:选择视频文件,利用QTimer循环读取帧并进行推理。
    • 摄像头:调用cv2.VideoCapture(0)读取本地摄像头流。
    • 停止:释放资源并停止定时器。

这个系统可以直接运行,只需确保环境配置正确且模型文件路径无误。

http://www.jsqmd.com/news/587288/

相关文章:

  • 春秋云境CVE-2018-12613
  • 终极指南:如何用HunterPie快速打造你的《怪物猎人:世界》个性化游戏界面
  • GCP 项目 IAM 与结算账号管理指南
  • ThinkCMF6 菜单名称修改:两种方法轻松搞定
  • 如何高效构建雷达系统:Python雷达模拟的完整实战指南
  • 深圳高端表维修避坑指南:华润大厦504揭秘百达翡丽等36品牌维修陷阱 - 时光修表匠
  • Claude 和 GPT 可以怎么搭?一个多模型调用示例讲清楚
  • 2026 上海网线回收厂家 排名及实用价值解析
  • 代码分享 | 单细胞系统药理学研究典范,破解急性淋巴细胞白血病治疗的耐药难题
  • 解压缩软件分享-Banizip
  • 深圳高端腕表维修避坑指南:30+奢华品牌案例与6城服务对比 - 时光修表匠
  • 开发工具试用期突破技术:基于文件系统权限控制的永久授权方案解析
  • c语言算数运算
  • 2026年市场优秀的详情页设计公司怎么选择,IP设计/餐饮品牌全案设计/食品包装设计,详情页设计工作室口碑推荐 - 品牌推荐师
  • 2026届最火的十大降重复率平台实际效果
  • 2026 年志愿填报服务商大揭秘,究竟哪家技术称王?
  • Z-Image-Turbo-rinaiqiao-huiyewunv保姆级教程:如何将本地Turbo模型接入Discord Bot提供绘图服务
  • 宝珀官方售后服务中心新址实地考察报告(2026年4月最新版) - 亨得利官方服务中心
  • 医疗器械行业实施六西格玛MBB认证的5个生死线:一个CE认证失败的血泪教训
  • OIBench与CoreCodeBench:揭示大模型编程能力的真实水平
  • 谷歌Gemini API分档计费,开发者调用如何渠道统计?
  • 5分钟掌握BilibiliDown:新手快速上手的B站视频下载指南
  • MapsUI-Kit上新:RoutePlan组件,从地点搜索到路径规划,加速构建您的地图Agent
  • 2026年4月行业内纵剪分条机品牌,市面上专业的纵剪分条机如何选优选实力品牌 - 品牌推荐师
  • 亲测马来西亚本科避坑复盘
  • 华硕笔记本性能控制新选择:G-Helper轻量级控制中心深度解析
  • ProperTree终极指南:三分钟上手跨平台plist编辑器
  • 数据仓库实战:实时数据分析与处理全解——技术架构、实现方案与性能优化
  • 百度网盘下载加速终极方案:免费解锁满速下载的完整指南
  • 交通运输部关于印发《交通运输综合应急预案》等5项突发事件应急预案的通知