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

目标检测、目标跟踪、重识别

文章目录 

  1. 环境
  2. 前言
  3. 项目复现
  4. 特征提取
  5. 工程下载
  6. 参考资料

环境

  • ubuntu 18.04 64位
  • yolov5
  • deepsort
  • fastreid

前言

基于YOLOv5和DeepSort的目标跟踪 介绍过针对行人的检测与跟踪。本文介绍另一个项目,结合 FastReid 来实现行人的检测、跟踪和重识别。作者给出的2个主要实例,也是非常的实用,包括行人流量的统计、人群中特定目标的查找与跟踪。

项目复现

首先,创建个全新的虚拟环境

conda create -n pytorch1.6 python=3.7
conda activate pytorch1.6

然后安装下其它的依赖包

# 如果没有gpu的话,就按照requirements.txt安装即可
pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html
# 编辑requirements.txt,注释掉torch和torchvision
pip install -r requirements.txt
# 使用cython加速
pip install cython
cd fast_reid/fastreid/evaluation/rank_cylib
make all
cd ../../../../

先来跑个行人计数的demo

python person_count.py

如果你在运行过程中出现下面的错误

2021-07-13 14:22:20 [INFO]: Loading weights from ./deep_sort/deep/checkpoint/ckpt.t7... Done!
Traceback (most recent call last):File "person_count.py", line 244, in <module>yolo_reid.deep_sort()File "person_count.py", line 121, in deep_sortbbox_xywh, cls_conf, cls_ids, xy = self.person_detect.detect(video_path, img, ori_img, vid_cap)File "/home/xugaoxiang/Works/Yolov5-Deepsort-Fastreid/person_detect_yolov5.py", line 95, in detectpred = self.model(img, augment=self.augment)[0]File "/home/xugaoxiang/anaconda3/envs/pytorch1.6/lib/python3.7/site-packages/torch/nn/modules/module.py", line 722, in _call_implresult = self.forward(*input, **kwargs)File "/home/xugaoxiang/Works/Yolov5-Deepsort-Fastreid/models/yolo.py", line 111, in forwardreturn self.forward_once(x, profile)  # single-scale inference, trainFile "/home/xugaoxiang/Works/Yolov5-Deepsort-Fastreid/models/yolo.py", line 131, in forward_oncex = m(x)  # run

这个就是模型的问题,建议使用源码中自带的 shell 脚本进行下载

sh weights/download_weights.sh

另外,依赖模块 apex,不可以通过 pip install apex 来安装,否则会报错

 如果安装的 pyyaml 版本较高的话,会出现下面的错误

只需要将 utils/parses.py 中的

self.update(yaml.load(fo.read()))

改为

self.update(yaml.safe_load(fo.read()))

我们来看看这个行人流量统计的基本原理:

首先,作者将 yolov5 的目标检测封装成了一个类 Person_detect,通过它的 detect 方法可以检测到视频中的每一个行人目标

然后,在画面中设定一条基准线,给定线条两端的坐标即可

line = [(0, int(0.48 * ori_img.shape[0])), (int(ori_img.shape[1]), int(0.48 * ori_img.shape[0]))]
cv2.line(ori_img, line[0], line[1], (0, 255, 255), 4)

接着,创建跟踪器,开始对 yolov5 检测出的每一个目标进行跟踪。这里以目标预测框的中心点为基准,下图是它的计算方法

如果前后帧的中心点所连成的直线和预先设定的基准线相交,则判定为越线,但是这里还有个方向的问题,向上还是向下?来看另一张图

作者利用了三角形的正切与反正切原理,使用 math 模块中的 degrees 方法来判断,如果这个角度 >0,说明是向上走,反之则为向下走

def vector_angle(midpoint, previous_midpoint):x = midpoint[0] - previous_midpoint[0]y = midpoint[1] - previous_midpoint[1]return math.degrees(math.atan2(y, x))

看完行人计数的示例,我们再来看看特定目标的重识别示例

python person_search_reid.py

报错了

Fusing layers...
Traceback (most recent call last):File "person_search_reid.py", line 120, in <module>yolo_reid = yolo_reid(cfg, args, path=args.video_path)File "person_search_reid.py", line 35, in __init__self.deepsort = build_tracker(cfg, args.sort, use_cuda=use_cuda)File "/home/xugaoxiang/Works/Yolov5-Deepsort-Fastreid/deep_sort/__init__.py", line 18, in build_trackermax_age=cfg.DEEPSORT.MAX_AGE, n_init=cfg.DEEPSORT.N_INIT, nn_budget=cfg.DEEPSORT.NN_BUDGET, use_cuda=use_cuda)File "/home/xugaoxiang/Works/Yolov5-Deepsort-Fastreid/deep_sort/deep_reid.py", line 29, in __init__self.extractor = Reid_feature()File "./fast_reid/demo/demo.py", line 84, in __init__cfg = setup_cfg(args)File "./fast_reid/demo/demo.py", line 35, in setup_cfgcfg.merge_from_file(args.config_file)File "./fast_reid/fastreid/config/config.py", line 107, in merge_from_filecfg_filename, allow_unsafe=allow_unsafeFile "./fast_reid/fastreid/config/config.py", line 50, in load_yaml_with_basewith PathManager.open(filename, "r") as f:File "./fast_reid/fastreid/utils/file_io.py", line 357, in openpath, mode, buffering=buffering, **kwargsFile "./fast_reid/fastreid/utils/file_io.py", line 251, in _open

