admin管理员组

文章数量:1558092

德国交通灯数据集

图片以及标注好的VOC2007格式的xml文件:
https://download.csdn/download/mao_hui_fei/12520548

效果图

标注示意图

原始训练及预测代码

使用Yolo v3进行目标检测

模型下载地址

将模型换到yolo v3 的路径下即可直接识别。
https://download.csdn/download/mao_hui_fei/12448438

界面文件

有读者对我的pyqt界面比较感兴趣,我这里分享出来,做的也是比较简单,用pyqt写的。

# -*- coding: utf-8 -*-
'''
这是这个图像识别的qt界面
'''
# Form implementation generated from reading ui file 'gui.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!

import yolo_video
from yolo_video import detect_img1
import sys
import cv2 as cv
import argparse
from yolo import YOLO, detect_video
from PIL import Image
import numpy as np
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        # 1、总界面框大小 MainWindow
        MainWindow.resize(1600, 820)  # 总界面框
        #左边界面区域:verticalLayoutWidget    QWidget类
        self.verticalLayoutWidget = QtWidgets.QWidget(MainWindow)
        self.verticalLayoutWidget.setGeometry(QtCore.QRect(30, 25, 1280, 720))#左边图片框
        self.verticalLayoutWidget.setStyleSheet('background-color:rgb(55,55,55)')  # 设置做左边框的颜色
        self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalLayoutWidget) #QVBoxLayout类 垂直地摆放小部件
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)#设置左侧、顶部、右侧和底部边距,以便在布局周围使用。
        self.verticalLayout.setObjectName("verticalLayout")
        self.label_ShowPicture = QtWidgets.QLabel(self.verticalLayoutWidget)
        self.label_ShowPicture.setObjectName("label_ShowPicture")
        self.verticalLayout.addWidget(self.label_ShowPicture)

        # 右边按钮及显示结果字符的一块区域:verticalLayoutWidget_2    QWidget类
        self.verticalLayoutWidget_2 = QtWidgets.QWidget(MainWindow)
        self.verticalLayoutWidget_2.setGeometry(QtCore.QRect(1350, 50, 220, 300))  #右边按钮及显示结果字符的大小
        #self.verticalLayoutWidget_2.setStyleSheet('background-color:rgb(155,155,155)')  # 设置做左边框的颜色
        self.verticalLayoutWidget_2.setObjectName("verticalLayoutWidget_2")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.verticalLayoutWidget_2) #QVBoxLayout类 垂直地摆放小部件
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        #按钮1 选择图片按钮:pushButton_select_pcture
        self.pushButton_select_pcture = QtWidgets.QPushButton(self.verticalLayoutWidget_2)
        self.pushButton_select_pcture.setObjectName("pushButton_select_pcture")
        self.verticalLayout_2.addWidget(self.pushButton_select_pcture)#将按钮1增加到
        #按钮2 开始识别按钮:pushButton_shibie
        self.pushButton_shibie = QtWidgets.QPushButton(self.verticalLayoutWidget_2)
        self.pushButton_shibie.setObjectName("pushButton_shibie")
        self.verticalLayout_2.addWidget(self.pushButton_shibie)

        # 放“图像识别结果为”这一句话
        self.label = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        font = QtGui.QFont()
        font.setPointSize(15)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.verticalLayout_2.addWidget(self.label)

        #lable_2放显示结果1
        self.label_2 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        font = QtGui.QFont()
        font.setPointSize(15)
        self.label_2.setFont(font)
        self.label_2.setText("")
        self.label_2.setObjectName("label_2")
        self.verticalLayout_2.addWidget(self.label_2)
        #png = QtGui.QPixmap('E:/testpicture/animal_pic.png')

        #lable_3放显示结果2
        self.lable_3 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        font = QtGui.QFont()
        font.setPointSize(15)
        self.lable_3.setFont(font)
        self.lable_3.setObjectName("label_3")
        self.verticalLayout_2.addWidget(self.lable_3)

        #lable_4放显示结果3
        self.label_4 = QtWidgets.QLabel(self.verticalLayoutWidget_2)
        font = QtGui.QFont()
        font.setPointSize(15)
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")
        self.verticalLayout_2.addWidget(self.label_4)


        # button点击事件
        self.pushButton_select_pcture.clicked.connect(self.pushButton_select_pcture_click)#读入图片按钮
        #print("运行到了这里70")
        self.pushButton_shibie.clicked.connect(self.shibie)#开始识别按钮
        #print("运行到了这里72")
        # 调用setPixmap命令,建立一个图像存放框,并将之前的图像png存放在这个框框里。
        #self.label_ShowPicture.setPixmap(png)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    name_picture = 0
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "交通灯识别平台"))
      #  self.label_ShowPicture.setText(_translate("MainWindow", "图片展示区"))
        self.pushButton_select_pcture.setText(_translate("MainWindow", "选择图片"))
        self.pushButton_shibie.setText(_translate("MainWindow", "开始识别"))
        self.label.setText(_translate("MainWindow", "图像识别结果为:"))
       # self.label_2.setText("你点击了按钮")



    image=None

    #事件函数
    def pushButton_select_pcture_click(self):
        filename = QFileDialog.getOpenFileName(None, 'Open file', 'C:/Users/Desktop/testpicture/')
        # 设置标签的图片
        src0 = cv.imread(filename[0])
        resized0 = cv.resize(src0, (1280, 720), interpolation=cv.INTER_AREA)
        cv.imwrite("C:\\Users\\Administrator\\Desktop\\temp0.jpg", resized0)
        self.label_ShowPicture.setPixmap(QPixmap("C:\\Users\\Administrator\\Desktop\\temp0.jpg"))
        print("filename[0]=",filename[0])
        self.image = Image.open(filename[0])
        #img1 = yolo.detect_image(image)
        #img1.show()
        #filename[0]中放打开图片路径

    def shibie(self):
        print("识别中")
        self.label_2.setText("")
        if self.image==None:
            self.label_2.setText("没有选中待检测的图片")
            #print("没有选择图片")
            return 0
        img1 = yolo.detect_image(self.image)
        #img1.show()
        #self.label_ShowPicture.setPixmap(QPixmap(filename[0]))
        #self.label_ShowPicture.setPixmap(QPixmap(""))#清除图片
        #img2 = np.array(img1)
        #self.label_ShowPicture.setPixmap(img2)
        #path = "C:\\Users\\Administrator\\Desktop\\testpicture\\1.jpg"
        #image1024 = Image.open(path)
        #pilimg = Image.fromarray(img1)
        if yolo.boxes_num != 0:
            #self.name_picture=self.name_picture+1
            #img1.save('C:\\Users\\Administrator\\Desktop\\testpicture\\output\\result_%d.jpg',self.name_picture)
            img1.save('C:\\Users\\Administrator\\Desktop\\temp0.jpg')
            cv.waitKey(10)
            src = cv.imread('C:\\Users\\Administrator\\Desktop\\temp0.jpg')
            resized = cv.resize(src, (1280,720), interpolation=cv.INTER_AREA)
            cv.imwrite("C:\\Users\\Administrator\\Desktop\\temp1.jpg", resized)
            cv.waitKey(10)
            path = "C:\\Users\\Administrator\\Desktop\\temp1.jpg"
            self.label_ShowPicture.setPixmap(QPixmap(path))

        #清空之前显示的结果
        self.label_2.setText("")
        self.lable_3.setText("")
        self.label_4.setText("")
        if yolo.boxes_num != 0:
            print(yolo.target_type_list)
            self.label_2.setText(yolo.target_type_list[0])
            if yolo.boxes_num >= 2:
                self.lable_3.setText(yolo.target_type_list[1])
            if yolo.boxes_num >= 3:
                self.label_4.setText(yolo.target_type_list[2])
            yolo.target_type_list.clear()#清空结果列表
        else:
            self.label_2.setText("没有检测出目标")

