Как обрабатывать вложенные списки 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']
должен дать вам список