目标跟踪 MOT数据集和可视化

目录

MOT15数据集格式简介

gt可视化

本人修改的GT可视化代码:


MOT15数据集格式简介

以下内容转自:【目标跟踪】MOT数据集GroundTruth可视化-腾讯云开发者社区-腾讯云

MOT15数据集下载:https://pan.baidu.com/s/1foGrBXvsanW8BI4eybqfWg?pwd=8888

以下为一行gt示例:

1,1,1367,393,73,225,1,-1,-1,-1

各列数据对应含义如下

<frame>,<id>,<bb_left>,<bb_top>,<bb_width>,<bb_height>,<conf>,<x>,<y>,<z>

复制

  • frame:图片帧id
  • id:目标id
  • bb_left:bbox左上角坐标x
  • bb_top:bbox左上角坐标y
  • bb_width:bbox的宽度
  • bb_height:bbox的高度
  • conf:置信度
  • x:三维坐标系x值,对于二维任务填充为-1
  • y:三维坐标系y值,对于二维任务填充为-1
  • z:三维坐标系z值,对于二维任务填充为-1

gt可视化

由于是跟踪任务,因此在可视化检测框的同时进一步添加箭头,用来标识目标的运动轨迹。

处理思路是读取一张图片后,同时读取两张图片的gt,若两张图片同时包含同一个目标,则用箭头连接前一帧bbox的中心点和后一帧bbox的中心点。

只能跟踪一个人:

import osimport cv2
def match_obj(obj_list, obj_id):try:index = obj_list.index(obj_id)except:index = -1return indexif __name__ == '__main__':dir_a=r'B:\data\track\MOT15\train\ADL-Rundle-6'img_dir=r'B:\data\track\MOT15\train\ADL-Rundle-6/'txt_paths = files = ['%s/%s' % (i[0].replace("\\", "/"), j) for i in os.walk(dir_a) for j in i[-1] if j.endswith(('gt.txt', '.xpng'))]img_i=1track_show=Trueimg = cv2.imread(img_dir+"/img1/" + "0000{:0>2d}.jpg".format(img_i))img2 = imgfor txt_path in txt_paths:with open(txt_path, 'r') as f:lines = f.readlines()object_list = []center_list = []for line in lines:img_id = line.split(',')[0]if img_id == str(img_i):object_id = line.split(',')[1]object_list.append(object_id)x, y, w, h = int(line.split(',')[2]), int(line.split(',')[3]), int(line.split(',')[4]), int(line.split(',')[5])center1 = (int(int(x) + int(w) / 2), int(int(y) + int(h) / 2))center_list.append(center1)if img_id == str(int(img_i) + 1):img_i+=1img = cv2.imread(img_dir + "/img1/" + "0000{:0>2d}.jpg".format(img_i))object_id = line.split(',')[1]index = match_obj(object_list, object_id)x, y, w, h = int(line.split(',')[2]), int(line.split(',')[3]), int(line.split(',')[4]), int(line.split(',')[5])center2 = (int(int(x) + int(w) / 2), int(int(y) + int(h) / 2))if index != -1:img2 = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255))img2 = cv2.arrowedLine(img2, center_list[index], center2, (0, 255, 255), 1, 8, 0, 0.5)if track_show:cv2.imshow("sdf",img)cv2.waitKey(0)

本人修改的GT可视化代码:


