#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