欢迎光临
我们一直在努力

【YOLOv8交通信号灯检测系统】Python源码+PyQt5界面+数据集+训练代码 基于YOLOV8开发车载摄像头交通信号灯智能识别完整项目,搭载PyQt5可视化操作界面

深度学习 YOLO 系列】基于YOLO V8的车载摄像头交通信号灯检测识别系统【python源码+Pyqt5界面+数据集+训练代码】在这里插入图片描述
在这里插入图片描述
1
在这里插入图片描述

基于YOLOv8交通信号灯检测识别系统

一、项目信息表

项目详情参数
项目名称 YOLOv8车载交通信号灯检测识别系统
开发框架 Python + YOLOv8 + PyQt5
功能支持 单张图片检测、文件夹批量检测、视频文件检测、车载摄像头实时流识别、检测数据表格导出、置信度/IOU手动调节、GPU/CPU推理切换
适用场景 车载视觉感知、自动驾驶辅助、路口交通信号灯智能识别、交通视觉算法研究、毕业设计
检测目标 红灯、绿灯、黄灯、倒计时数字、交通标志等路口信号灯目标
输入尺寸 640×640
配套资源 完整数据集、YOLO训练代码、PyQt可视化界面全套源码、训练权重best.pt

二、数据集配置文件 traffic_light.yaml

path: ./traffic_light_dataset
train: images/train
val: images/val

nc: 4
names:
0: red_light
1: green_light
2: yellow_light
3: countdown

三、YOLOv8训练代码 train_traffic.py

from ultralytics import YOLO

def train_traffic_light():
# 加载yolov8s预训练权重
model = YOLO("yolov8s.pt")
results = model.train(
data="./traffic_light_dataset/traffic_light.yaml",
epochs=100,
imgsz=640,
batch=12,
device=0,
workers=4,
lr0=0.001,
augment=True,
mosaic=1.0,
patience=15,
project="runs/train",
name="traffic_light_detect",
exist_ok=True
)
metrics = model.val()
print(f"mAP@0.5:{metrics.box.map50:.4f}")

if __name__ == "__main__":
train_traffic_light()

四、PyQt5完整可视化界面核心代码(可直接运行)

import sys
import cv2
import os
from datetime import datetime
from PyQt5.QtWidgets import (QApplication, QMainWindow, QPushButton, QFileDialog,
QWidget, QVBoxLayout, QHBoxLayout, QLabel, QDoubleSpinBox,
QTableWidget, QTableWidgetItem, QComboBox)
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtCore import Qt, QThread, pyqtSignal
from ultralytics import YOLO

# 推理线程,防止界面卡顿
class DetectThread(QThread):
signal_frame = pyqtSignal(object)
signal_table = pyqtSignal(list)
def __init__(self, model, source, conf, iou):
super().__init__()
self.model = model
self.source = source
self.conf = conf
self.iou = iou
self.running = True

def run(self):
cap = cv2.VideoCapture(self.source)
while self.running and cap.isOpened():
ret, frame = cap.read()
if not ret:break
t1 = datetime.now()
results = self.model.predict(frame, conf=self.conf, iou=self.iou)
use_time = (datetime.now()t1).total_seconds()
res_frame = results[0].plot()
self.signal_frame.emit(res_frame)
info = []
for box in results[0].boxes:
cls = self.model.names[int(box.cls)]
conf = float(box.conf)
xyxy = box.xyxy.tolist()[0]
info.append([round(i,2) for i in xyxy] + [conf, cls])
self.signal_table.emit([info, use_time])
cap.release()

class TrafficLightWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("基于YOLOV8的交通信号灯检测识别系统")
self.resize(1300,900)
self.model = YOLO("best.pt")
self.detect_thread = None
self.init_ui()

def init_ui(self):
central = QWidget()
self.setCentralWidget(central)
main_layout = QHBoxLayout(central)

# 左侧画面显示
self.label_show = QLabel("图像窗口")
self.label_show.setMinimumSize(800,650)

# 右侧控制面板
right_widget = QWidget()
right_layout = QVBoxLayout(right_widget)

