先在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))
结果如下: