2014-09-26 3 views
0

У меня есть код обнаружения лица. Я хочу хранить метаданные в json-файлах в определенном порядке. В основном я хочу написать, сколько лиц существует в изображении и местоположении изображений. Мой код выглядит следующим образом:Вложенный json в python

data =[] 
data.append({'number_of_faces':len(faces)}) 
nested_data = [] 
for (x,y,w,h) in faces: 
    nested_data.append({'face_x': x, 'face_y': y, 'face_h': h, 'face_w': w}) 
data.append(nested_data) 
with open(json_path+folder+'/'+file_name, "w") as outfile: 
     json.dump(data, outfile)  

Выход, например:

[ 
    { 
     "number_of_faces": 1 
    }, 
    [ 
     { 
      "face_h": 38, 
      "face_w": 38, 
      "face_x": 74, 
      "face_y": 45 
     } 
    ] 
] 

Однако я хочу, чтобы создать вложенную JSON. Таким образом, я хочу, чтобы объект number_of_faces вложил все face_location внутри number_of_faces {}. Как это можно сделать?

+1

Это не вопрос о JSON, а о диктофонах и списках. Библиотека 'json' просто сериализует структуру, которую вы передаете ей. –

+0

Да, как эффективно передать список json. –

ответ

1
data = {} 
data['number_of_faces'] = len(faces) 
data['faces'] = [] 
for (x,y,w,h) in faces: 
    data['faces'].append({'face_x': x, 'face_y': y, 'face_h': h, 'face_w': w}) 
with open(json_path+folder+'/'+file_name, "w") as outfile: 
    json.dump(data, outfile) 

Это будет иметь выход:

{ 
    'number_of_faces': 4 
    'faces':[{ 
     'face_x': 'x', 
     'face_y': 'y', 
     'face_h': 'h', 
     'face_z': 'z' 
    }] 
} 
+0

Эта реализация хранит только последнее лицо изображения в json! –

+0

Как вы это понимаете? –

+0

Faces - это список, содержащий несколько комбинаций лиц. С предлагаемой реализацией только последние координаты лица хранятся в json-файле. –

1

Прежде всего, как я уже сказал в комментарии, давайте игнорировать часть JSON. Это вопрос только о списках и dicts. Таким образом, нам просто нужно собрать данные так, как вы хотите.

Для начала, а не просто добавления в список, мы должны начать с dict для каждой формы. Затем мы можем добавить данные о лицах для каждой формы внутри этого dict.

data = [] 
for shape in shapes: 
    shape = {'number_of_faces':len(faces)} 
    nested_data = [] 
    for (x,y,w,h) in faces: 
     nested_data.append({'face_x': x, 'face_y': y, 'face_h': h, 'face_w': w}) 
    shape['face_location'] = nested_data 
    data.append(shape) 
+0

Что именно фигуры в вашей реализации? –

+1

Предполагаю, что у вас есть список фигур для итерации, потому что ваша первоначальная реализация была списком dict (s). Если вы этого не сделаете, тогда нет необходимости в этом списке, и вам не нужно ни «data», ни цикл for в моем коде. –

Смежные вопросы