import sys
import base64
import os
from collections import OrderedDictimport cv2
import shutil
import glob
module_path = os.path.abspath(os.path.join('..'))
if module_path not in sys.path:sys.path.append(module_path)
import jsonif __name__ == '__main__':dir_a=r'B:\data\track\MOT15\train'img_dir=r'B:\data\track\MOT15\train/'txt_paths = ['%s/%s' % (i[0].replace("\\", "/"), j) for i in os.walk(dir_a) for j in i[-1] if j.endswith(('gt.txt', '.xpng'))]version = '3.16.7'flags = {}lineColor = [0, 255, 0, 128]fillColor = [255, 0, 0, 128]track_show=Truesave_json=Falsefor xmlpathName in txt_paths:xmlpathName=xmlpathName.replace("\\","/")dancetrack_name=xmlpathName.split("/")[-3]img_info = OrderedDict()with open(xmlpathName) as fs:lines = fs.readlines()# lines = sorted(lines)for line in lines:line = line.replace("\n", '')line_info = line.split(',')frame = line_info[0]frame_image_name = '{:0>6d}'.format(int(frame)) + ".jpg"box = [int(line_info[2]), int(line_info[3]), int(line_info[2]) + int(line_info[4]),int(line_info[3]) + int(line_info[5]),int(line_info[1])]if frame_image_name in img_info:img_info[frame_image_name].append(box)else:img_info[frame_image_name] = [box]for image_name in img_info.keys():print(image_name)dic = {}dic['version'] = versiondic['flags'] = flagsdic['shapes'] = []img_path = dancetrack_name+"/img1/" + image_nameimg_new_name = dancetrack_name + "_" + image_nameimg_new_path = img_dir + img_pathimg = cv2.imread(img_new_path)imageHeight, imageWidth, _ = img.shapefor box in img_info[image_name]:shape = {}shape['label'] = 'person'shape['line_color'] = Noneshape['fill_color'] = Nonex1 = int(box[0])y1 = int(box[1])x2 = int(box[2])y2 = int(box[3])if track_show:cv2.rectangle(img, (x1, y1), (x2, y2), (0,0,255), 1)cv2.putText(img, "t:" + str(box[4]), (x1,y1+20), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0,0,255), 2)shape['points'] = [[x1, y1], [x2, y2]]shape['shape_type'] = 'rectangle'shape['flags'] = {}dic['shapes'].append(shape)if track_show:cv2.putText(img, image_name, (20, 40), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 1)cv2.imshow("sdf",img)cv2.waitKey(0)if save_json:dic['lineColor'] = lineColordic['fillColor'] = fillColordic['imagePath'] = img_new_namedic['imageData'] = base64.b64encode(open('{}'.format(img_new_path), "rb").read()).decode('utf-8')dic['imageHeight'] = imageHeightdic['imageWidth'] = imageWidthfw = open('{}json'.format(img_new_path.replace(img_new_path.split('.')[-1], "")), 'w')json.dump(dic, fw)fw.close()

可视化效果如图所示:

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言学习第二十六天(算法的时间复杂度和空间复杂度)

1、算法效率 衡量一个算法的好坏&#xff0c;是从时间和空间两个方面来衡量的&#xff0c;换句话说就是从时间复杂度和空间复杂度来衡量的 这里需要补充一点&#xff1a;时间复杂度是衡量一个算法的运行快慢&#xff0c;空间复杂度是主要衡量一个算法运行所需要的额外空间。 …

【操作系统】实验五 文件系统

实验目的&#xff1a; 1. 掌握文件系统的基本概念和工作机制 2. 掌握文件系统的主要数据结构的实现 3、掌握软件系统实现算法 实验内容&#xff1a; 设计并实现一个虚拟的一级&#xff08;单用户&#xff09;文件系统程序 提供以下操作 1、文件创建/删除接口命令 2、目录创建/删…

Java基于微信小程序的小区车位租赁系统的设计与实现

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 简介技术路线需求分析用户信息管理车位信息管理车位申请管理论坛信息管理 效果图推荐阅读 简介 …

【强化学习-读书笔记】动态规划(策略评估、价值迭代、策略迭代算法)

参考 Reinforcement Learning, Second Edition An Introduction By Richard S. Sutton and Andrew G. Barto动态规划 (Dynamic Programming, DP) 是一类优化方法&#xff0c;在给定一个用马尔可夫决策过程 (MDP) 描述的完备环境模型的情况下&#xff0c;其可以计算最优的策…

优化问题笔记(2)