然后再次运行脚本 person_search_reid.py,可以得到

可以看到,由于事先已经提了2位行人( a1111111111 和 b222222222222 )的特征,所以,画面中能够识别出这2个人并进行跟踪。默认,特征文件保存在 fast_reid/query 下

如果你也想要制作一个特征文件,可以按照下面的步骤进行

特征提取

首先,需要截取目标人物的图片,存放在某个以特定目标命名的文件夹下,如我这里的 xugaoxiang.com,这样,后面进行识别的时候,就显示 xugaoxiang.com 这个名字了。把这个文件夹拷贝到 fast_reid/query 目录下,目录结构如下

(pytorch1.6) xugaoxiang@1070Ti:~/Works/Yolov5-Deepsort-Fastreid/fast_reid/query$ tree
.
├── names.npy
├── query_features.npy
└── xugaoxiang.com├── 10.png├── 11.png├── 12.png├── 13.png├── 14.png├── 15.png├── 1.png├── 2.png├── 3.png├── 4.png├── 5.png├── 6.png├── 7.png├── 8.png└── 9.png

接下来执行

cd fast_reid/demo
python person_bank.py

执行完毕后,query 目录下的 query_features.npy 和 names.npy 就被更新了

最后,找个包含目标的视频测试下效果

QQ767172261

 

相关文章:

目标检测、目标跟踪、重识别

文章目录 环境前言项目复现特征提取工程下载参考资料 环境 ubuntu 18.04 64位yolov5deepsortfastreid 前言 基于YOLOv5和DeepSort的目标跟踪 介绍过针对行人的检测与跟踪。本文介绍另一个项目&#xff0c;结合 FastReid 来实现行人的检测、跟踪和重识别。作者给出的2个主…...

高防IP防御效果怎么样,和VPN有区别吗

高防IP主要是用于防御网络攻击&#xff0c;可以抵御各种类型的DDoS攻击&#xff0c;隐藏源IP地址&#xff0c;提高网络安全性和用户体验。主要目的是解决外部网络攻击问题&#xff0c;保护网络安全&#xff0c;避免因攻击而导致的业务中断和数据泄露等问题。 而VPN则是一种可以…...

探秘MSSQL存储过程:功能、用法及实战案例

在现代软件开发中&#xff0c;高效地操作数据库是至关重要的。而MSSQL&#xff08;Microsoft SQL Server&#xff09;作为一款强大的关系型数据库管理系统&#xff0c;为我们提供了丰富的功能和工具来处理数据。其中&#xff0c;MSSQL存储过程是一项强大而又常用的功能&#xf…...

我们常说的流应用到底是什么?

流应用是DCloud公司开发的一种可以让手机App安装包实现边用边下的技术。基于HTML5规范的即点即用应用&#xff0c;开发者按照HTML5规范开发的应用&#xff0c;可以在支持HTML5流应用的发行渠道实现即点即用的效果。 流应用是基于 HTML5规范的即点即用应用&#xff0c;开发者按照…...

ELK 日志解决方案

ELK 是目前最流行的集中式日志解决方案&#xff0c;提供了对日志收集、存储、展示等一站式的解决方案。 ELK 分别指 Elasticsearch、Logstash、Kibana。 Elasticsearch&#xff1a;分布式数据搜索引擎&#xff0c;基于 Apache Lucene 实现&#xff0c;可集群&#xff0c;提供…...

本项目基于Spring boot的AMQP模块,整合流行的开源消息队列中间件rabbitMQ,实现一个向rabbitMQ

在业务逻辑的异步处理&#xff0c;系统解耦&#xff0c;分布式通信以及控制高并发的场景下&#xff0c;消息队列有着广泛的应用。本项目基于Spring的AMQP模块&#xff0c;整合流行的开源消息队列中间件rabbitMQ,实现一个向rabbitMQ添加和读取消息的功能。并比较了两种模式&…...

freeswitch webrtc video_demo客户端进行MCU的视频会议

系统环境 一、编译服务器和加载模块 二、下载编译指定版本video_demo 三、配置verto.conf.xml 1.修改配置文件 2.重新启动 四、MCU通话测试 1.如何使用video_demo 2.测试结果 五、MCU的通话原理及音频/视频/布局/管理员等参数配置 附录 freeswitch微信交流群 系统环境 lsb_rel…...

【鸿蒙学习网络】

