Cityperson标签文件转通用物体检测格式

 

先在matlab中,将mat格式的标签转换为txt:

f= fopen('.\json\val.txt', 'w');
load('.\annotations\anno_val.mat');
requestNum = length(anno_val_aligned);
for i = 1:requestNum 
    cityname=anno_val_aligned{1,i}.cityname;
    fprintf(f,'%s/',cityname);
    name=anno_val_aligned{1,i}.im_name;
    fprintf(f,'%s',name);
    bbs=anno_val_aligned{1,i}.bbs;
    [bbsNum,ign] = size(bbs);
    if bbsNum==0
        fprintf(f,'\n');
        continue
    end
    for j =1:bbsNum
        fprintf(f,',');
        for k=1:10
            fprintf(f,' %f',bbs(j,k));  
        end
%         fprintf(f,'\n');
    end
    fprintf(f,'\n');
    
end

再在pycharm中把txt转换为json:

'''
将matlab转换为的txt的label文件,转换为我们通用的json文件

'''
import sys
import json
import argparse
import os
def anno_list2json(list_file, json_file,mode):

    output = open(json_file, 'w')

    f=open(list_file,'r')
    count, i = 0, 0
    for line in f.readlines():
        line_tuble=line.split(',')
        img_name=line_tuble[0]
        print(img_name)
        img_height=1024
        img_width=2048
        instances = []
        for i in range(1,len(line_tuble)):
            # print(line_tuble[i])
            # print(len(line_tuble[i].split(' ')))
            _,label,x1,y1,w,h,instance_id, x1_vis, y1_vis, w_vis, h_vis=line_tuble[i].split(' ')
            bbox = [float(x1), float(y1), float(x1) + float(w), float(y1) + float(h)]
            # bbox = [float(x1_vis), float(y1_vis), float(x1_vis) + float(w_vis), float(y1_vis) + float(h_vis)]
            print(float(label))
            if float(label)==0.0:
                instances.append({
                    'is_ignored': True,
                    'bbox': bbox,
                    'label': 1})
            elif float(label)==1.0:
                instances.append({
                    'is_ignored': False,
                    'bbox': bbox,
                    'label': 1})
            else:
                instances.append({
                    'is_ignored': True,
                    'bbox': bbox,
                    'label': 1})
        if len(instances) == 0:
            bbox = [1, 1, 1.1 , 1.1]
            instances.append({
                'is_ignored': True,
                'bbox': bbox,
                'label': 1})
        img_name = img_name.replace('\n', '')
        if mode=='train':
            img_name=os.path.join('leftImg8bit',mode,img_name)
        elif mode=='val':
            img_name = os.path.join('leftImg8bit', mode, img_name)
        else:
            raise RuntimeError('Unkown mode!')
        data = {
            'filename': img_name,
            'image_height': img_height,
            'image_width': img_width,
            'instances': instances
        }
        count+=1
        output.write(json.dumps(data, ensure_ascii=False) + '\n')

    return count



if __name__=='__main__':
    mode='train'
    input_txt='./label_files/txt/'+mode+'.txt'
    output_json='./json/'+mode+'.json'
    print(anno_list2json(input_txt, output_json,mode))

结果如下:

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值