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模型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/521251.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Django之五种中间件定义类型—process_request、process_view、process_response.......

目录 1. 前言 2. 基础中间件 3. 如何自定义中间件 4. 五种自定义中间件类型 4.1 process_request 4.2 process_view 4.3 process_response 4.4 process_exception 4.5 process_template_response 5. 最后 1. 前言 哈喽,大家好,我是小K,今天咋们…

计算机网络 实验指导 实验12

路由信息协议(RIP)实验 1.实验拓扑图 名称接口IP地址网关Switch AF0/1192.168.1.1/24F0/2172.1.1.1/24Switch BF0/1192.168.1.2/24F0/2172.2.2.1/24PC1172.1.1.2/24172.1.1.1PC2172.1.1.3/24172.1.1.1PC3172.2.2.2/24172.2.2.1PC4172.2.2.3/24172.2.2.1…

FPGA笔试面试题目记录

1 logic utilization 题目:Rank the following operations from lowest utilization to highest. Assume that all variables are 32-bit integers,that the operations are implemented using LUTs ony and that the synthesiser will produce an optimal digital…

【微信小程序】【小程序样式加载不出来】

微信小程序配置sass 第一步:找配置文件 在项目中找到 project.config.json文件,在setting属性中添加 useCompilerPlugins属性,值为sass即可,若是 less,将数组里面的值改为less即可 "useCompilerPlugins": ["sas…

Flutter 解决NestedScrollView与TabBar双列表滚动位置同步问题

文章目录 前言一、需要实现的效果如下二、flutter实现代码如下:总结 前言 最近写flutter项目,遇到NestedScrollView与TabBar双列表滚动位置同步问题,下面是解决方案,希望帮助到大家。 一、需要实现的效果如下 1、UI图&#xff1…

Quantinuum与微软携手突破:开创容错量子计算新纪元

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

高精度端到端在线校准环视相机和LIDAR(精度0.2度内!无需训练数据)

高精度端到端在线校准环视相机和LIDAR(精度0.2度内!无需训练数据) 附赠自动驾驶学习资料和量产经验:链接 写在前面 在自动驾驶车辆的使用寿命内,传感器外参校准会因振动、温度和碰撞等环境因素而发生变化。即使是看似…

闪站侠洗护管理系统,洗衣洗鞋小程序软件定制,干洗连锁店软件系统搭建;

闪站侠洗护管理系统,洗衣洗鞋小程序软件定制,干洗连锁店软件系统搭建; 为了让每一个洗衣洗鞋工厂与门店的连接更加高效便捷,送洗流程更加简单轻松,拽牛科技倾心打造洗衣洗鞋管理软件。我们的目标是通过高效和优质的服务…

Rust vs C++:2024,谁更懂错误处理?

讲动人的故事,写懂人的代码 「席双嘉,听说你的C++项目又因为忘了检查返回值导致内存泄漏,又加班了?」 周五中午,在国内某科技巨头熙熙攘攘的员工餐厅,贾克强半开玩笑地戳了戳坐在隔壁的席双嘉,眼神中满是戏谑。 贾克强,一个热衷于Rust的程序员,总是乐于挑战和探索新…

域名应该如何实名?域名应该如何备案?域名如何解析到服务器

大家好欢迎来到易极赞,今天我们来跟大家聊一下“域名应该如何实名以及备案”这个话题。 域名实名认证是验证域名所有者身份的过程,以确保域名的合法性,通常需要登录到域名服务商后台,进行域名的注册,注册后创建域名模…

【PyQt5篇】多线程

文章目录 &#x1f354;使用QtDesigner进行设计&#x1f6f8;实现多线程&#x1f339;效果&#x1f50e;原因 &#x1f354;使用QtDesigner进行设计 对应的代码btn.ui <?xml version"1.0" encoding"UTF-8"?> <ui version"4.0">&l…

虚拟机VMware启动虚拟机刚启动有网之后没网

虚拟机VMware启动虚拟机刚启动有网之后没网 害&#xff0c;感觉这种调试的事情是真的浪费时间 如题&#xff0c;对于这种情况&#xff0c;一句话&#xff0c;就是你本地的DHCP虚拟机服务以及NAT网络服务没启动 本机windowR,输入services.msc 进入服务 然后 喏&#xff0c;…

迷茫下是自我提升

长夜漫漫&#xff0c;无心睡眠。心中所想&#xff0c;心中所感&#xff0c;忧愁当前&#xff0c;就执笔而下&#xff0c;写下这篇文章。 回忆过往 回想当初为啥学前端&#xff0c;走前端这条路&#xff0c;学校要求嘛&#xff0c;兴趣爱好嘛&#xff0c;还是为了钱。 时间带着…

机器学习周报第36期

目录 一、文献阅读1.1 摘要1.2 论文背景1.3 论文背景1.4 视频处理特征传播1.5 论文方法 二、相关代码 一、文献阅读 论文标题&#xff1a;Object Detection in Videos by High Quality Object Linking 1.1 摘要 与静态图像中的目标检测相比&#xff0c;视频中的目标检测由于…

瑞_Redis_商户查询缓存_添加Redis缓存缓存更新策略

文章目录 项目介绍1 短信登录2 商户查询缓存2.1 什么是缓存2.1.1 缓存的应用场景2.1.2 为什么要使用缓存2.1.3 Web应用中缓存的作用2.1.4 Web应用中缓存的成本 2.2 添加Redis缓存2.2.1 背景2.2.2 缓存模型和思路2.2.3 代码实现2.2.4 测试附&#xff1a;IDEA控制台输出自动换行设…

专注项目管理的Mac工具 - Project Office Pro 最新版

Project Office Pro for Mac是一款功能强大的项目管理软件&#xff0c;旨在帮助用户更好地管理和跟踪项目进展&#xff0c;提高工作效率和质量。以下是该软件的主要功能介绍&#xff1a; 项目创建与编辑&#xff1a;用户可以根据自己的需求自定义项目计划&#xff0c;包括设置…

如何在 Ubuntu 上安装和配置 Tomcat 服务器?

简介&#xff1a;最近有粉丝朋友在问如何在 Ubuntu 上安装和配置 Tomcat 服务器&#xff1f;今天特地写这篇文章进行解答&#xff0c;希望能够帮助到大家。 文章目录 Ubuntu上安装和配置Tomcat的详细步骤Tomcat在Linux环境下的安装与配置一、下载并上传Tomcat压缩包二、启动To…

《图解Vue3.0》- 调试

如何对vue3项目进行调试 调试是开发过程中必备的一项技能&#xff0c;掌握了这项技能&#xff0c;可以很好的定义bug所在。一般在开发vue3项目时&#xff0c;有三种方式。 代码中添加debugger;使用浏览器调试&#xff1a;sourcemap需启用vs code 调试&#xff1a;先开启node服…

735.小行星碰撞

题目&#xff1a;给定一个整数数组 asteroids&#xff0c;表示在同一行的小行星。 对于数组中的每一个元素&#xff0c;其绝对值表示小行星的大小&#xff0c;正负表示小行星的移动方向&#xff08;正表示向右移动&#xff0c;负表示向左移动&#xff09;。每一颗小行星以相同…

【智能排班系统】雪花算法生成分布式ID

文章目录 雪花算法介绍起源与命名基本原理与结构优势与特点应用场景 代码实现代码结构自定义机器标识RandomWorkIdChooseLocalRedisWorkIdChooselua脚本 实体类SnowflakeIdInfoWorkCenterInfo 雪花算法类配置类雪花算法工具类 说明 雪花算法介绍 在复杂而庞大的分布式系统中&a…