Ich bin absolut am verzweifeln und meine letzte Hoffnung seid ihr:
Mir liegen aus verschiedenen .json-Dateien Koordinaten von Objekten auf Bildern vor.
Diese möchte ich zusammenführen und eine große .json-Datei erstellen. Die .json-Files haben die Form. Den Key "annotations" mit Value der Koordinaten habe ich zur besseren Übersicht weggelassen:
Code: Alles auswählen
test_annotations_1 = [{'id': 1, 'image_id': 1}, {'id': 2, 'image_id': 1}, {'id': 3, 'image_id': 1}]
Code: Alles auswählen
test_annotations_2 = [{'id': 1, 'image_id': 1}, {'id': 2, 'image_id': 1}, {'id': 3, 'image_id': 2}]
Dabei kategorisiert 'id' den Objektindex auf einem Bild und 'image_id' den zugehörigen Bildpfad.
Man sieht, dass ids und image_ids in test_annotations_1 & 2 identisch sind, da die Bilder seperat gelabelt wurden. Was ich jetzt möchte ist folgendes:
annotations_kombiniert:
Code: Alles auswählen
[{'id': 1, 'image_id': 1}, {'id': 2, 'image_id': 1}, {'id': 3, 'image_id': 1}, {'id': 4, 'image_id': 2}, {'id': 5, 'image_id': 2}, {'id': 6, 'image_id': 2}]
Ich habe mir folgendes Skript dazu geschrieben, um erstmal zu sehen ob die id's und image_id's richtig zugewiesen werden:
Code: Alles auswählen
class AnnotationsfileCreator:
def __init__(self):
self.images = []
self.annotations = []
self.image_id = 1
self.defect_id = 0
def add_annotations(self, extracted_annotations):
for element in extracted_annotations:
element['image_id'] = self.image_id
element['id'] = self.defect_id
print("element: ")
print(element)
self.defect_id += 1
self.image_id += 1
annotationfile = AnnotationsfileCreator()
Versuche ich nun 2 annotations zu kombinieren:
Code: Alles auswählen
annotationfile.add_annotations(test_annotations_1)
annotationfile.add_annotations(test_annotations_2)
Code: Alles auswählen
element:
{'id': 0, 'image_id': 1}
element:
{'id': 1, 'image_id': 1}
element:
{'id': 2, 'image_id': 1}
element:
{'id': 3, 'image_id': 2}
element:
{'id': 4, 'image_id': 2}
element:
{'id': 5, 'image_id': 2}
Nun ist für mich die logische Schlussfolgerung, "element" in jedem Durchlauf einer Liste zu appenden, was ich am Ende jedes for-Schleifen Durchlaufs einfüge.
Code: Alles auswählen
self.annotations.append(element)
Schau ich mir jetzt das Ergebnis an:
Code: Alles auswählen
print(annotationfile.annotations)
kommt absoluter Nonsense raus:
Code: Alles auswählen
[{'id': 3, 'image_id': 2}, {'id': 4, 'image_id': 2}, {'id': 5, 'image_id': 2}, {'id': 3, 'image_id': 2}, {'id': 4, 'image_id': 2}, {'id': 5, 'image_id': 2}]
Ich verstehe absolut nicht wie das vonstatten geht und habe zig Stunden verbracht eine Lösung zu finden. Kann mir BITTE jemand helfen?
Beste Grüße