Python 在.json文件中将圆转换为多边形

Python 在.json文件中将圆转换为多边形,python,json,geometry,Python,Json,Geometry,我有一个.json文件,其中包含我想要训练神经网络的对象的注释(以圆和多边形为单位)。但是问题是,训练代码只接受.json文件中的多边形,因此给出了一个错误,因为我的代码有圆 有人知道如何将圆转换成多边形吗 我已经尝试了一些不起作用的解决方案(如下所示): import json from pprint import pprint with open('via_region_data(val).json') as f: data = json.load(f) for attr

我有一个.json文件,其中包含我想要训练神经网络的对象的注释(以圆和多边形为单位)。但是问题是,训练代码只接受.json文件中的多边形,因此给出了一个错误,因为我的代码有圆

有人知道如何将圆转换成多边形吗

我已经尝试了一些不起作用的解决方案(如下所示):

import json
from pprint import pprint

with open('via_region_data(val).json') as f:
    data = json.load(f)

    for attr, val in data.items():
        for attr2, val2 in val.items():
            if attr2 == 'regions':
                for attr3, val3 in val2.items():
                    if val3['shape_attributes']['name'] == 'circle':
                        cx = val3['shape_attributes']['cx']
                        cy = val3['shape_attributes']['cy']
                        r = val3['shape_attributes']['r']
                        all_points_x = [cx, cx - 1.5 * r, cx, cx + 1.5 * r, cx]
                        all_points_y = [cy - 1.5 * r, cy, cy + 1.5 * r, cy, cy - 1.5 * r]
                        val3['shape_attributes']['cx'] = all_points_x
                        val3['shape_attributes']['cy'] = all_points_y

                        val3['shape_attributes']['all_points_x'] = val3['shape_attributes'].pop('cx')
                        val3['shape_attributes']['all_points_y'] = val3['shape_attributes'].pop('cy')
                        val3['shape_attributes']['name'] = 'polygon'


pprint(data)

with open('via_region_data-val.json', 'w') as f:
    json.dump(data, f)
投掷:

Traceback (most recent call last):
  File "polygon_fixer.py", line 10, in <module>
    for attr3, val3 in val2.items():
AttributeError: 'list' object has no attribute 'items'
回溯(最近一次呼叫最后一次):
文件“polygon_fixer.py”,第10行,在
对于attr3,val2.items()中的val3:
AttributeError:“列表”对象没有属性“项”
有什么想法吗


附言:很明显,有些人不明白我试图使用的是一个.JSON文件

关于这个问题有两个问题

  • 必须采用@martineau提供的解决方案。然而,这还不够

  • 显然,VIA注释工具在更高版本中更改了JSON格式。现在,“区域”不再是字典,而是一个列表。这意味着,如果您试图以某种方式将它们读入多边形,则需要删除行中添加的“.values()”,在任何情况下都应如下所示

  • 而不是


    JSON与圆和多边形无关。这与JSON有什么关系?这就像加上“星期一”标签,因为今天是星期一。什么?这是一个包含圆的.json文件。问题是如何将圆定义转换为多边形等价物。将生成的数据转换成特定的JSON格式是次要的(而且相当简单)。为了解决第一个问题,考虑使用AS方法来计算沿它的外缘的一系列点。你的问题还没有提供关于输入和多边形元素在输出中的两种形状(圆和多边形)的JSON格式的清晰定义。知道这对解决问题至关重要。
    polygons = [r['shape_attributes'] for r in a['regions']]
    names = [r['region_attributes'] for r in a['regions']]
    
    polygons = [r['shape_attributes'] for r in a['regions'].values()]
    names = [r['region_attributes'] for r in a['regions'].values()]