• GitHub 链接:https://github.com/blainetse/mytoolkits
  • vot-toolkit-python 官方链接:https://github.com/votchallenge/toolkit
  • 参考链接1:https://blog.csdn.net/laizi_laizi/article/details/122492396 你们也可以参考这位大佬的写的,写的很好。他还写了一篇博客,几乎提供了所有的目标追踪的数据集和下载地址。
  • 参考链接2:https://www.cnblogs.com/kingsonfu/p/11683494.html Linux 下查看指定目录中文件的数量

废话不多说,看下效果图,

提示:如果不使用代理,下载速度会很慢!

源代码如下:

import os
import requests
import zipfile
import pandas as pdfrom tqdm import tqdm
from urllib.parse import urlparse, urljoindef get_data(url):"""Step1: 获取数据集下载链接Args:url: 数据集对应的 `json` 文件下载链接,可以直接在浏览器中输入该链接,查看其内容"""base_url = url.rsplit("/", 1)[0] + "/"try:meta = requests.get(url).json()except requests.exceptions.RequestException as e:raise Exception("Unable to read JSON file {}".format(e))# global sequences_url, annos_url, fnamessequences_url, annos_url, fnames = [], [], []for sequence in meta["sequences"]:# get data namefnames.append(sequence["name"])# get groundtruth zip fileurl = sequence["annotations"]["url"]if bool(urlparse(url).netloc):anno_url = urlelse:anno_url = urljoin(base_url, url)# get pic zip fileurl = sequence["channels"]["color"]["url"]if bool(urlparse(url).netloc):frame_url = urlelse:sequence_url = urljoin(base_url, url)annos_url.append(anno_url)sequences_url.append(sequence_url)return sequences_url, annos_url, fnamesdef write2csv(csvfile, fnames, urls):"""Step2: 将下载链接保存到 csv 文件中Args:csvfile: str 将下载链接等信息保存到 `csv` 文件,对应文件名 `{version}_sequences.csv` 以及 `{version}_anno.csv`fnames: [list: str] 对应着每一个 `sequence` 的名称,也可以理解为 `sequences`urls: [list: str] 对应着每一个 `sequence/frame` 的下载链接"""# 1.创建一个 DataFrame 作为一行写入,以键值对——字典的形式存储df = pd.DataFrame({"filename": fnames, "urls": urls, "state": [False] * 50})# 2.将 DataFrame 存储为 csv 文件,index 表示是否显示行名称(可以是数字,也可以是自定义的字符串)default=Truedf.to_csv(csvfile, index=0)def run_writer(fnames, sequences_url, annos_url):"""执行 `write2csv`,将数据集信息写入到文件中"""if not os.path.exists(csvfile["sequences"]):write2csv(csvfile["sequences"], fnames, sequences_url)if not os.path.isfile(csvfile["annos"]):write2csv(csvfile["annos"], fnames, annos_url)def download(url, folder_path, fname, use_proxy=False):"""Step3: 下载数据Args:url: 下载链接folder_path: 下载的数据集文件保存路径fname: 每一个 `sequence` 对应的名字use_proxy: 是否使用代理"""# 屏蔽warning信息requests.packages.urllib3.disable_warnings()# 构建自己的代理 IP 池proxies = {# 这里修改为自己的代理端口号,可在代理软件中进行查看更改,clash 默认是7890"http": "http://127.0.0.1:7890","https": "http://127.0.0.1:7890",}headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36",}if not os.path.exists(folder_path):os.makedirs(folder_path)  # 创建存放每一个图片集的单独文件夹fname = os.path.join(folder_path, f"{fname}.zip")############# 断点续传实现 ################### 第一次请求是为了得到文件总大小response = requests.get(url, stream=True, verify=False, proxies=proxies if use_proxy else "")total_size = int(response.headers["Content-Length"])if os.path.isfile(fname):temp_size = os.path.getsize(fname)  # 本地已经下载的文件大小if temp_size == total_size:print(# 注意双引号中不能包括双引号!!!只能使用外面双引号,内部单引号f"{fname.split('/')[-2] + '.zip'} exists and have totaly been downloaded!")returnelse:temp_size = 0# 显示一下下载了多少print(f"{fname.split('/')[-2] + '.zip'} downloaded: {temp_size/(1024*1024):.2f}MB || Total size: {total_size/(1024*1024):.2f}MB || Remaining download rate {1 - temp_size/total_size:.2f}")# 核心部分,这个是请求下载时,从本地文件已经下载过的后面下载# headers = {'Range': 'bytes=%d-' % temp_size}headers = {"Range": f"bytes={temp_size}-{total_size}","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36",}# 重新请求网址,加入新的请求头的response = requests.get(url,stream=True,verify=False,headers=headers,proxies=proxies if use_proxy else "",)############################################with tqdm.wrapattr(open(fname, "ab"),  # 以 ab 追加的形式写入!!!"write",miniters=1,desc=fname.split("/")[-2] + ".zip",total=int(response.headers.get("content-length", 0)),) as fout:for chunk in response.iter_content(chunk_size=4096):if chunk:temp_size += len(chunk)fout.write(chunk)fout.flush()def unzip_file(zip_src: str, dst_dir: str):"""Step4: 解压下载的数据包Args:zip_src: 源压缩包路径dst_dir: 指定解压的目录Returns: boolTrue: 表示解压成功,同时也包含该数据已经下载的信息False: 表示解压失败,数据集没有成功下载"""try:with zipfile.ZipFile(file=zip_src) as zip_file:# Loop over each file# print(f"Start unzip {zip_src.split('/')[-2]}")for file in zip_file.namelist():# Extract each file to another directory# If you want to extract to current working directory, don't specify pathzip_file.extract(member=file, path=dst_dir)print(f"{zip_src.split('/')[-2].upper()} has been unziped fully!")os.remove(zip_src)return Trueexcept:print("This is not zip file!")return Falsedef download_annos(use_proxy=True):"""Step5: 下载每一个 `sequence` 对应的 `annotation` 或者说 `groundtruth.txt`Args:use_proxy: 是否使用代理"""annos = pd.read_csv(csvfile["annos"], header=0, index_col=0, usecols=[0, 1, 2])for fname, (url, state) in annos.iterrows():folder_path = os.path.join(os.getcwd(), root, fname)# 判断是否已经下载完成if state:print(f"{fname} exists and have totaly been downloaded and unziped! Going to download and unzip the next.")else:## downloaddownload(url, folder_path, "groundtruth", use_proxy)## unzipzip_src = folder_path + "/groundtruth.zip"dest_dir = os.path.join(os.getcwd(), root, fname)state = unzip_file(zip_src, dest_dir)## 将新的状态添加进入文件中annos.loc[fname, "state"] = state# print(annos.loc[fname][1])annos.to_csv(csvfile["annos"], index=fnames, encoding="utf-8")def download_sequences(use_proxy=True):"""Step5: 下载 `video sequences`Args:use_proxy: 是否使用代理"""sequences = pd.read_csv(csvfile["sequences"], header=0, index_col=0, usecols=[0, 1, 2])for fname, (url, state) in sequences.iterrows():folder_path = os.path.join(os.getcwd(), root, fname)# 判断是否已经下载完成if state:print(f"{fname} exists and have totaly been downloaded and unziped! Going to download and unzip the next.")else:## downloaddownload(url, folder_path, "color", use_proxy)## unzipzip_src = folder_path + "/color.zip"dest_dir = os.path.join(os.getcwd(), root, fname, "color")state = unzip_file(zip_src, dest_dir)sequences.loc[fname, "state"] = statesequences.to_csv(csvfile["annos"], index=fnames, encoding="utf-8")def write2list(root, fnames):"""Step5: 下载 `list`,存放在当前数据据目录下,后期读取数据集的时候会用到"""if not os.path.exists(root):os.makedirs(root)flist = os.path.join(root, "list.txt")with open(flist, "w") as fl:fl.writelines([fname + "\n" for fname in fnames])def write2squence(root, sequence):"""Step5: 下载 `sequence`,存放在每一个 `sequence` 目录下,保存当前序列的相关信息"""for fname in fnames:## 添加 sequence 文件fsequence = os.path.join(root, fname, "sequence")# print(fsequence)if not os.path.exists(fsequence):fsequence = open(fsequence, encoding="utf-8", mode="w")fsequence.writelines(sequence)fsequence.writelines(f"name={fname}\r\n")fsequence.flush()fsequence.close()if __name__ == "__main__":VOT_DATASETS = {"vot2013": "http://data.votchallenge.net/vot2013/dataset/description.json","vot2014": "http://data.votchallenge.net/vot2014/dataset/description.json","vot2015": "http://data.votchallenge.net/vot2015/dataset/description.json","vot-tir2015": "http://www.cvl.isy.liu.se/research/datasets/ltir/version1.0/ltir_v1_0_8bit.zip","vot2016": "http://data.votchallenge.net/vot2016/main/description.json","vot-tir2016": "http://data.votchallenge.net/vot2016/vot-tir2016.zip","vot2017": "http://data.votchallenge.net/vot2017/main/description.json","vot-st2018": "http://data.votchallenge.net/vot2018/main/description.json","vot-lt2018": "http://data.votchallenge.net/vot2018/longterm/description.json","vot-st2019": "http://data.votchallenge.net/vot2019/main/description.json","vot-lt2019": "http://data.votchallenge.net/vot2019/longterm/description.json","vot-rgbd2019": "http://data.votchallenge.net/vot2019/rgbd/description.json","vot-rgbt2019": "http://data.votchallenge.net/vot2019/rgbtir/meta/description.json","vot-st2020": "https://data.votchallenge.net/vot2020/shortterm/description.json","vot-rgbt2020": "http://data.votchallenge.net/vot2020/rgbtir/meta/description.json","vot-st2021": "https://data.votchallenge.net/vot2021/shortterm/description.json","test": "http://data.votchallenge.net/toolkit/test.zip","segmentation": "http://box.vicos.si/tracking/vot20_test_dataset.zip","vot2022/rgbd": "https://data.votchallenge.net/vot2022/rgbd/description.json","vot2022/depth": "https://data.votchallenge.net/vot2022/depth/description.json","vot2022/stb": "https://data.votchallenge.net/vot2022/stb/description.json","vot2022/sts": "https://data.votchallenge.net/vot2022/sts/description.json","vot2022/lt": "https://data.votchallenge.net/vot2022/lt/description.json",}## 0.初始化相关数据# stack = "vot2022/lt"# version = "VOT2022_LT"stack = input("请输入要下载的数据集名称(e.g.vot2022/lt):")  # 注意:这里的名称要和 `VOT_DATASETS` 里面的 `key` 对应version = input("请输入要保存的数据集名称(e.g.VOT2022_LT):")  # 这里随便起一个名字,易懂即可,比如 `votlt2022`base_root = input("请输入数据集保存的路径(e.g./data):")root = base_root + f"./{version}"sequence = ["channels.color=color/%08d.jpg\r\n", "format=default\r\n", "fps=30\r\n"]csvfile = {"sequences": version + "_sequences.csv","annos": version + "_annos.csv",}## 1.获取下载链接sequences_url, annos_url, fnames = get_data(VOT_DATASETS[stack])# 输出下载链接# for fname, url in zip(fnames, sequences_url):#     print(f"{fname}: {url}")## 2.将下载链接保存到 csv 文件run_writer(fnames, sequences_url, annos_url)## 3.下载数据download_annos(use_proxy=True)  # 3.1 下载 groundtruth.txtprint("Done, groundtruth.txt has been downloaded!")download_sequences(use_proxy=True)  # 3.2 下载 sequencesprint("Done, color.zip has been downloaded!")write2list(root, fnames)  # 3.3 下载 listprint("Done, list has been downloaded!")write2squence(root, sequence)  # 3.4 下载 sequenceprint("Done, sequence has been downloaded!")

