Попытка синтаксического анализа дерева JSON (глубина которого априори неизвестна) для сопоставления значений строки "label
" и словаря "bbox
".Дерево JSON может (и обычно имеет) также иметь другой ключ / значения метки / bbox, вложенный в список 3-го ключа, называемого "children
".
В этом списке "children
" может бытьв свою очередь, могут быть вложены другие (несколько) уровней потомков (каждый из которых будет иметь больше ключей label / bbox.
Я хочу проанализировать все дерево JSON рекурсивно и возвращают словарь , который имеет ключи в качестве меток , и значение этого ключа является либо списком, либо набором bbox
словарей. Могут (и, скорее всего, будут)кратный boundingBoxes
для данной метки.
Таким образом, метка класса "собака" может иметь от 1 до многих ограничивающих прямоугольников, каждое из которых определяется словарем "topLeft
", "topRight
" "bottomLeft
Словари ", и" bottomRight
", каждый из которых определяется ключом / значением" x "и" y ".
Пример ввода может быть:
"my_tree": [{
"handle": 262258,
"key2": "explorer.exe",
"key3": "Win32",
"box": {
"topLeft": {
"x": 0,
"y": 1331
},
"topRight": {
"x": 2560,
"y": 1331
},
"bottomRight": {
"x": 2560,
"y": 1371
},
"bottomLeft": {
"x": 0,
"y": 1371
}
},
"isOff": false,
"isEnabled": false,
"isKeyboardFocusable": false,
"hasKeyboardFocus": false,
"controlType": 50033,
"uiElementType": "pane",
"children": [{
"key1": 131148,
"key2": "explorer.exe",
"name": "Start",
"key3": "Win32",
"box": {
"topLeft": {
"x": 0,
"y": 1331
},
"topRight": {
"x": 48,
"y": 1331
},
"bottomRight": {
"x": 48,
"y": 1371
},
"bottomLeft": {
"x": 0,
"y": 1371
}
},
"isOff": false,
"isEnabled": false,
"isKeyboardFocusable": false,
"hasKeyboardFocus": false,
"controlType": 50000,
"uiElementType": "button",
"children": []
}
Пример вывода выровняет вложенную структуру и просто вернет словарь "labels
" со связанным набором (или списком)bbox
словари.
Примерно так:
{
"dog" : {
"boundingVertices" : {
"topLeft": {
"x": 0,
"y": 1331
},
"topRight": {
"x": 2560,
"y": 1331
},
"bottomRight": {
"x": 2560,
"y": 1371
},
"bottomLeft": {
"x": 0,
"y": 1371
},
"boundingVertices" : {
"topLeft": {
"x": 33,
"y": 31
},
"topRight": {
"x": 17,
"y": 98
},
"bottomRight": {
"x": 102,
"y": 56
},
"bottomLeft": {
"x": 10,
"y": 42
}
},
"cat" : {
"boundingVertices" : {
"topLeft": {
"x": 9,
"y": 23
},
"topRight": {
"x": 37,
"y": 53
},
"bottomRight": {
"x": 97,
"y": 32
},
"bottomLeft": {
"x": 85,
"y": 58
},
"boundingVertices" : {
"topLeft": {
"x": 32,
"y": 87
},
"topRight": {
"x": 23,
"y": 86
},
"bottomRight": {
"x": 38,
"y": 72
},
"bottomLeft": {
"x": 90,
"y": 45
}
}
}