鸿蒙技术学习相关学习资料 官方文档&#xff1a;华为官方提供了鸿蒙开发者文档&#xff0c;包括开发指南、API参考和示例代码等。您可以访问华为开发者中心网站&#xff08;https://developer.harmonyos.com/&#xff09;获取最新的官方文档和教程。在 线 课 程 &#xff1a; …...

MySQL系列(一):索引篇

为什么是B树&#xff1f; 我们推导下&#xff0c;首先看下用哈希表做索引&#xff0c;是否可以满足需求。如果我们用哈希建了索引&#xff0c;那么对于如下这种SQL&#xff0c;通过哈希&#xff0c;可以快速检索出数据&#xff1a; select * from t_user_info where id1;但是这…...

Flink Flink数据写入Kafka

一、环境准备 官网地址 flink官方集成了通用的 Kafka 连接器&#xff0c;使用时需要根据生产环境的版本引入相应的依赖 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><flink.version>1.14.6</flink.version&g…...

《论文阅读》用于情绪回复生成的情绪正则化条件变分自动编码器 Affective Computing 2021

《论文阅读》用于情绪回复生成的情绪正则化条件变分自动编码器 前言简介模型结构实验结果总结前言 今天为大家带来的是《Emotion-Regularized Conditional Variational Autoencoder for Emotional Response Generation》 出版:IEEE Transactions on Affective Computing 时间…...

Pytorch CIFAR10图像分类 Swin Transformer篇

Pytorch CIFAR10图像分类 Swin Transformer篇 文章目录 Pytorch CIFAR10图像分类 Swin Transformer篇4. 定义网络&#xff08;Swin Transformer&#xff09;Swin Transformer整体架构Patch MergingW-MSASW-MSARelative position biasSwin Transformer 网络结构Patch EmbeddingP…...

【vim】常用操作

用的时候看看&#xff0c;记太多也没用&#xff0c;下面都是最常用的&#xff0c;更多去查文档vim指令集。 以下均为正常模式下面操作&#xff0c;正在编辑的&#xff0c;先etc一下. 1/拷贝当前行 yy&#xff0c;5yy为拷贝包含当前行往下五行 2/p将拷贝的东西粘贴到当前行下…...

oracle、误操作删除数据库 数据恢复。

–查询 执行 delete 的语句 &#xff0c;拿到删除的时间 FIRST_LOAD_TIME &#xff0c;删除行数可参考 ROWS_PROCESSED select t.FIRST_LOAD_TIME,t.ROWS_PROCESSED,t.* from v$sql t where t.sql_text like %delete from trade% ;select *from trade as of timestamp to_time…...

【Angular开发】Angular在2023年之前不是很好

做一个简单介绍&#xff0c;年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【架构师酒馆】…...

记录 | 报错:libssl-dev : 依赖: libssl3 (= 3.0.8-1ubuntu1.1) 但是 3.0.8-1ubuntu1.2 正要被安装

ubuntu 上安装 libssl-dev 失败的报错解决 报错&#xff1a; 下列软件包有未满足的依赖关系&#xff1a; libssl-dev : 依赖: libssl3 ( 3.0.8-1ubuntu1.1) 但是 3.0.8-1ubuntu1.2 正要被安装 E: 无法修正错误&#xff0c;因为您要求某些软件包保持现状&#xff0c;就是它们破…...

MySQL联合查询、最左匹配、范围查询导致失效

服务器版本 客户端&#xff1a;navicat premium16.0.11 联合索引 假设有如下表 联合索引就是同时把多列设成索引&#xff0c;如(empno&#xff0c;ename)在查询的时候就会先按照empno进行查询&#xff0c;再按照ename进行查询其中empno是全局有序&#xff0c;ename是局部有…...

部署zabbix

源码下载地址&#xff1a; Download Zabbix sources nginx: download 防火墙和selinux都需要关闭 1、部署监控服务器 1&#xff09;安装LNMP环境 Zabbix监控管理控制台需要通过Web页面展示出来&#xff0c;并且还需要使用MySQL来存储数据&#xff0c;因此需要先为Zabbix准备基础…...

服务器感染了.locked、.locked1勒索病毒,如何确保数据文件完整恢复?

尊敬的读者&#xff1a; locked、.locked1勒索病毒的威胁如影随形&#xff0c;深刻影响着数字世界的安全。本文将深入揭示locked、.locked1的狡猾特征&#xff0c;为您提供实用的数据恢复方法&#xff0c;并分享一系列特别定制的预防措施&#xff0c;旨在使您的数字生活摆脱勒…...

【Linux系统化学习】命令行参数 | 环境变量的再次理解

个人主页点击直达&#xff1a;小白不是程序媛 Linux专栏&#xff1a;Linux系统化学习 代码仓库&#xff1a;Gitee 目录 mian函数传参获取环境变量 手动添加环境变量 导出环境变量 environ获取环境变量 本地变量和环境变量的区别 Linux的命令分类 常规命令 内建命令 …...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...