VOT 数据集下载toolkit相关推荐

  1. 数据集下载OTB,VOT,UAV,鸢尾花

    OTB数据集下载百度网盘链接 链接:https://pan.baidu.com/s/1snsJF_7Sw_EbKtzdvLO1nw 提取码:ls23 VOT数据集下载百度网盘链接 链接:https:/ ...

  2. 常见目标跟踪数据集下载链接整理(更新中)

    搜罗一下,感觉没人把常见的目标跟踪数据集下载链接汇总整理的,这里就整理一下,因为有些网址很难打开,这里也是想方便之后大家获取,来看看吧!我就从大佬图中来找几个吧!因为不是全接触过,有些链接不是很好,有 ...

  3. windows下的VOT数据集配置

    windows下的VOT数据集配置 一.运行环境 二.预先下载 1.VOT-toolkit 2.Trax 3.ncc 4.VOT数据集 三.正文开始 1.文件位置 2.创建workspace 3.配置 ...

  4. VOT数据集报错问题

    使用pysot评估VOT数据集时,训练结果保存在如下文件夹 The testing results will in the current directory(results/dataset/mode ...

  5. 单目标跟踪OTB、VOT数据集介绍

    OTB分为:OTB50和OTB100 官方下载链接为:OTB官方数据集网站 http://cvlab.hanyang.ac.kr/tracker_benchmark/datasets.html 百度云 ...

  6. OTB数据集和VOT数据集融合跟踪算法接口示例

    OTB数据集和VOT数据集自己存数据接口参考代码: 一.OTB数据集(不使用tracker_benchmark_v1.0) 1.OTB数据结果最基本的格式 type为目标框类型: res为目标框的所在 ...

  7. 目标跟踪评估绘图(3):ubuntu18.04在MATLAB2016b下的vot-toolkit配置,绘制VOT数据集的EAO评估图,与其他算法进行比较

    本文的视频讲解目标跟踪_OTB数据集和VOT数据集评估图的绘制 博主电脑配置: CPU:酷睿i9-9900kf, 显卡:RTX2070S, gcc版本:7.5.0, 以下实验在MATLAB2016b平 ...

  8. mnist等常用数据集下载地址,现成的.mat文件

    推荐一个机器学习常用数据集下载网址,LIIBSVM 数据集已经处理好的,可以直接用.

  9. Flickr30k图像标注数据集下载及使用方法(转载的,备忘)

    Flickr30k图像标注数据集下载及使用方法 这是该博主贴的链接:Flickr30k图像标注数据集下载及使用方法 直接从百度云盘中下载 链接:https://pan.baidu.com/s/1r0R ...

  10. Understanding Clouds from Satellite Images比赛的discussion调研与colab数据集下载配置

    colab数据集下载配置代码: %%time !pip install -U -q kaggle !mkdir -p ~/.kaggle!echo '{"username":&qu ...

最新文章

  1. Python必须要掌握的高端语法
  2. 2018python好找工作吗-2018年为什么要学习Python?Python还有前景吗?
  3. Struts2返回JSON对象的方法总结
  4. 0_0 SimpleFactoryMode 简单工厂模式
  5. centos6.5配置Hadoop环境,运行wordcount例子
  6. ECCV 2020 Oral | BorderDet : 用边界特征做检测
  7. 【Asp.Net】C#中checked关键字的应用
  8. kafka offset入门理解
  9. 8.84 亿什么概念?
  10. WebRoot与WebContent区别
  11. 一个高考落榜生的奋斗历程
  12. 电脑系统安装失败无法启动服务器,Windows2008R2安装补丁后系统无法启动
  13. Scala - IEEE754 浮点标准与 Float / Double 转换
  14. 论文:DKN:Deep Knowledge-Aware Network for News Recommendatio
  15. fluter set get
  16. 163邮箱免费账号注册,163邮箱申请能免费注册吗?
  17. Unity常用设计模式之代理模式
  18. 为什么我推荐你一定要学Python?
  19. ༺ཌ༈计算机科普༈ད༻
  20. DNS服务器它到底是干啥的呢?

热门文章

  1. 「镁客·请讲」中科云创周北川:从数据到云端,我们要上下打通工业物联网产业链...
  2. r语言C指数的置信区间,R语言—自定义函数求置信区间的操作
  3. 压缩视图状态之ajax(atlas)修正版
  4. harry potter
  5. 树莓派第一次使用WIN10电脑远程连接(无显示器)
  6. Qt5.12.9 搜狗输入法不能使用,配置解决方案
  7. C语言实现双人五子棋
  8. 申宝证券-A股三大指数集体高开
  9. python习题_Python练习题-for循环练习
  10. 泛微OA使用笔记-架构