Как обрабатывать вложенные списки JSON с помощью Python

Я тренирую набор данных по маске rcnn. Я аннотировал около 1500 изображений с помощью инструмента labelIMG ( https://github.com/tzutalin/labelImg).

Короче говоря, мне нужно получить значения координат x и y из списка сегментации в файлах JSON.

Как я могу получить доступ к списку, используя программирование на Python? ИЛИ есть ли другой способ, которым я могу использовать.xml аннотацию на маске Rcnn.

Это форма набора данных, преобразованная из VOC PASCAL в COCO. XML были преобразованы в синтаксис JSON.

Код

import json
import codecs

data = json.load(codecs.open('example.json', 'r', 'utf-8-sig'))

for i in data['annotations']:
    print(data['annotations'][0]) #want to output segmentation values in JSON files

Файл JSON

{
    "images": [
        {
          "file_name": "out538.png",
          "height": 720,
          "id": 20180000001,
          "width": 1280
        },
        {
          "file_name": "3 0751.jpg",
          "height": 720,
          "id": 20180000002,
          "width": 1280
        }
    ],
    "type": "instances",
    "annotations": [
        {
            "segmentation": [
            [
                935,
                372,
                935,
                554,
                1195,
                554,
                1195,
                372
            ]
            ],
            "area": 47320,
            "iscrowd": 0,
            "ignore": 0,
            "image_id": 20180000001,
            "bbox": [
            935,
            372,
            260,
            182
            ],
            "category_id": 1,
            "id": 1
        },
        {
            "segmentation": [
            [
                743,
                317,
                743,
                480,
                962,
                480,
                962,
                317
            ]
            ],
            "area": 35697,
            "iscrowd": 0,
            "ignore": 0,
            "image_id": 20180000001,
            "bbox": [
            743,
            317,
            219,
            163
            ],
            "category_id": 1,
            "id": 2
        }
    ],
    "categories": [
      {
        "supercategory": "none",
        "id": 1,
        "name": "bike"
      },
      {
        "supercategory": "none",
        "id": 2,
        "name": "Bike"
      }
    ]

}

я хочу значения списка сегментации: например, 935, 372, 935, 554, 1195, 554, 1195, 372, но все, что я получаю, это ошибка "индексы списка должны быть целыми или кусочками, а не dict"

2 ответа

Решение

i переменная в вашем for i in data['annotations']: цикл будет словарь, так как annotations это список словарей. Для того, чтобы получить доступ к segmentation список, вам нужно будет сделать что-то вроде этого:

for annotation in data['annotations']:
    segmentation = annotation['segmentation']
    actual_segment_data = segmentation[0]

Последняя строка кода необходима, потому что segmentation это список в списке.

Это должно вернуть следующее: [935, 372, 935, 554, 1195, 554, 1195, 372],

JSON - это диктат из... диктов. Таким образом, вам нужен правильный ключ для навигации по всем сегментам.

annotations[0]['segmentation'] 

должен дать вам список

Другие вопросы по тегам