我有一个.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'
有什么想法吗?
P.S:显然,有些人不了解我正在尝试使用的.JSON文件。 So here it is。
答案 0 :(得分:0)
关于这个问题有两个问题。
必须使用@martineau提供的解决方案。但是,这还不够。
注释工具VIA显然已在更高版本中更改了JSON格式。现在,“区域”有一个列表,而不是字典。这意味着,如果您以某种方式尝试将它们读为多边形,则需要删除行中的'.values()'加法,在任何情况下都应类似于以下内容。
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()]