DeepSort行人车辆识别系统(实现目标检测+跟踪+统计)

本文主要是介绍DeepSort行人车辆识别系统(实现目标检测+跟踪+统计),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1、前言
  • 2、源项目实现功能
  • 3、运行环境
  • 4、如何运行
  • 5、运行结果
  • 6、遇到问题
  • 7、使用框架
  • 8、目标检测系列文章

1、前言

1、本文基于YOLOv5+DeepSort的行人车辆的检测,跟踪和计数。

2、该项目是基于github的黄老师傅,黄老师傅的项目输入视频后,直接当场利用cv2.imshow(),查看识别的结果, 无法当场保存检测完视频,而且无法在服务器上跑,本文实现保存视频的结果已经命令行修改视频。

2、源项目实现功能

  1. 实现了 出/入 分别计数。
  2. 显示检测类别。
  3. 默认是 南/北 方向检测,若要检测不同位置和方向,可在 main.py 文件第13行和21行,修改2个polygon的点。
  4. 默认检测类别:行人、自行车、小汽车、摩托车、公交车、卡车。
  5. 检测类别可在 detector.py 文件第60行修改。

本项目实现功能

  1. 保存识别视频
  2. 提供命令行修改视频

3、运行环境

  1. python 3.6+,pip 20+
  2. pip install -r requirements.txt

4、如何运行

  1. 下载代码

    git clone https://github.com/wisdom-zhe/yolov5-deepsort-counting.git
    

    因此repo包含weights及mp4等文件,若 git clone 速度慢,直接点击这里下载zip文件

  2. 进入目录

    cd yolov5-deepsort-counting
    
  3. 创建 python 虚拟环境

    python3 -m venv venv
    
  4. 激活虚拟环境

    source venv/bin/activate
    
  5. 升级pip

    python -m pip install --upgrade pip
    
  6. 安装pytorch

    根据你的操作系统、安装工具以及CUDA版本,在 https://pytorch.org/get-started/locally/ 找到对应的安装命令。我的环境是 ubuntu 18.04.5、pip、CUDA 11.0。

    $ pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio===0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
    
  7. 安装软件包

    $ pip install -r requirements.txt
    
  8. 在 detect-car.py 文件中第262行,设置要检测的视频文件路径,默认为default= ‘./video/test.mp4’

    140MB的测试视频可以在这里下载:https://pan.baidu.com/s/1qHNGGpX1QD6zHyNTqWvg1w 提取码: 8ufq

    parser.add_argument('--input_video_path', type=str, default='./video/test02.mp4',help='source video path.')
    
  9. 运行程序

    # 本项目运行方式
    python detect-car.py
    # 黄老师傅运行方式
    python main.py
    

5、运行结果

在这里插入图片描述

6、遇到问题

问题:视频并未出现两条撞线。
原因:在图片拼接时候,大小不一致。
即cv2.add图像运算方式需要输出的图像–必须与输入的图像具有相同的大小、类型和通道数。即两张图片大小一致。

import numpy as np
import cv2# cv2.add图像运算方式需要输出的图像–必须与输入的图像具有相同的大小、类型和通道数。即两张图片大小一致。
# 查看大小:image.shape
# 背景图
mask_image_temp = np.zeros((1080, 1920), dtype = np.uint8)# 初始化2个撞线polygon
list_pts_blue = [[204, 305], [227, 431], [605, 522], [1101, 464], [1900, 601], [1902, 495], [1125, 379], [604, 437],[299, 375], [267, 289]]
ndarray_pts_blue = np.array(list_pts_blue, np.int32)
polygon_blue_value_1 = cv2.fillPoly(mask_image_temp, [ndarray_pts_blue], color = 1)
polygon_blue_value_1 = polygon_blue_value_1[:, :, np.newaxis]
polygon_mask_blue_and_yellow = cv2.resize(polygon_blue_value_1, (960, 540))# 蓝 色盘 b,g,r
blue_color_plate = [255, 0, 0]
# 蓝 polygon图片
blue_image = np.array(polygon_blue_value_1 * blue_color_plate, np.uint8)
blue_image=cv2.resize(blue_image,(960,540))# 输出背景图片形状
print(f'blue_image_shape:{blue_image.shape}')
# 读取图片
output_image_frame = cv2.imread('./5.jpg')
print(f'output_image_frame_shape:{output_image_frame.shape}')
output_image_frame=cv2.resize(output_image_frame,(960,540))
print(f'output_image_frame_960_540:{output_image_frame.shape}')output_image_frame = cv2.add(output_image_frame, blue_image)text_draw='down---up'
draw_text_postion = (int(960 * 0.01), int(540 * 0.05))
font_draw_number = cv2.FONT_HERSHEY_SIMPLEX
output_image_frame = cv2.putText(img = output_image_frame, text = text_draw,org = draw_text_postion,fontFace = font_draw_number,fontScale = 1, color = (255, 255, 255), thickness = 2)# 显示图像
cv2.imshow('img', output_image_frame)
# cv2.imshow('img', blue_image)
cv2.waitKey(0)
cv2.destroyAllWindows()'''
输出:
blue_image_shape:(540, 960, 3)
output_image_frame_shape:(480, 640, 3)
output_image_frame_960_540:(540, 960, 3)
'''

7、使用框架

  • https://github.com/Sharpiless/Yolov5-deepsort-inference
  • https://github.com/ultralytics/yolov5/
  • https://github.com/ZQPei/deep_sort_pytorch
  • 黄老师傅

8、目标检测系列文章

  1. YOLOv5s网络模型讲解(一看就会)
  2. 生活垃圾数据集(YOLO版)
  3. YOLOv5如何训练自己的数据集
  4. 双向控制舵机(树莓派版)
  5. 树莓派部署YOLOv5目标检测(详细篇)
  6. YOLO_Tracking 实践 (环境搭建 & 案例测试)
  7. 目标检测:数据集划分 & XML数据集转YOLO标签
  8. YOLOv5改进–轻量化YOLOv5s模型

这篇关于DeepSort行人车辆识别系统(实现目标检测+跟踪+统计)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/882261

相关文章

hdu1496(用hash思想统计数目)

作为一个刚学hash的孩子,感觉这道题目很不错,灵活的运用的数组的下标。 解题步骤:如果用常规方法解,那么时间复杂度为O(n^4),肯定会超时,然后参考了网上的解题方法,将等式分成两个部分,a*x1^2+b*x2^2和c*x3^2+d*x4^2, 各自作为数组的下标,如果两部分相加为0,则满足等式; 代码如下: #include<iostream>#include<algorithm

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

hdu4267区间统计

题意:给一些数,有两种操作,一种是在[a,b] 区间内,对(i - a)% k == 0 的加value,另一种操作是询问某个位置的值。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import

hdu4417区间统计

给你一个数列{An},然后有m次查询,每次查询一段区间 [l,r] <= h 的值的个数。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamRead

hdu3333区间统计

题目大意:求一个区间内不重复数字的和,例如1 1 1 3,区间[1,4]的和为4。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |