当前位置: 首页 > news >正文

计算机视觉:python车辆行人检测与跟踪系统 YOLO模型 SORT算法 PyQt5界面 目标检测+目标跟踪 深度学习 计算机✅

博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立软件开发工作室,专注于计算机相关专业项目实战6年之久,累计开发项目作品上万套。凭借丰富的经验与专业实力,已帮助成千上万的学生顺利毕业,选择我们,就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅

点击查看作者主页,了解更多项目!

🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅

1、毕业设计:2026年计算机专业毕业设计选题汇总(建议收藏)✅

2、最全计算机专业毕业设计选题大全(建议收藏)✅

1、项目介绍

技术栈:
Python语言、YOLO模型、SORT算法、PyQt5界面、目标检测、目标跟踪

2、项目界面

(1)车辆识别检测跟踪

在这里插入图片描述

(2)车辆+行人识别检测跟踪

在这里插入图片描述

(3)车辆识别检测跟踪
在这里插入图片描述

(4)摄像头—识别检测跟踪

在这里插入图片描述

(5)行人识别检测跟踪
在这里插入图片描述

(6)系统界面

在这里插入图片描述

3、项目说明

摘要:

本文详细介绍如何利用深度学习中的YOLO及SORT算法实现车辆、行人等多目标的实时检测和跟踪,并利用PyQt5设计了清新简约的系统UI界面,在界面中既可选择自己的视频、图片文件进行检测跟踪,也可以通过电脑自带的摄像头进行实时处理,可选择训练好的YOLO v3/v4等模型参数。该系统界面优美、检测精度高,功能强大,设计有多目标实时检测、跟踪、计数功能,可自由选择感兴趣的跟踪目标。

4、核心代码

# -*- coding: utf-8 -*-
# 本程序用于调用摄像头进行车辆行人等多目标检测跟踪import warnings
import os
import time
from collections import deque
import cv2
import numpy as np
from sort import Sort
warnings.filterwarnings('ignore')if __name__ == '__main__':CAM_NUM = 0  # 摄像头序号if_save = 1  # 是否需要保存录制的视频,1表示保存filter_confidence = 0.5  # 用于筛除置信度过低的识别结果threshold_prob = 0.3  # 用于NMS去除重复的锚框model_path = "./yolo-obj"  # 模型文件的目录# 载入数据集标签labelsPath = os.path.sep.join([model_path, "coco.names"])LABELS = open(labelsPath).read().strip().split("\n")# 载入模型参数文件及配置文件weightsPath = os.path.sep.join([model_path, "yolov4-tiny.weights"])configPath = os.path.sep.join([model_path, "yolov4-tiny.cfg"])# 初始化用于标记框的颜色np.random.seed(42)COLORS = np.random.randint(0, 255, size=(200, 3), dtype="uint8")# 用于展示目标移动路径pts = [deque(maxlen=30) for _ in range(9999)]# 从配置和参数文件中载入模型print("[INFO] 正在载入模型...")net = cv2.dnn.readNetFromDarknet(configPath, weightsPath)ln = net.getLayerNames()ln = [ln[i[0] - 1] for i in net.getUnconnectedOutLayers()]# 初始化视频流vs = cv2.VideoCapture(CAM_NUM)(W, H) = (None, None)frameIndex = 0ret, frame = vs.read()vw = frame.shape[1]vh = frame.shape[0]print("[INFO] 视频尺寸:{} * {}".format(vw, vh))if if_save:fourcc = cv2.VideoWriter_fourcc(*'XVID')output_video = cv2.VideoWriter("./output/captured.avi", fourcc, 20.0, (vw, vh))  # 处理后的视频对象else:output_video = Nonetracker = Sort()  # 实例化追踪器对象# 遍历视频帧进行检测while True:# 逐帧读取画面(grabbed, frame) = vs.read()# 获取画面长宽if W is None or H is None:(H, W) = frame.shape[:2]# 将一帧画面读入网络blob = cv2.dnn.blobFromImage(frame, 1 / 255.0, (416, 416), swapRB=True, crop=False)net.setInput(blob)start = time.time()layerOutputs = net.forward(ln)end = time.time()boxes = []  # 用于检测框坐标confidences = []  # 用于存放置信度值classIDs = []  # 用于识别的类别序号# 逐层遍历网络获取输出for output in layerOutputs:# loop over each of the detectionsfor detection in output:# extract the class ID and confidence (i.e., probability)# of the current object detectionscores = detection[5:]classID = np.argmax(scores)confidence = scores[classID]# 过滤低置信度值的检测结果if confidence > filter_confidence:box = detection[0:4] * np.array([W, H, W, H])(centerX, centerY, width, height) = box.astype("int")# 转换标记框x = int(centerX - (width / 2))y = int(centerY - (height / 2))# 更新标记框、置信度值、类别列表boxes.append([x, y, int(width), int(height)])confidences.append(float(confidence))classIDs.append(classID)# 使用NMS去除重复的标记框idxs = cv2.dnn.NMSBoxes(boxes, confidences, filter_confidence, threshold_prob)dets = []if len(idxs) > 0:# 遍历索引得到检测结果for i in idxs.flatten():(x, y) = (boxes[i][0], boxes[i][1])(w, h) = (boxes[i][2], boxes[i][3])dets.append([x, y, x + w, y + h, confidences[i], classIDs[i]])np.set_printoptions(formatter={'float': lambda x: "{0:0.3f}".format(x)})dets = np.asarray(dets)# 使用sort算法,开始进行追踪tracks = tracker.update(dets)boxes = []  # 存放追踪到的标记框indexIDs = []cls_IDs = []c = []for track in tracks:boxes.append([track[0], track[1], track[2], track[3]])indexIDs.append(int(track[4]))cls_IDs.append(int(track[5]))if len(boxes) > 0:i = int(0)for box in boxes:  # 遍历所有标记框(x, y) = (int(box[0]), int(box[1]))(w, h) = (int(box[2]), int(box[3]))# 在图像上标记目标框color = [int(c) for c in COLORS[indexIDs[i] % len(COLORS)]]cv2.rectangle(frame, (x, y), (w, h), color, 4)center = (int(((box[0]) + (box[2])) / 2), int(((box[1]) + (box[3])) / 2))pts[indexIDs[i]].append(center)thickness = 5# 显示某个对象标记框的中心cv2.circle(frame, center, 1, color, thickness)for j in range(1, len(pts[indexIDs[i]])):if pts[indexIDs[i]][j - 1] is None or pts[indexIDs[i]][j] is None:continuethickness = int(np.sqrt(64 / float(j + 1)) * 2)cv2.line(frame, (pts[indexIDs[i]][j - 1]), (pts[indexIDs[i]][j]), color, thickness)# 标记跟踪到的目标和数目text = "{}-{}".format(LABELS[int(cls_IDs[i])], indexIDs[i])cv2.putText(frame, text, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 1, color, 3)i += 1# 实时显示检测画面cv2.imshow('Stream', frame)if if_save:output_video.write(frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakprint("FPS:{}".format(int(0.6/(end-start))))frameIndex += 1print("[INFO] 运行结束...")if if_save:output_video.release()vs.release()exit()

