德国交通灯数据集
图片以及标注好的VOC2007格式的xml文件:
https://download.csdn.net/download/mao_hui_fei/12520548
效果图
标注示意图
原始训练及预测代码
模型下载地址
将模型换到yolo v3 的路径下即可直接识别。
https://download.csdn.net/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_())
有兴趣的可以关注我的头条号,里面会有一些完整的工程源码,包含自动驾驶、图像识别、多目标跟踪、人脸识别方面的源码。
