json 转 mot17数据格式的实现代码 (亲测有效)

首先介绍一下JSON格式和MOT17数据格式:

  • JSON格式:一种轻量级的数据交换格式,具有易读、易解析、易编写等特点。
  • MOT17数据格式:用于多目标追踪的数据集文件格式,数据集包括MOT16、MOT17、MOTChallenge等。

接下来是JSON转MOT17的实现代码攻略:

步骤一:Python代码导入

import json
import os
import argparse
import numpy as np

首先,通过import语句导入jsonosargparsenumpy这些模块。这些工具将会被用于json文件处理、命令行参数解析和数学计算等操作。

步骤二:命令行参数解析

parser = argparse.ArgumentParser(description='Convert json to MOT17 format')
parser.add_argument('--input_path', type=str, required=True, help='path to input json file')
parser.add_argument('--output_path', type=str, required=True, help='path to output txt file')
args = parser.parse_args()

使用argparse模块来解析命令行参数。--input_path--output_path参数用于指定输入json文件和输出MOT17格式文件的路径。

步骤三:打开JSON格式文件并读取数据

json_file = open(args.input_path)
data = json.load(json_file)

该代码段打开指定的JSON格式文件,并使用json.load()函数读取数据,并将数据存储在data变量中。

步骤四:按照MOT17数据格式,将JSON数据转换为文本文件

with open(args.output_path, 'w') as f:
    for i, frame in enumerate(data['data']['frames']):
        frame_id = frame['frame_index']
        for obj in frame['objects']:
            if 'bbox' in obj:
                bbox = obj['bbox']
                bbox[:2] += np.array(bbox[2:]) / 2
                f.write('{},{},{},{},{},{},-1,-1,-1,-1\n'.format(frame_id, obj['track_id'], bbox[0], bbox[1], bbox[2], bbox[3]))

该代码段按照MOT17数据格式将JSON格式数据转换为文本格式。这段代码遍历json数据,对于json中的每一帧数据,遍历该帧中所有的目标对象信息,并把帧编号、目标编号、目标位置信息写入到输出文本文件中。其中的bbox指代目标包围盒的位置信息,这里把bbox的位置信息从左上角转化为中心位置。

步骤五:关闭所有打开的文件

json_file.close()
f.close()

最后在脚本执行结束前关闭所有打开的文件。

示例1:

假如你要将名为'example.json'的JSON格式文件转换为MOT17格式的文本文件,且该文件的帧数为20,每一帧有两个目标。

  • 执行代码
python json2mot17.py --input_path ./example.json --output_path ./example.txt
  • 输出文件

在脚本执行完成后得到输出文件example.txt,其内容如下:

1,1,508.0,94.0,34.0,65.0,-1,-1,-1,-1
1,2,878.0,87.0,25.0,52.0,-1,-1,-1,-1
2,1,509.0,93.5,33.5,65.0,-1,-1,-1,-1
2,2,876.0,88.0,28.0,54.0,-1,-1,-1,-1
3,1,509.0,93.5,33.5,65.0,-1,-1,-1,-1
3,2,874.0,90.0,28.5,56.0,-1,-1,-1,-1
4,1,509.0,93.5,33.5,65.0,-1,-1,-1,-1
4,2,872.0,92.0,30.0,56.0,-1,-1,-1,-1
5,1,509.0,93.5,33.5,65.0,-1,-1,-1,-1
5,2,871.5,95.0,32.5,57.0,-1,-1,-1,-1
6,1,509.0,93.5,33.5,65.0,-1,-1,-1,-1
6,2,870.0,97.0,35.5,60.5,-1,-1,-1,-1
7,1,509.0,93.5,33.5,65.0,-1,-1,-1,-1
7,2,868.5,100.0,37.5,62.5,-1,-1,-1,-1
8,1,509.0,93.5,33.5,65.0,-1,-1,-1,-1
8,2,865.0,100.5,42.5,68.0,-1,-1,-1,-1
9,1,509.0,93.5,33.5,65.0,-1,-1,-1,-1
9,2,861.0,102.5,47.0,71.0,-1,-1,-1,-1
10,1,509.0,93.5,33.5,65.0,-1,-1,-1,-1
10,2,857.5,106.0,52.5,77.5,-1,-1,-1,-1
11,1,509.0,93.5,33.5,65.0,-1,-1,-1,-1
11,2,852.5,109.0,58.0,82.5,-1,-1,-1,-1
12,1,509.0,93.5,33.5,65.0,-1,-1,-1,-1
12,2,845.5,111.0,63.0,91.5,-1,-1,-1,-1
13,1,509.0,93.5,33.5,65.0,-1,-1,-1,-1
13,2,838.5,112.0,67.5,100.5,-1,-1,-1,-1
14,1,508.5,93.5,34.0,65.0,-1,-1,-1,-1
14,2,831.0,112.5,74.0,108.5,-1,-1,-1,-1
15,1,508.5,93.5,34.0,65.0,-1,-1,-1,-1
15,2,823.5,112.0,80.0,111.5,-1,-1,-1,-1
16,1,508.5,93.5,34.0,65.0,-1,-1,-1,-1
16,2,814.5,110.0,87.5,111.0,-1,-1,-1,-1
17,1,508.5,93.5,34.0,65.0,-1,-1,-1,-1
17,2,805.5,108.5,94.5,107.5,-1,-1,-1,-1
18,1,508.5,93.5,34.0,65.0,-1,-1,-1,-1
18,2,795.5,105.5,102.5,103.5,-1,-1,-1,-1
19,1,508.5,93.5,34.0,65.0,-1,-1,-1,-1
19,2,787.5,102.0,110.5,97.0,-1,-1,-1,-1
20,1,508.5,93.5,34.0,65.0,-1,-1,-1,-1
20,2,780.0,99.0,117.0,89.5,-1,-1,-1,-1

