Как преобразовать аннотации в формате ‘odgt’ (JSON?) в формат ‘csv’

#python #json #tensorflow #object-detection #tensorflow-datasets

#python #json #tensorflow #обнаружение объекта #tensorflow-наборы данных #tensorflow-datasets

Вопрос:

Я создаю алгоритм распознавания лиц с помощью TensorFlow и хотел бы обучить свой собственный алгоритм с помощью набора данных CrowdHuman, и у них уже есть готовые аннотации, но в odgt формате (они говорят, что это JSON, но когда я меняю расширение, оно не работает).

Мой вопрос: как использовать эти аннотации для обучения алгоритма тензорного потока или как преобразовать их в csv формат.

Каждая строка файла выглядит как:

    {
      "ID": "284193,faa9000f2678b5e",
      "gtboxes": [
         {
            "tag": "person",
            "hbox": [
               123,
               129,
               63,
               64
            ],
            "head_attr": {
               "ignore": 0,
               "occ": 1,
               "unsure": 0
            },
            "fbox": [
               61,
               123,
               191,
               453
            ],
            "vbox": [
               62,
               126,
               154,
               446
            ],
            "extra": {
               "box_id": 0,
               "occ": 1
            }
         },
         {
            "tag": "person",
            "hbox": [
               214,
               97,
               58,
               74
            ],
            "head_attr": {
               "ignore": 0,
               "occ": 1,
               "unsure": 0
            },
            "fbox": [
               165,
               95,
               187,
               494
            ],
            "vbox": [
               175,
               95,
               140,
               487
            ],
            "extra": {
               "box_id": 1,
               "occ": 1
            }
         },
         {
            "tag": "person",
            "hbox": [
               318,
               109,
               58,
               68
            ],
            "head_attr": {
               "ignore": 0,
               "occ": 1,
               "unsure": 0
            },
            "fbox": [
               236,
               104,
               195,
               493
            ],
            "vbox": [
               260,
               106,
               170,
               487
            ],
            "extra": {
               "box_id": 2,
               "occ": 1
            }
         },
         {
            "tag": "person",
            "hbox": [
               486,
               119,
               61,
               74
            ],
            "head_attr": {
               "ignore": 0,
               "occ": 0,
               "unsure": 0
            },
            "fbox": [
               452,
               110,
               169,
               508
            ],
            "vbox": [
               455,
               113,
               141,
               501
            ],
            "extra": {
               "box_id": 3,
               "occ": 1
            }
         },
         {
            "tag": "person",
            "hbox": [
               559,
               105,
               53,
               57
            ],
            "head_attr": {
               "ignore": 0,
               "occ": 0,
               "unsure": 0
            },
            "fbox": [
               520,
               95,
               163,
               381
            ],
            "vbox": [
               553,
               98,
               70,
               118
            ],
            "extra": {
               "box_id": 4,
               "occ": 1
            }
         },
         {
            "tag": "person",
            "hbox": [
               596,
               40,
               72,
               83
            ],
            "head_attr": {
               "ignore": 0,
               "occ": 0,
               "unsure": 0
            },
            "fbox": [
               546,
               39,
               202,
               594
            ],
            "vbox": [
               556,
               39,
               171,
               588
            ],
            "extra": {
               "box_id": 5,
               "occ": 1
            }
         },
         {
            "tag": "person",
            "hbox": [
               731,
               139,
               69,
               83
            ],
            "head_attr": {
               "ignore": 0,
               "occ": 0,
               "unsure": 0
            },
            "fbox": [
               661,
               132,
               183,
               510
            ],
            "vbox": [
               661,
               132,
               183,
               510
            ],
            "extra": {
               "box_id": 6,
               "occ": 0
            }
         }
      ]
   }
  

Спасибо за любую помощь

Комментарии:

1. как вы ожидаете, что вывод csv будет выглядеть?

2. каков ожидаемый результат?

3. также можете ли вы предоставить первые две строки файла, а не только 1 строку, как в вашем сообщении выше?

Ответ №1:

Немного неясно, как вы хотите, чтобы выглядел ваш вывод, но исходя из того, что вы предоставили, я бы предположил, что вы могли бы перебирать элементы в json и использовать json_normalize их для выравнивания, а затем добавить это в окончательный фрейм данных для записи на диск. Итак, что-то вроде:

 from pandas.io.json import json_normalize           
import json
import pandas as pd     

df = pd.DataFrame()
for each in data:

    temp_df = json_normalize(each['gtboxes'])
    temp_df ['ID'] = each['ID']

    df = df.append(temp_df).reset_index(drop=True)

df.to_csv('path/filename.csv', index=False)
  

Вывод:

 print (df.to_string())
   extra.box_id  extra.occ                  fbox                hbox  head_attr.ignore  head_attr.occ  head_attr.unsure     tag                  vbox                      ID
0             0          1   [61, 123, 191, 453]  [123, 129, 63, 64]                 0              1                 0  person   [62, 126, 154, 446]  284193,faa9000f2678b5e
1             1          1   [165, 95, 187, 494]   [214, 97, 58, 74]                 0              1                 0  person   [175, 95, 140, 487]  284193,faa9000f2678b5e
2             2          1  [236, 104, 195, 493]  [318, 109, 58, 68]                 0              1                 0  person  [260, 106, 170, 487]  284193,faa9000f2678b5e
3             3          1  [452, 110, 169, 508]  [486, 119, 61, 74]                 0              0                 0  person  [455, 113, 141, 501]  284193,faa9000f2678b5e
4             4          1   [520, 95, 163, 381]  [559, 105, 53, 57]                 0              0                 0  person    [553, 98, 70, 118]  284193,faa9000f2678b5e
5             5          1   [546, 39, 202, 594]   [596, 40, 72, 83]                 0              0                 0  person   [556, 39, 171, 588]  284193,faa9000f2678b5e
6             6          0  [661, 132, 183, 510]  [731, 139, 69, 83]                 0              0                 0  person  [661, 132, 183, 510]  284193,faa9000f2678b5e