🍅✌感兴趣的可以先收藏起来,点赞关注不迷路,想学习更多项目可以查看主页,大家在毕设选题,项目编程以及论文编写等相关问题都可以给我留言咨询,希望可以帮助同学们顺利毕业!🍅✌

5、源码获取方式

🍅由于篇幅限制,获取完整文章或源码、代做项目的,拉到文章底部即可看到个人联系方式。🍅

点赞、收藏、关注,不迷路,下方查看👇🏻获取联系方式👇🏻

http://www.dtcms.com/a/568540.html

相关文章:

  • 提高肠氧饱和度测量精度的新技术评估
  • 【数据集+源码+文章】基于yolov8+streamlit的12种水果品质、成熟度检测系统
  • Camera参数(3A)
  • 【C++:搜索二叉树】二叉搜索树从理论到实战完全解读:原理、两种场景下的实现
  • 高性能网络编程实战:用Tokio构建自定义协议服务器
  • H265 vs AV1 vs H266帧内块拷贝差异
  • CSS 中 `data-status` 的使用详解
  • 舟山企业网站建设公司微信小程序麻将辅助免费
  • VMware替代 | 详解ZStack ZSphere产品化运维六大特性
  • 缓存击穿,缓存穿透,缓存雪崩的原因和解决方案(或者说使用缓存的过程中有没有遇到什么问题,怎么解决的)
  • 关于数据包分片总长度字段的计算和MF标志位的判断
  • 手机网站建站流程网站建设卩金手指科杰
  • BuildingAI 用户信息弹出页面PRD
  • ​Oracle RAC灾备环境UNDO表空间管理终极指南:解决备库修改难题与性能优化实战​
  • 《uni-app跨平台开发完全指南》- 02 - 项目结构与配置文件详解
  • 【数据分析】基于R语言的废水微生物抗性分析与负二项回归模型建模
  • 深圳专业网站公司注册查询网站
  • k8s --- resource 资源
  • 神经网络之反射变换
  • k8s——pod详解2
  • 四层神经网络案例(含反向传播)
  • MySQL初阶学习日记(1)--- 数据库的基本操作
  • 【k8s】k8s的网络底层原理
  • 一种创新的集成学习模型:结合双通路神经网络与逻辑回归的糖尿病患病概率预测
  • 神经网络之线性变换
  • Fastlane 结合 开心上架(Appuploader)命令行版本实现跨平台上传发布 iOS App 免 Mac 自动化上架实战全解析
  • 大连网站建设平台宁夏考试教育网站
  • 微信网站对接室内设计师报考官网
  • Ceph常用的三种存储操作
  • 【前端】从零开始搭建现代前端框架:React 19、Vite、Tailwind CSS、ShadCN UI 完整实战教程-第1章:项目概述与技术栈介绍