self.btn_img = QPushButton("选择图片文件")
self.btn_img.clicked.connect(self.detect_image)
self.btn_folder = QPushButton("选择图片文件夹")
self.btn_video = QPushButton("选择视频文件")
self.btn_cam = QPushButton("选择相机源(摄像头)")
self.btn_stop = QPushButton("停止运行")
self.btn_export = QPushButton("导出数据")

# 参数调节
self.spin_conf = QDoubleSpinBox()
self.spin_conf.setValue(0.45)
self.spin_iou = QDoubleSpinBox()
self.spin_iou.setValue(0.45)

# 硬件选择
self.combo_device = QComboBox()
self.combo_device.addItems(["GPU","CPU"])

# 添加控件
for w in [self.btn_img,self.btn_folder,self.btn_video,self.btn_cam,
self.spin_conf,self.spin_iou,self.combo_device,self.btn_stop,self.btn_export]:
right_layout.addWidget(w)

# 底部表格
self.table = QTableWidget()
self.table.setColumnCount(6)
self.table.setHorizontalHeaderLabels(["序号","图片名称","录入时间","识别结果","目标数目","推理用时"])

total_layout = QVBoxLayout()
top_layout = QHBoxLayout()
top_layout.addWidget(self.label_show)
top_layout.addWidget(right_widget)
total_layout.addLayout(top_layout)
total_layout.addWidget(self.table)
main_layout.addLayout(total_layout)

def detect_image(self):
path,_ = QFileDialog.getOpenFileName(filter="图片(*.jpg *.png *.jpeg)")
if not path:return
conf = self.spin_conf.value()
iou = self.spin_iou.value()
t_start = datetime.now()
res = self.model.predict(path,conf=conf,iou=iou,save=False)
cost = (datetime.now()t_start).total_seconds()
img = cv2.cvtColor(res[0].plot(),cv2.COLOR_BGR2RGB)
h,w,c = img.shape
qimg = QImage(img.data,w,h,w*c,QImage.Format_RGB888)
self.label_show.setPixmap(QPixmap.fromImage(qimg))
#表格写入
row = self.table.rowCount()
self.table.insertRow(row)
self.table.setItem(row,1,QTableWidgetItem(os.path.basename(path)))
self.table.setItem(row,2,QTableWidgetItem(str(datetime.now())[:19]))
self.table.setItem(row,5,QTableWidgetItem(f"{cost:.4f}s"))

if __name__ == '__main__':
app = QApplication(sys.argv)
win = TrafficLightWindow()
win.show()
sys.exit(app.exec_())

五、图片/视频简易推理代码

from ultralytics import YOLO

model = YOLO("best.pt")

if __name__ == "__main__":
#source 支持图片路径、视频路径、摄像头0
results = model.predict(
source="traffic_test.jpg",
conf=0.25,
iou=0.45,
save=True,
show_labels=True
)

【YOLOv8交通信号灯检测系统】Python源码+PyQt5界面+数据集+训练代码
正文:
基于YOLOV8开发车载摄像头交通信号灯智能识别完整项目,搭载PyQt5可视化操作界面!
✅系统功能
支持单张图片识别、文件夹批量检测、视频文件解析、本地车载摄像头实时检测;
置信度、IOU阈值自由调节,支持GPU/CPU切换运行;识别结果自动列表记录,支持数据导出。

✅适用场景
自动驾驶车载视觉感知、路口交通信号灯识别、智能车算法研发、计算机视觉毕业设计、交通监控项目二次开发。

✅全套资源
完整标注交通信号灯YOLO数据集、YOLOv8训练脚本、训练权重、完整版PyQt图形界面源码、部署说明文档。

七、标签关键词

#YOLOv8 #交通信号灯检测 #车载视觉识别 #自动驾驶感知 #PyQt5视觉系统 #目标检测毕设 #交通图像识别

如果你需要,我可以把完整带视频流、摄像头实时检测、表格导出Excel功能的完整版代码补齐!

赞(0)
未经允许不得转载:171主机测评 » 【YOLOv8交通信号灯检测系统】Python源码+PyQt5界面+数据集+训练代码 基于YOLOV8开发车载摄像头交通信号灯智能识别完整项目,搭载PyQt5可视化操作界面
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址