【VisDrone2019-MOT数据集】VisDrone2019-MOT数据转COCO格式代码(简洁易懂)

介绍

代码主要实现了将VisDrone2019-MOT数据集转换成COCO格式的功能。

一、代码

注意点:

  1. root_path为数据集文件夹根路径,如VisDrone2019-MOT-val,其下一层文件夹为annotationssequences。可根据需要改为VisDrone2019-MOT-train等;
  2. 转换出的json结果文件路径设置在函数最后,如VisDrone2019-MOT-val/result.json
# coding:utf-8
import os
import cv2
import json
import argparse
from PIL import Image

def VisdroneMOT2coco():
    root_path = "VisDrone2019-MOT-val" # 路径设置
    print("Loading data from ", root_path)

    assert os.path.exists(root_path)
    originLabelsDir = os.path.join(root_path, 'annotations')
    originVideosDir = os.path.join(root_path, 'sequences')
    classes = '0'
    # images dir name
    indexes_video = os.listdir(originVideosDir)

    dataset = {'categories': [], 'annotations': [], 'images': [], 'videos': []}
    dataset['categories'] = [
        {"id": 0, "name": "ignored regions"},
        {"id": 1, "name": "pedestrian"},
        {"id": 2, "name": "people"},
        {"id": 3, "name": "bicycle"},
        {"id": 4, "name": "car"},
        {"id": 5, "name": "van"},
        {"id": 6, "name": "truck"},
        {"id": 7, "name": "tricycle"},
        {"id": 8, "name": "awning-tricycle"},
        {"id": 9, "name": "bus"},
        {"id": 10, "name": "motor"},
        {"id": 11, "name": "others"}
    ]

    # 标注的id
    ann_id = 0
    video_id = 0
    id_all = 0
    for k_vid, index in enumerate(indexes_video):
        print("------processing video-------:",index)
        # 支持 png jpg 格式的图片。
        dataset['videos'].append({'id': k_vid, 'file_name': index})
        txtFile = str(index) + '.txt'
        video_id = video_id + 1
        frame_id = 0
        indexes_image = os.listdir(os.path.join(originVideosDir, index))
        id_record = id_all
        for k_img, index1 in enumerate(indexes_image):
            print("processing image:", index1)
            path = os.path.join(root_path, 'sequences')
            vid_path = os.path.join(path, index)
            img_path = os.path.join(vid_path, index1)
            # 读取图像的宽和高
            im = cv2.imread(img_path)
            height, width, _ = im.shape
            # 处理id
            id_all = id_all + 1
            frame_id = frame_id + 1
            prev_image_id = id_all - 1
            next_image_id = id_all + 1
            if k_img==0:
                prev_image_id = -1
            if k_img==len((indexes_image)) - 1:
                next_image_id = -1
            # 添加图像的信息
            dataset['images'].append({'file_name': os.path.join(index,index1),
                                    'id': id_all,
                                    'frame_id': frame_id,
                                    'prev_image_id': prev_image_id,
                                    'next_image_id': next_image_id,
                                    'video_id': video_id,
                                    'width': width,
                                    'height': height})

        with open(os.path.join(originLabelsDir, txtFile), 'r') as fr:
            labelList = fr.readlines()
            for label in labelList:
                label = label.strip().split(',')
                x = float(label[2])
                y = float(label[3])
                w = float(label[4])
                h = float(label[5])

                H, W, _ = im.shape
                # 标签序号从0开始计算
                cls_id = int(label[7])
                dataset['annotations'].append({
                    'id': ann_id,
                    'category_id': cls_id,
                    'image_id': int(label[0])+id_record,
                    'track_id': int(label[1]),
                    'conf': float(label[6]),
                    'area': w * h,
                    'bbox': [x, y, w, h],
                })
                ann_id += 1

    json_str = json.dumps(dataset,indent=4)
    with open('VisDrone2019-MOT-val/result.json', 'w') as json_file: # 路径设置
        json_file.write(json_str)


if __name__ == "__main__":
    VisdroneMOT2coco()

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
好的,以下是使用VisDrone2018-MOT-toolkit-master的Python脚本来评估多目标跟踪模型性能的步骤: 1. 安装VisDrone2018-MOT-toolkit-master 首先,您需要在计算机上安装VisDrone2018-MOT-toolkit-master。您可以在GitHub上找到该工具包,从那里下载并按照说明进行安装。 2. 准备数据集 接下来,您需要准备您的数据集并将其放置在VisDrone2018-MOT-toolkit-master的“data”文件夹中。确保数据集格式符合VisDrone2018-MOT-toolkit-master的要求。 3. 运行评估脚本 现在,您可以使用VisDrone2018-MOT-toolkit-master中的Python脚本来评估您的多目标跟踪模型性能。以下是一个示例脚本: ```python # 导入需要的库 import os import sys import argparse import numpy as np from mot_evaluation import MOTEvaluation # 定义参数 parser = argparse.ArgumentParser(description='Evaluate a MOT model on a dataset') parser.add_argument('--gt', '-g', type=str, required=True, help='path to ground truth directory') parser.add_argument('--tracker', '-t', type=str, required=True, help='path to tracker results directory') parser.add_argument('--seqmap', '-s', type=str, required=True, help='path to sequence map file') args = parser.parse_args() # 加载数据 gt_path = args.gt tracker_path = args.tracker seqmap_file = args.seqmap mot_eval = MOTEvaluation(gt_path, tracker_path, seqmap_file) # 运行评估 summary = mot_eval.summary() print(summary) ``` 在运行脚本之前,请确保将“--gt”参数设置为您的数据集中的“gt”文件夹的路径,“--tracker”参数设置为您的多目标跟踪模型输出的结果文件夹的路径,“--seqmap”参数设置为您的数据集中的“seqmaps”文件夹中与您的数据集相对应的序列映射文件的路径。 4. 分析结果 运行脚本后,您将看到一个汇总,其中包含所有评估指标的结果。您可以使用这些指标来分析您的多目标跟踪模型的性能并进行改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诺亚方舟23

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值