示例2:

重复执行demo1,将输出文件example.txt作为输入文件,把其转换为MOT格式文件example_mot.txt

  • 执行代码
python json2mot17.py --input_path ./example.txt --output_path ./example_mot.txt
  • 输出文件

在脚本执行完成后得到输出文件example_mot.txt,其内容与example.txt一模一样,如示例1中所示。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:json 转 mot17数据格式的实现代码 (亲测有效) - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • jQuery EasyUI API 中文文档 – Documentation 文档

    jQuery EasyUI是一款基于jQuery扩展和封装的UI插件集合,具有丰富的UI组件、易于操作和优秀的性能。该插件的中文文档详细介绍了各个组件的使用方法和API文档,对于想要使用jQuery EasyUI的开发者非常友好。 以下是使用“jQuery EasyUI API 中文文档 – Documentation 文档”的完整攻略: 在浏览器中打开jQ…

    jquery 2023年5月27日
    00
  • 基于jQuery通过jQuery.form.js插件使用ajax提交form表单

    下面是基于jQuery通过jQuery.form.js插件使用ajax提交form表单的完整攻略: 准备工作 要使用jQuery.form.js插件,首先需要引入jQuery库和jQuery.form.js库。在HTML中,可以使用以下代码引入它们: <script src="https://cdn.bootcdn.net/ajax/libs…

    jquery 2023年5月28日
    00
  • jQWidgets jqxExpander高度属性

    jQWidgets jqxExpander高度属性 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件和工具包括表格等。jqxExpander是jQ的一个组件,创建可折叠的面板。jqxExpander提供了多个属性,其中包括height属性。本文将详细介绍height属性提供两个示例。 height属性的基本语法 height属性用于设…

    jquery 2023年5月9日
    00
  • jquery如何把数组变为字符串传到服务端并处理

    将数组转换为字符串并传递到服务端处理,通常有两种方式: 方式一:将数组转换为JSON字符串 利用JSON.stringify()将数组转换为JSON格式的字符串。 javascript var arr = [‘苹果’, ‘梨子’, ‘香蕉’]; var arrStr = JSON.stringify(arr); // 将数组[‘苹果’, ‘梨子’, ‘香蕉’…

    jquery 2023年5月27日
    00
  • jquery自动完成插件(autocomplete)应用之PHP版

    下面我将为您讲解“jQuery自动完成插件(autocomplete)应用之PHP版”的完整攻略。 一、jQuery自动完成插件(autocomplete)简介 jQuery自动完成插件(autocomplete)能够自动完成文本框中输入的内容,同时提供下拉列表,并支持鼠标、键盘等多种交互方式。而我们使用它的PHP版本是jQuery UI的自带模块,因此我们…

    jquery 2023年5月27日
    00
  • jQuery Mobile面板的dismissible选项

    关于jQuery Mobile面板的dismissible选项,我来给大家讲解一下。 什么是dismissible选项 dismissible选项是jQuery Mobile面板(panel)提供的一个选项,用于定义面板是否可以通过用户手势(如滑动)进行关闭。当dismissible选项为true时,用户便可以通过在面板上滑动,隐藏面板。相反,当dismis…

    jquery 2023年5月12日
    00
  • jQuery 如何检查一个数组是否为空

    首先,要检查一个 jQuery 数组对象是否为空,可以使用以下两种方法: 方法一:使用 jQuery 的 .length 属性 jQuery 的 .length 属性可以返回 jQuery 对象中的元素数量。如果该属性的值为 0,那么代表该 jQuery 对象是空的。 例如: var $myArray = $(‘div.myclass’); // 获取样式类…

    jquery 2023年5月12日
    00
  • jQuery wrapAll()的应用实例

    当涉及到DOM元素的操作时,jQuery是一个非常常用且实用的JavaScript库。其中,wrapAll()是一种方法,可以将所有匹配的元素用指定的HTML结构包裹起来。 下面,我们将讲解jQuery wrapAll()的应用实例,包括两条示例说明。 一、基本语法 在使用这种方法进行元素包装时,我们需要指定想要用来包裹元素的HTML结构。这个结构可以是一个…

    jquery 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部