问题:json文件转为coco数据集时,coco数据集出错,coco数据集中的文件信息与原图不符。
原因:查看生成的instances_val2014.json文件后发现,文件名的路径还是json重命名之前的路径,所以导致原图与json信息无法匹配。
如下图:json文件名与文件中imagepath不一样。
因此需要将imagepath 改成json现在的文件名。具体代码如下:
import json
import os, sys
json_path= '/home/f405/桌面/my_data/train/json/'
def get_json_data(json_path):
with open(json_path,'rb')as f:
params= json.load(f)
# 加载json文件中的内容给params
a= filename[:-5]
params['imagePath']= a+".jpg" #这两行控制修改的内容 时间有限就写的很草率
dict= params
# 将修改后的内容保存在dict中
f.close()
# 关闭json读模式
return dict
# 返回dict字典内容
def write_json_data(dict):
# 写入json文件
with open(json_path1,'w')as r:
# 定义为写模式,名称定义为r
json.dump(dict, r,indent = 2) #indent控制间隔
# 将dict写入名称为r的文件中
r.close()
# 关闭json写模式
#获取文件夹中的文件名称列表
filenames=os.listdir(json_path)
#遍历文件名
for filename in filenames:
filepath = json_path+'/'+filename
# print(filepath)
dict= {}
the_revised_dict= get_json_data(filepath)
json_path1= '/home/f405/桌面/3/'+filename # 修改json文件后保存的路径
write_json_data(the_revised_dict)
附带json转coco数据集代码:
# -*- coding:utf-8 -*-
# !/usr/bin/env python
import json
from labelme import utils
import numpy as np
import glob
import PIL.Image
labels={'cell1':4,'cell2':2,'cell3':3,'cell4':5,'cell5':1}
class MyEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, np.integer):
return int(obj)
elif isinstance(obj, np.floating):
return float(obj)
elif isinstance(obj, np.ndarray):
return obj.tolist()
else:
return super(MyEncoder, self).default(obj)
class labelme2coco(object):
def __init__(self, labelme_json=[], save_json_path='./tran.json'):
self.labelme_json = labelme_json
self.save_json_path = save_json_path
self.images = []
self.categories = []
self.annotations = []
self.label = []
self.annID = 1