# def detect_image212():
#     yolo = YOLO()
#     images = Image.open("2.jpg")
#     result = yolo.detect_image(images)
#     yolo.close_session()
#     result.show()

if __name__ == "__main__":
    parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS)
    parser.add_argument(
        '--model', type=str,
        help='path to model weight file, default ' + YOLO.get_defaults("model_path")
    )
    parser.add_argument(
        '--anchors', type=str,
        help='path to anchor definitions, default ' + YOLO.get_defaults("anchors_path")
    )
    parser.add_argument(
        '--classes', type=str,
        help='path to class definitions, default ' + YOLO.get_defaults("classes_path")
    )
    parser.add_argument(
        '--gpu_num', type=int,
        help='Number of GPU to use, default ' + str(YOLO.get_defaults("gpu_num"))
    )
    parser.add_argument(
        '--image', default=True, action="store_true",#修改这里参数可以,切换是检测图片还是视频 False
        help='Image detection mode, will ignore all positional arguments'
    )
    parser.add_argument(
        "--input", nargs='?', type=str,required=False,default='./path2your_video',
        help = "Video input path"
    )
    parser.add_argument(
        "--output", nargs='?', type=str, default="",
        help = "[Optional] Video output path"
    )
    FLAGS = parser.parse_args()
    print("FLAGS=",FLAGS)
    if FLAGS.image:
        print("Image detection mode")
        yolo = YOLO()
        #detect_img1(YOLO(**vars(FLAGS)))

    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

有兴趣的可以关注我的头条号,里面会有一些完整的工程源码,包含自动驾驶、图像识别、多目标跟踪、人脸识别方面的源码。

本文标签: 交通灯识别系统Yolo