基于Yolov5的车辆行人识别和计数系统

基于Yolov5的车辆行人识别和计数系统

ea4e446d5eae488b8e6158b23eaeb0a8.jpeg

基本功能实现如下:
1.实现数据库注册登录,设置超级管理员,可自行注册,修改密码等等。
2.车辆行人识别界面,使用qt设计,个性化风格设置。
3.图片识别。
4.视频识别。
6.摄像头识别。
7.对车辆和行人目标跟踪。
8.对车辆和行人进行计数。
9.行人车辆数据集。
10.数据可标注,预处理,模型选择和配置,评估和调优都实现了。
11.可对保存结果进行保存,显示识别类别和数量及个体,对识别对象进行置信度分析,显示物体具体位置。

a588865ef6e74ecda00f027f8771d286.jpeg

目标

本项目旨在开发一个综合性的车辆行人识别和计数系统,能够实现从用户注册登录到目标检测、计数以及结果保存的一系列功能。系统采用YOLOv5作为核心检测算法,并使用Qt进行界面设计,提供了丰富的交互体验。

6e4133a4c741409a998666c686fe6daf.jpeg

技术栈

  • 深度学习框架:YOLOv5
  • 图像处理库:OpenCV
  • 前端界面设计:Qt
  • 数据库管理:SQLite 或其他关系型数据库
  • 编程语言:Python 和 C++
  • 硬件加速:GPU(如果可用)

6b86c33f081b4ea1b892626137a00af5.jpeg

功能特点

  1. 数据库注册登录:实现用户注册、登录、修改密码等功能。
  2. 个性化界面设计:使用Qt设计具有个性化风格的用户界面。
  3. 图片识别:支持对静态图片中的车辆和行人进行识别。
  4. 视频识别:支持对视频文件中的车辆和行人进行识别。
  5. 摄像头识别:支持实时摄像头输入流中的车辆和行人识别。
  6. 目标跟踪:对识别到的车辆和行人进行目标跟踪。
  7. 计数功能:对车辆和行人数目进行计数。
  8. 数据集管理:提供行人车辆数据集,并支持数据标注、预处理等功能。
  9. 模型选择与配置:支持模型的选择、配置、评估与调优。
  10. 结果保存与显示:保存识别结果,并显示识别类别、数量及置信度分析。

实施步骤

  1. 环境搭建:安装YOLOv5、OpenCV、Qt等所需库。
  2. 数据库设计:设计并实现用户注册登录功能。
  3. 界面设计:使用Qt设计用户界面。
  4. 目标检测:实现基于YOLOv5的车辆行人检测。
  5. 目标跟踪:实现目标跟踪功能。
  6. 计数功能:实现对车辆和行人的计数。
  7. 数据集管理:提供数据标注、预处理等功能。
  8. 结果保存与显示:保存识别结果,并在界面上显示。

关键代码示例

1. 数据库注册登录功能

假设使用SQLite作为数据库,下面是一个简单的Python示例:

1import sqlite3
2
3def create_table():
4    conn = sqlite3.connect('users.db')
5    c = conn.cursor()
6    c.execute('''CREATE TABLE IF NOT EXISTS users
7                 (id INTEGER PRIMARY KEY AUTOINCREMENT,
8                  username TEXT UNIQUE NOT NULL,
9                  password TEXT NOT NULL)''')
10    conn.commit()
11    conn.close()
12
13def register_user(username, password):
14    conn = sqlite3.connect('users.db')
15    c = conn.cursor()
16    try:
17        c.execute("INSERT INTO users (username, password) VALUES (?, ?)", (username, password))
18        conn.commit()
19        return True
20    except sqlite3.IntegrityError:
21        return False
22    finally:
23        conn.close()
24
25def login_user(username, password):
26    conn = sqlite3.connect('users.db')
27    c = conn.cursor()
28    c.execute("SELECT * FROM users WHERE username=? AND password=?", (username, password))
29    result = c.fetchone()
30    conn.close()
31    return result is not None

2. 使用Qt设计界面

下面是一个简单的Qt界面设计示例,用于显示识别结果:

1#include <QApplication>
2#include <QWidget>
3#include <QVBoxLayout>
4#include <QLabel>
5#include <QPushButton>
6#include <QImage>
7#include <QPixmap>
8#include <QFileDialog>
9
10class MainWindow : public QWidget {
11    Q_OBJECT
12
13public:
14    MainWindow(QWidget *parent = nullptr) : QWidget(parent) {
15        QVBoxLayout *layout = new QVBoxLayout(this);
16
17        QLabel *titleLabel = new QLabel("车辆行人识别系统", this);
18        titleLabel->setAlignment(Qt::AlignCenter);
19        layout->addWidget(titleLabel);
20
21        QLabel *imageLabel = new QLabel(this);
22        layout->addWidget(imageLabel);
23
24        QPushButton *loadImageButton = new QPushButton("选择图片", this);
25        connect(loadImageButton, &QPushButton::clicked, this, &MainWindow::onLoadImage);
26        layout->addWidget(loadImageButton);
27
28        setLayout(layout);
29    }
30
31private slots:
32    void onLoadImage() {
33        QString fileName = QFileDialog::getOpenFileName(this, "选择图片", "", "Images (*.png *.jpg)");
34        if (!fileName.isEmpty()) {
35            QImage image(fileName);
36            if (!image.isNull()) {
37                QLabel *imageLabel = findChild<QLabel*>("imageLabel");
38                QPixmap pixmap = QPixmap::fromImage(image);
39                imageLabel->setPixmap(pixmap.scaled(imageLabel->size(), Qt::KeepAspectRatio));
40            }
41        }
42    }
43};
44
45int main(int argc, char *argv[]) {
46    QApplication app(argc, argv);
47
48    MainWindow mainWindow;
49    mainWindow.show();
50
51    return app.exec();
52}
53
54#include "main.moc"

3. 图片识别功能

下面是一个简单的Python脚本,用于使用YOLOv5进行图片识别:

1import cv2
2import torch
3
4# 加载YOLOv5模型
5model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
6
7def detect_objects(image_path):
8    # 读取图片
9    img = cv2.imread(image_path)
10
11    # 使用YOLOv5进行检测
12    results = model(img)
13
14    # 获取检测结果
15    labels, coords = results.xyxyn[0][:, -1].numpy(), results.xyxyn[0][:, :-1].numpy()
16
17    # 在图片上绘制边界框
18    for label, coord in zip(labels, coords):
19        l = int(label)
20        x1, y1, x2, y2 = coord
21        cv2.rectangle(img, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)
22
23    # 显示结果
24    cv2.imshow('Detection', img)
25    cv2.waitKey(0)
26    cv2.destroyAllWindows()
27
28# 使用示例
29detect_objects('path/to/image.jpg')

4. 视频识别功能

f2f09156fba744fd9446fd795382157e.jpeg

使用YOLOv5进行视频识别的Python脚本:

1import cv2
2import torch
3
4# 加载YOLOv5模型
5model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
6
7def detect_objects_in_video(video_path):
8    cap = cv2.VideoCapture(video_path)
9
10    while True:
11        ret, frame = cap.read()
12        if not ret:
13            break
14
15        # 使用YOLOv5进行检测
16        results = model(frame)
17
18        # 获取检测结果
19        labels, coords = results.xyxyn[0][:, -1].numpy(), results.xyxyn[0][:, :-1].numpy()
20
21        # 在图片上绘制边界框
22        for label, coord in zip(labels, coords):
23            l = int(label)
24            x1, y1, x2, y2 = coord
25            cv2.rectangle(frame, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)
26
27        # 显示结果
28        cv2.imshow('Detection', frame)
29        if cv2.waitKey(1) & 0xFF == ord('q'):
30            break
31
32    cap.release()
33    cv2.destroyAllWindows()
34
35# 使用示例
36detect_objects_in_video('path/to/video.mp4')

5. 摄像头识别功能

使用YOLOv5进行摄像头识别的Python脚本:

fcaf5305dbe741369083d373f1afeaa7.jpeg

1import cv2
2import torch
3
4# 加载YOLOv5模型
5model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
6
7def detect_objects_from_camera():
8    cap = cv2.VideoCapture(0)
9
10    while True:
11        ret, frame = cap.read()
12        if not ret:
13            break
14
15        # 使用YOLOv5进行检测
16        results = model(frame)
17
18        # 获取检测结果
19        labels, coords = results.xyxyn[0][:, -1].numpy(), results.xyxyn[0][:, :-1].numpy()
20
21        # 在图片上绘制边界框
22        for label, coord in zip(labels, coords):
23            l = int(label)
24            x1, y1, x2, y2 = coord
25            cv2.rectangle(frame, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)
26
27        # 显示结果
28        cv2.imshow('Detection', frame)
29        if cv2.waitKey(1) & 0xFF == ord('q'):
30            break
31
32    cap.release()
33    cv2.destroyAllWindows()
34
35# 使用示例
36detect_objects_from_camera()

总结

本项目通过结合YOLOv5、OpenCV和Qt等技术,实现了一个功能全面的车辆行人识别和计数系统。通过上述代码示例,你可以了解如何实现数据库注册登录、界面设计、目标检测、目标跟踪、计数等功能。

 b8df17587d1a40718048b275e7d4a8a3.jpeg

 

 

 

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值