Anhang zu dict-Liste in merkwürdiger Reihenfolge
Verfasst: Donnerstag 10. März 2022, 16:41
Hi!
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:
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:
Ich habe mir folgendes Skript dazu geschrieben, um erstmal zu sehen ob die id's und image_id's richtig zugewiesen werden:
Versuche ich nun 2 annotations zu kombinieren:
ergibt sich der folgende, richtige output:
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.
Schau ich mir jetzt das Ergebnis an:
kommt absoluter Nonsense raus:
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
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