diff --git a/python_scripts/DLM_Tree_Classification/Additional_operations_script b/python_scripts/DLM_Tree_Classification/Additional_operations_script new file mode 100644 index 0000000000000000000000000000000000000000..21cd1461e56421ff10fa64d1a78714b242f36476 --- /dev/null +++ b/python_scripts/DLM_Tree_Classification/Additional_operations_script @@ -0,0 +1,186 @@ +# Dieses Script enthält verschiedene nützliche Verarbeitungsoptionen für den Prozess der Trainingsdatensatzerstellung +# Finden und entfernen ungelabelter Bilder aus den gelabelten Fotos um Auswahl zu beschleunigen +import os +import shutil + +# Ordner Pfade +ordner_a = '_MOMMERT/konstanz_labeled' # Ordner mit den .png und .txt Dateien +ordner_b = '_MOMMERT/sorted_images_with_konstanz/unlabeled' # Zielordner für die .png Dateien ohne zugehörige .txt Datei + +# Stelle sicher, dass der Zielordner 'b' existiert, andernfalls erstelle ihn +if not os.path.exists(ordner_b): + os.makedirs(ordner_b) + +# Liste alle .txt Dateien in 'a' +txt_dateien = set([os.path.splitext(f)[0] for f in os.listdir(ordner_a) if f.endswith('.txt')]) + +# Liste alle .png Dateien in 'a' +png_dateien = [f for f in os.listdir(ordner_a) if f.endswith('_bbox.png')] + +# Überprüfen, ob zu jeder .png Datei eine passende .txt Datei existiert +for png_datei in png_dateien: + # Entferne die Endung '_bbox.png', um den Basisnamen zu erhalten + basisname = os.path.splitext(png_datei)[0].replace('_bbox', '') + + # Wenn keine entsprechende .txt Datei vorhanden ist, verschiebe die .png Datei nach 'b' + if basisname not in txt_dateien: + quelle = os.path.join(ordner_a, png_datei) + ziel = os.path.join(ordner_b, png_datei) + shutil.move(quelle, ziel) + print(f"Verschiebe {png_datei} nach {ordner_b}") + + + + + +# Finden und verschieben von .txt Dateien, zu welchen keine .png Datei existiert. +import os +import shutil + +# Ordner Pfade +ordner_a = '_MOMMERT/sorted_images' # Ordner mit den .png und .txt Dateien +ordner_b = 'unwanted' # Zielordner für die .txt Dateien ohne zugehörige .png Datei + +# Stelle sicher, dass der Zielordner 'b' existiert, andernfalls erstelle ihn +if not os.path.exists(ordner_b): + os.makedirs(ordner_b) + +# Liste alle .png Dateien in 'a' +png_dateien = set([os.path.splitext(f)[0].replace('_bbox', '') for f in os.listdir(ordner_a) if f.endswith('_bbox.png')]) + +# Liste alle .txt Dateien in 'a' +txt_dateien = [f for f in os.listdir(ordner_a) if f.endswith('.txt')] + +# Überprüfen, ob zu jeder .txt Datei eine passende .png Datei existiert +for txt_datei in txt_dateien: + # Entferne die Endung '.txt', um den Basisnamen zu erhalten + basisname = os.path.splitext(txt_datei)[0] + + # Wenn keine entsprechende .png Datei vorhanden ist, verschiebe die .txt Datei nach 'b' + if basisname not in png_dateien: + quelle = os.path.join(ordner_a, txt_datei) + ziel = os.path.join(ordner_b, txt_datei) + shutil.move(quelle, ziel) + print(f"Verschiebe {txt_datei} nach {ordner_b}") + + + + + +# Überschreiben von Bildern mit Skala mit Bildern ohne Skala (gelabelt) +import os +import shutil + +# Pfade zu den Verzeichnissen +folder_a = "_MOMMERT/sorted_images/false" # Pfad wo Bilder überschrieben werden sollen +folder_b = "_MOMMERT/wuerzburg_labeled" # Pfad zu Ordner wo Bilder hergenommen werden sollen + +# Liste alle .png Dateien in Ordner 'a' +for filename in os.listdir(folder_a): + if filename.endswith('.png'): + # Pfad zur Datei in Ordner 'b' + file_b_path = os.path.join(folder_b, filename) + + # Prüfe, ob die Datei in Ordner 'b' existiert + if os.path.exists(file_b_path): + # Pfad zur Originaldatei in Ordner 'a' + original_file_path = os.path.join(folder_a, filename) + + # Kopiere die Datei aus Ordner 'b' nach Ordner 'a' und überschreibe die ursprüngliche Datei + shutil.copy(file_b_path, original_file_path) + print(f"Datei {filename} wurde von '{folder_b}' nach '{folder_a}' kopiert und überschrieben.") + else: + print(f"Datei {filename} existiert nicht in '{folder_b}'.") + + + + + + +# Vereinheitlichung aller .txt und .png files +import os + +# Pfad zum Ordner 'a' +folder_a = 'sorted_images/good' + +# Funktion zum Umbenennen von Dateien +def rename_files_in_folder(): + for filename in os.listdir(folder_a): + # Pfad zur Datei + file_path = os.path.join(folder_a, filename) + + # Überprüfen, ob es eine .txt-Datei ist und die Endung '_DOP20_BW.txt' hat + if filename.endswith('_DOP20_BW.txt'): + new_filename = filename.replace('_DOP20_BW.txt', '_rgbi_20cm.txt') + new_file_path = os.path.join(folder_a, new_filename) + os.rename(file_path, new_file_path) + print(f"Umbenannt: {file_path} -> {new_file_path}") + + # Überprüfen, ob es eine .png-Datei ist und die Endung '_DOP20_BW.png' hat + elif filename.endswith('_DOP20_BW_bbox.png'): + new_filename = filename.replace('_DOP20_BW_bbox.png', '_rgbi_20cm_bbox.png') + new_file_path = os.path.join(folder_a, new_filename) + os.rename(file_path, new_file_path) + print(f"Umbenannt: {file_path} -> {new_file_path}") + +# Umbenennung starten +rename_files_in_folder() + + + + + + + +# Reduzierung des Datensatzes um alle bilder, welche die Klassen 2-6 beinhalten: +import os +import shutil + +# Originalverzeichnis +source_dir = 'sorted_images' + +# Verzeichnis, das durchsucht werden soll +good_dir = os.path.join(source_dir, 'good') + +# Neues Verzeichnis für unerwünschte Dateien +unwanted_dir = 'unwanted' +os.makedirs(unwanted_dir, exist_ok=True) + +# Kopie des 'sorted_images'-Ordners erstellen +backup_dir = 'sorted_images_backup' +if not os.path.exists(backup_dir): + shutil.copytree(source_dir, backup_dir) + print(f"Kopie des Verzeichnisses erstellt: {backup_dir}") +else: + print(f"Backup-Verzeichnis existiert bereits: {backup_dir}") + +# Klassen, die als unerwünscht gelten +unwanted_classes = {2, 3, 4, 5, 6} + +# Funktion zum Verschieben der Dateien +def move_files(txt_file, png_file, unwanted_dir): + # Verschiebe die .txt Datei + shutil.move(txt_file, os.path.join(unwanted_dir, os.path.basename(txt_file))) + + # Verschiebe die zugehörige .png Datei + if os.path.exists(png_file): + shutil.move(png_file, os.path.join(unwanted_dir, os.path.basename(png_file))) + else: + print(f"Keine entsprechende .png Datei gefunden für: {png_file}") + +# Durchlaufe das Verzeichnis 'good' +for filename in os.listdir(good_dir): + if filename.endswith('.txt'): + txt_file_path = os.path.join(good_dir, filename) + png_file_path = txt_file_path.replace('.txt', '_bbox.png') + + # Überprüfe die .txt Datei + with open(txt_file_path, 'r') as file: + lines = file.readlines() + for line in lines: + class_id = int(line.split()[0]) # Die erste Zahl in jeder Zeile ist die Klassen-ID + if class_id in unwanted_classes: + move_files(txt_file_path, png_file_path, unwanted_dir) + break # Breche die Schleife ab, wenn eine unerwünschte Klasse gefunden wurde + +print("Verschieben unerwünschter Dateien abgeschlossen.")