logo

使用YOLOv5与DeepSORT实现区域入侵检测及鼠标绘制功能

作者:热心市民鹿先生2024.03.14 02:03浏览量:13

简介:本文将指导您如何通过结合YOLOv5目标检测模型和DeepSORT多目标跟踪算法,实现区域入侵检测功能,并允许用户通过鼠标绘制自定义检测区域。

引言

在智能监控系统中,区域入侵检测是一个重要的功能,它能实时检测监控画面中的目标是否进入了预定的禁止区域。为了实现这个功能,我们可以结合目标检测算法(如YOLOv5)和多目标跟踪算法(如DeepSORT)。此外,为了方便用户定义检测区域,我们还将实现鼠标绘制功能。

一、环境准备

首先,确保您已经安装了以下工具和环境:

  • Python 3.x
  • PyTorch
  • OpenCV
  • numpy
  • torchvision
  • yolov5-master(可以从GitHub上下载)

二、YOLOv5模型介绍

YOLOv5是一个高效的目标检测模型,它基于YOLO系列的目标检测算法,具有快速、准确和易于部署的特点。在本项目中,我们将使用预训练的YOLOv5模型来检测监控画面中的目标。

三、DeepSORT算法介绍

DeepSORT是一个多目标跟踪算法,它基于SORT算法,并引入了深度学习特征提取来提高跟踪的准确性和稳定性。DeepSORT算法利用目标的外观信息(通过深度学习模型提取的特征)和运动信息来进行目标跟踪。

四、实现步骤

1. YOLOv5目标检测

首先,使用YOLOv5模型对监控画面进行目标检测。通过加载预训练模型,对每一帧图像进行前向传播,得到目标的边界框、类别和置信度。

2. DeepSORT多目标跟踪

将YOLOv5检测到的目标输入到DeepSORT算法中进行多目标跟踪。DeepSORT算法会根据目标的外观特征和运动信息,将相邻帧中的目标进行匹配,实现多目标跟踪。

3. 区域入侵检测

定义禁止区域,可以通过鼠标绘制或使用预设的矩形区域。在检测到目标后,判断目标是否进入了禁止区域。如果目标进入了禁止区域,则触发报警。

4. 鼠标绘制功能

使用OpenCV提供的鼠标事件处理功能,允许用户通过鼠标在监控画面上绘制矩形区域,作为禁止区域。将绘制的矩形区域坐标保存起来,用于后续的区域入侵检测。

五、代码实现

以下是一个简化的代码示例,演示了如何实现上述功能:

```python
import cv2
import numpy as np
import torch
from models.experimental import attempt_load
from utils.general import non_max_suppression, scale_coordinates
from utils.torch_utils import select_device

加载YOLOv5模型

model = attempt_load(‘yolov5s.pt’, map_location=select_device(‘cpu’))

加载类别标签

with open(‘coco.names’, ‘r’) as f:
classes = [line.strip() for line in f.readlines()]

初始化DeepSORT跟踪器

tracker = DeepSORT()

初始化视频

cap = cv2.VideoCapture(‘video.mp4’)

鼠标绘制禁止区域

drawing = False
rect = []

while cap.isOpened():
ret, frame = cap.read()
if not ret:
break

  1. # YOLOv5目标检测
  2. img = torch.from_numpy(frame).to(device)
  3. img = img.float() / 255.0
  4. pred = model(img)[0]
  5. pred = non_max_suppression(pred, conf_thres=0.5, iou_thres=0.5)
  6. boxes = []
  7. labels = []
  8. confidences = []
  9. for det in pred:
  10. if det is not None and len(det):
  11. det[:, :4] = scale_coordinates(img.shape[2:], det[:, :4], frame.shape).round()
  12. boxes.append(det[:, :4].astype(np.int32))
  13. labels.extend(det[:, -1].astype(np.int32).tolist())
  14. confidences.extend(det[:, 5].tolist())
  15. # DeepSORT多目标跟踪
  16. tracker.update(boxes, labels, confidences, frame)
  17. outputs = tracker.get()
  18. # 绘制跟踪框和禁止区域
  19. for box, label, conf in outputs:
  20. cv2.rectangle(frame, (box[0], box[1

相关文章推荐

发表评论

活动