目录 3. 约束优化问题的全局解3.1 凸优化问题3.2 二次优化问题3.3 无约束二次优化问题3.4 一个典型的二次等式约束二次优化问题 Reference 3. 约束优化问题的全局解 3.1 凸优化问题 局部解成为全局解的一类重要的优化问题是所谓凸优化问题. 我们称优化问题 ( f , D ) (f,\ma…

算法-动态规划

动态规划算法 应用场景-背包问题 介绍 动态规划(Dynamic Programming)算法的核心思想是&#xff1a;将大问题划分为小问题进行解决&#xff0c;从而一步步获取最优解的处理算法动态规划算法与分治算法类似&#xff0c;其基本思想也是将待求解问题分解成若干个子问题&#xff0…

Centos7运行pyppeteer报错Browser closed unexpectedly经验总结【必须手动安装谷歌浏览器以自动安装一些依赖】

参考解决方案&#xff1a;pyppeteer.errors.BrowserError: Browser closed unexpectedly - Stack Overflow ldd ~/.local/share/pyppeteer/local-chromium/588429/chrome-linux/chrome | grep not found 注意&#xff1a;安装google-chrome是为了安装这些缺失的so库&#xff0…

针对这两个趋势,3.0全新新零售商业模式可以采取以下策略:

国内市场确实存在“消费升级”和“消费降级”两个趋势&#xff0c;这是由于不同消费者群体的需求和购买力存在差异。消费升级主要发生在高端市场&#xff0c;消费者愿意为高品质、高价值、高价格的商品和服务付出更多。而消费降级则主要发生在中低端市场&#xff0c;消费者更加…

修改antd表单Form.Item的label颜色的方法

默认的Form.item的标签颜色为黑色&#xff0c;但是如果我是用深色背景&#xff0c;这样的情况下表单就看不清楚label了&#xff0c;就像下面的情况&#xff0c;密码两个字完全看不到&#xff0c;所以想把它改为白色字体&#xff0c;就像上面的账号两个字一样&#xff1a; 所以怎…

随笔记录-springboot_LoggingApplicationListener+LogbackLoggingSystem

环境&#xff1a;springboot-2.3.1 加载日志监听器初始化日志框架 SpringApplication#prepareEnvironment SpringApplicationRunListeners#environmentPrepared EventPublishingRunListener#environmentPrepared SimpleApplicationEventMulticaster#multicastEvent(Applicati…

HarmonyOS ArkTS Tab使用方法(十五)

一&#xff0c;使用方法 Android中Java代码使用fragment进行Tab切换&#xff0c;下面使用HarmonyOS ArkTS 语言实现Tab的使用&#xff0c;代码如下&#xff1a; /** Copyright (c) 2022 Huawei Device Co., Ltd.* Licensed under the Apache License, Version 2.0 (the "…

(4)Linux的Redirect 重定向以及打包与压缩

&#x1f4ad; 写在前面 本章仍然是继续对Linux 常用指令进行介绍&#xff0c;将讲解重定向、时间相关的指令、文件查找和打包压缩等指令。我们将初次理解 "Linux下一切皆文件"这一概念&#xff0c;我将通过一个有趣的故事去讲解它。 初识重定向&#xff08;Redire…

如何在本地Docker中部署MinIO服务并实现远程访问管理界面

文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器&#xff0c;可以在各种环境中运行&#xff0c;例如本地、Docker容器、Kubernetes集群等。它兼…

全国巡展“2024人工智能展·世亚智博会”3月上海·4月杭州·6月北京

近年来&#xff0c;我国积极布局人工智能产业&#xff0c;竞跑“未来赛道”。随着各行业、各领域对人工智能需求的日益增长&#xff0c;与实体经济深度融合的新模式不断涌现&#xff0c;形成了具有中国特色的研发体系和应用生态&#xff0c;引领着经济社会各领域从数字化、网络…

web前端项目-影视网站开发

影视网站 本项目主要使用到了 HTML&#xff1b;CSS&#xff1b;JavaScript脚本技术&#xff1b;AJAX无刷新技术&#xff1b;jQuery等技术实现了动态影视网页 运行效果&#xff1a; 一&#xff1a;index.html <!DOCTYPE> <html lang"en"> <head>…

python采集电影数据JS逆向, 并制作可视化

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 环境使用&#xff1a; Python 3.10 Pycharm nodejs 模块使用&#xff1a; requests -> pip install requests execjs -> pip install pyexecjs json …

电流源输出的是直流电还是交流电(高精度电流源)

电流源是一种能够提供电流输出的电子设备&#xff0c;它可以产生直流电流或交流电流&#xff0c;具体取决于其设计和应用的需要。 首先&#xff0c;我们来讨论电流源输出直流电的情况。直流电是指电流的方向始终保持不变的电流形式。在一些特定的应用中&#xff0c;需要稳定的、…

【全志T113-i】OK113i-S开发板-适配10寸LCD显示

前言 本文介绍如何在OK113i-S开发板上适配一个自己的10寸LCD。 OK113i-S 是一个优秀的开发板&#xff0c;支持lvds 单8&#xff0c;双8显示&#xff0c;最大分辨率1280x800 也支持RG666显示&#xff0c;由于我手头只有lvds 单8&#xff0c;40pin的显示器&#xff0c;今天我就…

设计模式—装饰模式

与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 装饰模式—穿衣服&#x1f48e;总结 装饰模式—穿衣服 装饰模式&#xff08;Decorator&#xff09;可以动态的给对象添加一些额外的职责。 Component是定义一个对象接口&#xff0c;可以给这些对象动态地添加职责。…

Flutter ios 使用ListView 。滚动时 AppBar 改变颜色问题

在Ios 中 列表滚动条向下滚动一段距离后 会导致 AppBar 颜色改变 可以给 AppBar 或者 AppBarTheme。 scrolledUnderElevation: 0.0 属性 全局&#xff1a; MaterialApp(theme: ThemeData(appBarTheme: AppBarTheme(scrolledUnderElevation: 0.0)) ) 局部&#xff1a; App…