如何使用 python 处理 JSON 嵌套列表

我正在使用 mask rcnn 训练数据集。我在 labelIMG 工具 ( https://github.com/tzutalin/labelImg ) 上注释了大约 1500 张图像。


长话短说,我需要从 JSON 文件中的分段列表中获取 x 和 y 坐标的值。


如何使用 Python 编程访问列表?或者有没有其他方法可以在掩码 Rcnn 上使用 .xml 注释。


这是从 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

        }

    ],


我想要分段列表的值:例如 935、372、935、554、1195、554、1195、372 但我得到的只是错误“列表索引必须是整数或切片,而不是字典”


慕神8447489
浏览 202回答 2
2回答

慕的地10843

循环中的i变量将是一个字典,因为它是一个字典列表。为了访问该列表,您需要执行以下操作:for i in data['annotations']:annotationssegmentationfor annotation in data['annotations']:    segmentation = annotation['segmentation']    actual_segment_data = segmentation[0]最后一行代码是必要的,因为segmentation它是列表中的列表。这应该返回以下内容:[935, 372, 935, 554, 1195, 554, 1195, 372].

largeQ

JSON 是 dict of ...dicts 的 dict 所以你需要正确的键来导航到段。annotations[0]['segmentation']应该给你名单
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python