• 交通信号标志识别系统 python 深度学习 YOLOv5


    [毕业设计]2023-2024年最新最全计算机专业毕设选题推荐汇总

    感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人 。

    1、项目介绍

    本系统基于YOLOv5,采用登录注册进行用户管理,对于图片、视频和摄像头捕获的实时画面,可检测交通信号标志图像,系统支持结果记录、展示和保存,每次检测的结果记录在表格中。对此这里给出博主设计的界面,功能也可以满足图片、视频和摄像头的识别检测。

    2、项目界面

    (1)系统首页
    在这里插入图片描述

    (2)图片检测1
    在这里插入图片描述

    (2)图片检测2

    在这里插入图片描述

    (3)图片检测3

    在这里插入图片描述

    (4)视频检测

    在这里插入图片描述

    (5)摄像头检测识别

    在这里插入图片描述

    (6)注册登录界面
    在这里插入图片描述

    3、项目说明

    交通标志识别系统是ITS和无人驾驶系统的重要组成部分。如何提高交通标志检测与识别技术的准确性和实时性,是该技术走向实际应用时需要解决的关键问题。
    近年来,大多数先进的目标检测算法,如Faster R-CNN、R-FCN、SSD和YOLO,都使用了卷积神经网络,并在目标检测任务中取得了丰硕的成果。然而,将这些方法简单地应用到交通标志识别中很难取得满意的效果。车载移动终端的目标识别和检测对不同尺度的目标要求较高的精度,对识别速度要求较高,这意味着要满足准确性和实时性两个要求。传统的CNN通常需要大量的参数和浮点运算(FLOPs)来达到令人满意的精度,例如ResNet-50有大约25.6万个参数,需要41亿个浮点运算来处理224×224大小的图像。然而,内存和计算资源有限的移动设备(如智能手机和自动驾驶汽车)无法用于更大网络的部署和推理。YOLOv5作为一种One-stage检测器,具有计算量小、识别速度快等优点。

    4、核心代码

    # -*- coding: utf-8 -*-
    
    import os
    import sys
    
    from PyQt5 import QtWidgets
    from PyQt5.QtCore import Qt
    from PyQt5.QtGui import QPixmap, QFont, QIcon
    from PyQt5.QtWidgets import QApplication, QMainWindow
    from PyQt5.QtWidgets import QWidget, QLabel, QDesktopWidget, QHBoxLayout, QFormLayout, \
        QPushButton, QLineEdit, QMessageBox
    
    from UI_rec.TrafficSignRecing import Traffic_MainWindow
    
    
    import os.path
    import threading
    import time
    
    from sys import argv, exit
    
    
    
    
    class LoginForm(QWidget):
        def __init__(self):
            super().__init__()
            self.text = ""
            self.led_workerid = QLineEdit()
            self.led_pwd = QLineEdit()
            self.btn_login = QPushButton("登录")
            self.btn_reg = QPushButton("注册")
            self.initUI()
            self.btn_login.clicked.connect(self.do_login)
            self.btn_reg.clicked.connect(self.do_reg)
            self.pwd_name_ini = {"admin": "123456", "test": "123456"}
            self.sign_main = self.Traffic_Main()
    
        class Traffic_Main(Traffic_MainWindow):
            pass
    
        def do_reg(self):
            name_edit = self.led_workerid.text()
            pwd_edit = self.led_pwd.text()
    
            if name_edit != "" and pwd_edit != "":
                if name_edit not in self.pwd_name_ini.keys():
                    self.pwd_name_ini.update({name_edit: pwd_edit})
                    QMessageBox.about(self, "注册信息",
                                      "用户 " + name_edit + " 已注册成功!\n\n请重新进入登录界面")
                else:
                    QMessageBox.about(self, "注册信息",
                                      "用户 " + name_edit + " 已经被注册过!\n\n请重新输入用户信息")
            else:
                QMessageBox.about(self, "注册信息",
                                  "您的信息填写不全!\n请重新输入用户名和密码")
    
        def do_login(self):
            name_edit = self.led_workerid.text()
            pwd_edit = self.led_pwd.text()
    
            if name_edit != "" and pwd_edit != "":
                if name_edit in self.pwd_name_ini.keys():
                    ini_pwd = self.pwd_name_ini[name_edit]
                    if pwd_edit == ini_pwd:
                        # QMessageBox.about(self, "登录信息",
                        #                   "用户 " + name_edit + " 已成功登录!\n\n点击确定启动界面程序")
                        # self.close()
                        # QtWidgets.QApplication.processEvents()
                        # os.system("python runMain.py")
                        self.hide()
                        # win = Bird_MainWindow()
                        self.sign_main.show()
                    else:
                        QMessageBox.about(self, "登录信息",
                                          "用户 " + name_edit + " 密码不正确!\n\n请重新输入密码")
                else:
                    QMessageBox.about(self, "登录信息",
                                      "用户 " + name_edit + " 未经过注册!\n\n请重新输入用户信息")
            else:
                QMessageBox.about(self, "登录信息",
                                  "您的信息填写不全!\n请重新输入用户名和密码")
    
        def initUI(self):
            """
            初始化UI
            :return:
            """
            self.setObjectName("loginWindow")
            self.setStyleSheet('#loginWindow{background-color:white}')
            self.setFixedSize(650, 400)
            self.setWindowTitle("登录")
            self.setWindowIcon(QIcon('icons/result.png'))
    
            # 添加顶部logo图片
            pixmap = QPixmap("icons/back.png")
            scaredPixmap = pixmap.scaled(650, 180)
            label = QLabel(self)
            label.setPixmap(scaredPixmap)
    
            # 绘制顶部文字
            lbl_logo = QLabel(self)
            lbl_logo.setText(self.text)
            lbl_logo.setStyleSheet("QWidget{color:white;font-weight:600;background: transparent;font-size:30px;}")
            lbl_logo.setFont(QFont("Microsoft YaHei"))
            lbl_logo.move(130, 70)
            lbl_logo.setAlignment(Qt.AlignCenter)
            lbl_logo.raise_()
    
            # 登录表单内容部分
            login_widget = QWidget(self)
            login_widget.move(0, 160)
            login_widget.setGeometry(0, 160, 650, 260)
    
            hbox = QHBoxLayout()
            # 添加左侧logo
            logolb = QLabel(self)
            logopix = QPixmap("icons/sign.png")
            logopix_scared = logopix.scaled(130, 130)
            logolb.setPixmap(logopix_scared)
            logolb.setAlignment(Qt.AlignCenter)
            hbox.addWidget(logolb, 1)
            # 添加右侧表单
            fmlayout = QFormLayout()
            lbl_workerid = QLabel("用户名:")
            lbl_workerid.setFont(QFont("Microsoft YaHei"))
            lbl_workerid.setStyleSheet("color:blue")
            self.led_workerid.setFixedWidth(270)
            self.led_workerid.setFixedHeight(38)
            self.led_workerid.setFont(QFont("Microsoft YaHei"))
            self.led_workerid.setPlaceholderText("用户名/账号")
    
            lbl_pwd = QLabel("密   码:")
            lbl_pwd.setFont(QFont("Microsoft YaHei"))
            lbl_pwd.setStyleSheet("color:blue")
            self.led_pwd.setEchoMode(QLineEdit.Password)
            self.led_pwd.setFixedWidth(270)
            self.led_pwd.setFixedHeight(38)
            self.led_pwd.setFont(QFont("Microsoft YaHei"))
            self.led_pwd.setPlaceholderText("密码")
    
            self.btn_reg.setFixedWidth(130)
            self.btn_reg.setFixedHeight(40)
            self.btn_reg.setFont(QFont("Microsoft YaHei"))
            self.btn_reg.setObjectName("reg_btn")
            # btn_reg.setStyleSheet("#reg_btn{background-color:#2c7adf;color:#fff;border:5px;border-radius:4px;}")
    
            self.btn_login.setFixedWidth(130)
            self.btn_login.setFixedHeight(40)
            self.btn_login.setFont(QFont("Microsoft YaHei"))
            self.btn_login.setObjectName("login_btn")
    
            fmlayout.addRow(lbl_workerid, self.led_workerid)
            fmlayout.addRow(lbl_pwd, self.led_pwd)
            # fmlayout.addWidget(btn_login)
    
            flyout2 = QHBoxLayout()
            flyout2.addWidget(self.btn_reg)
            flyout2.addWidget(self.btn_login)
    
            fmlayout.addItem(flyout2)
            # flyout2.setHorizontalSpacing(20)
            flyout2.setSpacing(12)
            hbox.setAlignment(Qt.AlignCenter)
            # 调整间距
            fmlayout.setHorizontalSpacing(20)
            fmlayout.setVerticalSpacing(12)
    
            hbox.addLayout(fmlayout, 2)
            login_widget.setLayout(hbox)
         
    
    
    if __name__ == "__main__":
    
      
    
    
    
        app = QApplication(sys.argv)
        ex = LoginForm()
        ex.show()
    
        sys.exit(app.exec_())
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185

    源码获取:

    🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看主页【专栏名称】或者【用户名】或者顶部的【选题链接】就可以找到我获取项目源码学习啦~🍅

    大家点赞、收藏、关注、评论啦 !

  • 相关阅读:
    信息熵与信息增益——python
    C语言-二分查找
    运维开发详解:从入门到精通
    HashMap 的 7 种遍历方式与性能分析
    RDMA抓包
    sql 统计新客户
    css 固定图片尺寸16:9
    【java】建筑施工一体化智慧工地信息管理系统源码
    数据治理的数字画像
    驱动开发基础知识
  • 原文地址:https://blog.csdn.net/q_3375686806/article/details/134334808