基于深度学习YOLOv8和YOLOv5车型识别车辆检测系统
文章目录
以下文字及代码仅供参考。

:
网络:深度学习网络 yoloV8和yolov5
软件:Pycharm+Anaconda
环境:python=3.10 PySide6
构建目标:
1引入了SQLite数据库支持用户注册与登录。
2支持图片、视频、实时摄像头以及批量文件上传功能
3可一键切换YOLOv8/v5模型的功能
4支持界面自定义。可自由调整界面的图标、文字等元素。
识别车辆类型:BUS CAR SPORTCAR MIRCROBUS TRUCK SUV JEEP
基于YOLOv8和YOLOv5的车辆类型识别系统:从数据集准备到GUI应用实现
1. 环境配置
安装依赖
确保安装了以下依赖:
pip install ultralytics opencv-python-headless matplotlib PySide6 sqlite3
2. 数据集准备
假设数据集已经按照YOLO格式(即每个图像有一个对应的.txt
文件,其中包含边界框信息)准备好,并且已分为训练集和验证集。创建一个data.yaml
文件来描述数据集路径和类别信息:
train: /path/to/train/images/
val: /path/to/val/images/
nc: 7 # 类别数量
names: ['BUS', 'CAR', 'SPORTCAR', 'MIRCROBUS', 'TRUCK', 'SUV', 'JEEP']
请将路径替换为你的实际数据集路径。
3. 模型配置与训练
加载模型
from ultralytics import YOLO
# 加载YOLOv8n模型
model_v8 = YOLO('yolov8n.yaml')
# 加载YOLOv5n模型
model_v5 = YOLO('yolov5n.yaml')
训练模型
# 开始训练YOLOv8
results_v8 = model_v8.train(
data='/path/to/data.yaml',
epochs=100,
imgsz=640,
batch=16,
patience=50,
lr0=0.01,
lrf=0.1,
optimizer='SGD',
device='0',
workers=8,
verbose=True
)
# 开始训练YOLOv5
results_v5 = model_v5.train(
data='/path/to/data.yaml',
epochs=100,
imgsz=640,
batch=16,
patience=50,
lr0=0.01,
lrf=0.1,
optimizer='SGD',
device='0',
workers=8,
verbose=True
)
4. 推理与可视化
完成训练后,您可以使用模型进行推理,并可视化结果:
def predict_image(model, img_path):
results = model.predict(source=img_path, save=True)
for r in results:
im_array = r.plot()
im = Image.fromarray(im_array[..., ::-1])
return im
img_path = '/path/to/test/image.jpg'
im_v8 = predict_image(model_v8, img_path)
im_v5 = predict_image(model_v5, img_path)
5. 构建GUI应用程序
使用PySide6构建GUI应用程序:
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QLabel, QFileDialog, QComboBox
from PySide6.QtGui import QPixmap
from PySide6.QtCore import Qt
from PIL import Image
import cv2
from ultralytics import YOLO
class VehicleDetectionApp(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("车辆类型识别系统")
self.setGeometry(100, 100, 800, 600)
self.model_v8 = YOLO('yolov8n.yaml')
self.model_v5 = YOLO('yolov5n.yaml')
self.current_model = self.model_v8
self.initUI()
def initUI(self):
self.layout = QVBoxLayout()
self.image_label = QLabel(self)
self.image_label.setAlignment(Qt.AlignCenter)
self.layout.addWidget(self.image_label)
self.load_button = QPushButton("加载图片", self)
self.load_button.clicked.connect(self.load_image)
self.layout.addWidget(self.load_button)
self.model_selector = QComboBox(self)
self.model_selector.addItems(["YOLOv8", "YOLOv5"])
self.model_selector.currentIndexChanged.connect(self.switch_model)
self.layout.addWidget(self.model_selector)
container = QWidget()
container.setLayout(self.layout)
self.setCentralWidget(container)
def load_image(self):
file_dialog = QFileDialog()
file_dialog.setNameFilter("Images (*.png *.jpg *.jpeg)")
if file_dialog.exec():
file_name = file_dialog.selectedFiles()[0]
self.predict_and_display(file_name)
def switch_model(self, index):
if index == 0:
self.current_model = self.model_v8
else:
self.current_model = self.model_v5
def predict_and_display(self, file_name):
results = self.current_model.predict(source=file_name, save=True)
for r in results:
im_array = r.plot()
im = Image.fromarray(im_array[..., ::-1])
pixmap = QPixmap.fromImage(ImageQt.ImageQt(im))
self.image_label.setPixmap(pixmap)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = VehicleDetectionApp()
window.show()
sys.exit(app.exec())
6. 数据库支持
使用SQLite数据库支持用户注册与登录:
import sqlite3
def create_database():
conn = sqlite3.connect('users.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS users
(id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL,
password TEXT NOT NULL)''')
conn.commit()
conn.close()
def register_user(username, password):
conn = sqlite3.connect('users.db')
c = conn.cursor()
c.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, password))
conn.commit()
conn.close()
def login_user(username, password):
conn = sqlite3.connect('users.db')
c = conn.cursor()
c.execute("SELECT * FROM users WHERE username=? AND password=?", (username, password))
user = c.fetchone()
conn.close()
return user is not None
# 示例用法
create_database()
register_user('user1', 'password1')
print(login_user('user1', 'password1')) # 应该返回 True
总结
tongxue,你可长点心把,你也需要,这个作为一个小参考。
根据需要进一步定制和优化各个部分。希望能够帮助同学,构建现基于YOLOv8和YOLOv5的车辆类型识别系统。