Преобразование окружностей в многоугольники в файле .json - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть файл .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'

Есть мысли?

PS: Ну, видимо, некоторые люди этого не сделалиЯ не понимаю, что это файл .JSON, с которым я пытаюсь работать. Итак, вот оно .

1 Ответ

0 голосов
/ 19 сентября 2018

Было две проблемы, связанные с этой проблемой.

  1. Необходимо применить решение, предлагаемое @martineau.Однако этого недостаточно.

  2. Инструмент аннотации 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()]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...