generated from dopt-python/py311
working demo code with significant speed-up #1
@ -8,17 +8,21 @@ profiler = cProfile.Profile()
|
|||||||
|
|
||||||
PROFILE = True
|
PROFILE = True
|
||||||
USE_NEW_IMPL = True
|
USE_NEW_IMPL = True
|
||||||
|
ONLY_PREPARE = False
|
||||||
|
|
||||||
|
|
||||||
def main() -> None:
|
def main() -> None:
|
||||||
_prepare_env.main()
|
_prepare_env.main()
|
||||||
|
if ONLY_PREPARE:
|
||||||
|
return
|
||||||
|
|
||||||
if PROFILE:
|
if PROFILE:
|
||||||
profiler.enable()
|
profiler.enable()
|
||||||
monitor_folder_simple(use_new=USE_NEW_IMPL)
|
monitor_folder_simple(use_new=USE_NEW_IMPL)
|
||||||
profiler.disable()
|
profiler.disable()
|
||||||
|
|
||||||
stats = pstats.Stats(profiler).sort_stats("cumtime")
|
stats = pstats.Stats(profiler).sort_stats("cumtime")
|
||||||
stats.print_stats(15)
|
stats.print_stats(20)
|
||||||
else:
|
else:
|
||||||
monitor_folder_simple(use_new=USE_NEW_IMPL)
|
monitor_folder_simple(use_new=USE_NEW_IMPL)
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
import sys
|
||||||
import time
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
@ -146,7 +147,11 @@ def monitor_folder_simple(use_new: bool):
|
|||||||
# Aufgabe 2: NGT und check_img von Originalordner in KI kopieren
|
# Aufgabe 2: NGT und check_img von Originalordner in KI kopieren
|
||||||
# Rückgabewert: Ordner Fileserver/KI auf dem Fileserver, wo dann die Heatmaps abgelegt werden
|
# Rückgabewert: Ordner Fileserver/KI auf dem Fileserver, wo dann die Heatmaps abgelegt werden
|
||||||
print("'copy_ngt_and_checkimg'...")
|
print("'copy_ngt_and_checkimg'...")
|
||||||
|
if use_new:
|
||||||
|
file_ki_folder, result = preparation.copy_ngt_and_checkimg_new()
|
||||||
|
else:
|
||||||
file_ki_folder, result = preparation.copy_ngt_and_checkimg()
|
file_ki_folder, result = preparation.copy_ngt_and_checkimg()
|
||||||
|
|
||||||
if result: # d. h. Fehler ist aufgetreten
|
if result: # d. h. Fehler ist aufgetreten
|
||||||
continue # zu nächstem neuen folder springen
|
continue # zu nächstem neuen folder springen
|
||||||
|
|
||||||
@ -157,6 +162,8 @@ def monitor_folder_simple(use_new: bool):
|
|||||||
else:
|
else:
|
||||||
preparation.change_image_to_yellow()
|
preparation.change_image_to_yellow()
|
||||||
|
|
||||||
|
# sys.exit(0)
|
||||||
|
|
||||||
# Aufgabe 4: AOI-Bilder in RGB überführen und zwischenspeichern
|
# Aufgabe 4: AOI-Bilder in RGB überführen und zwischenspeichern
|
||||||
# wir erhalten hier den Speicherort sowie ggf. Fehlermeldungen zurück
|
# wir erhalten hier den Speicherort sowie ggf. Fehlermeldungen zurück
|
||||||
print("'create_rgb_images_and_patches'...")
|
print("'create_rgb_images_and_patches'...")
|
||||||
|
|||||||
@ -18,16 +18,20 @@ COLOUR_ASSIGNMENT = {"R": [255, 0, 0], "G": [0, 255, 0], "B": [0, 0, 0]}
|
|||||||
|
|
||||||
class Preparation:
|
class Preparation:
|
||||||
def __init__(self, folder):
|
def __init__(self, folder):
|
||||||
self.folder_path = (
|
# der aktuelle Ordner mit neuen AOI-Bilddateien auf dem KI-Rechner
|
||||||
folder # der aktuelle Ordner mit neuen AOI-Bilddateien auf dem KI-Rechner
|
self.folder_path = folder
|
||||||
)
|
|
||||||
self.visper = Path(self.folder_path).parts[-4]
|
self.path = Path(self.folder_path)
|
||||||
self.original_data_path = (
|
# ?? verify existence --> fail early?
|
||||||
Path(config.STORING_PATH)
|
|
||||||
/ self.visper
|
self.visper = self.path.parts[-4]
|
||||||
/ Path(self.folder_path).parent.parent.name
|
# self.original_data_path = (
|
||||||
/ Path(self.folder_path).parent.name
|
# Path(config.STORING_PATH)
|
||||||
) # Pfad zu Fileserver/KI/...
|
# / self.visper
|
||||||
|
# / Path(self.folder_path).parents[1].name
|
||||||
|
# / Path(self.folder_path).parent.name
|
||||||
|
# ) # Pfad zu Fileserver/KI/...
|
||||||
|
self.original_data_path = Path(config.STORING_PATH).joinpath(*self.path.parts[-4:-1])
|
||||||
|
|
||||||
print(f"[{self.visper}] {Path(self.folder_path).name} Vorbereitung gestartet...")
|
print(f"[{self.visper}] {Path(self.folder_path).name} Vorbereitung gestartet...")
|
||||||
|
|
||||||
@ -46,7 +50,6 @@ class Preparation:
|
|||||||
folders_to_copy.append(entry.path)
|
folders_to_copy.append(entry.path)
|
||||||
|
|
||||||
for src in folders_to_copy:
|
for src in folders_to_copy:
|
||||||
# TODO duplicate -> "self.original_data_path"
|
|
||||||
dst = (
|
dst = (
|
||||||
Path(config.STORING_PATH)
|
Path(config.STORING_PATH)
|
||||||
/ self.visper
|
/ self.visper
|
||||||
@ -70,6 +73,59 @@ class Preparation:
|
|||||||
no = tb[-1].lineno
|
no = tb[-1].lineno
|
||||||
return None, f"Fehlermeldung: {e}, {no}"
|
return None, f"Fehlermeldung: {e}, {no}"
|
||||||
|
|
||||||
|
def copy_ngt_and_checkimg_new(self):
|
||||||
|
try:
|
||||||
|
# extract last level name because we need to copy all folders containing this name
|
||||||
|
# target_name = os.path.basename(self.folder_path)
|
||||||
|
# target_name = self.path.name
|
||||||
|
# base_path = self.path.parent
|
||||||
|
|
||||||
|
# ?? Warum kopieren wir nicht gleich den ganzen Ordner? --> Das Ergebnis der unten stehenden
|
||||||
|
# ?? Operation ist eine Liste, in der nur der Name des Ordners (Päckchen-Ebene) steht, die also eigentlich
|
||||||
|
# ?? immer nur einen Eintrag enthält --> self.path
|
||||||
|
# Einzige Ausnahme: mehr als 10 Einträge/Päckchen, dann enthalten die Päckchen 10-19 auch den Namen des
|
||||||
|
# ersten Päckchens
|
||||||
|
# Annahme hier: Es soll nur die Daten des entsprechenden Päckchens kopiert werden
|
||||||
|
|
||||||
|
# folders_to_copy = []
|
||||||
|
# with os.scandir(base_path) as entries:
|
||||||
|
# for entry in entries:
|
||||||
|
# if entry.is_dir() and target_name in entry.name:
|
||||||
|
# folders_to_copy.append(entry.path)
|
||||||
|
|
||||||
|
# for src in folders_to_copy:
|
||||||
|
# # duplicate -> self.original_data_path
|
||||||
|
# dst = (
|
||||||
|
# Path(config.STORING_PATH)
|
||||||
|
# / self.visper
|
||||||
|
# / Path(self.folder_path).parent.parent.name
|
||||||
|
# / Path(self.folder_path).parent.name
|
||||||
|
# / Path(src).name
|
||||||
|
# )
|
||||||
|
# copytree(src, dst, dirs_exist_ok=True)
|
||||||
|
|
||||||
|
src = self.path
|
||||||
|
dst = self.original_data_path / self.path.name
|
||||||
|
copytree(src, dst, dirs_exist_ok=True)
|
||||||
|
|
||||||
|
# ?? Soll hier der Pfad mit den kopierten Originaldaten zurückgegeben werden?
|
||||||
|
# Das ist aktuell nicht der Fall, da die letzten Pfadkomponenten als absolute Pfade das
|
||||||
|
# Ergebnis komplett überschreiben
|
||||||
|
# return Path(config.STORING_PATH) / self.visper / Path(
|
||||||
|
# self.folder_path
|
||||||
|
# ).parent.parent / Path(self.folder_path).parent, None
|
||||||
|
return self.original_data_path, None
|
||||||
|
|
||||||
|
except FileExistsError:
|
||||||
|
return (
|
||||||
|
None,
|
||||||
|
f"Fehlermeldung: Ordner {Path(self.folder_path).parts[-1]} existiert bereits.",
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
tb = traceback.extract_tb(e.__traceback__)
|
||||||
|
no = tb[-1].lineno
|
||||||
|
return None, f"Fehlermeldung: {e}, {no}"
|
||||||
|
|
||||||
# --------------------------- Dritte Aufgabe: check_img auf dem Fileserver auf Gelb ("Work in Progress") ändern --------------------------
|
# --------------------------- Dritte Aufgabe: check_img auf dem Fileserver auf Gelb ("Work in Progress") ändern --------------------------
|
||||||
def change_image_to_yellow(self):
|
def change_image_to_yellow(self):
|
||||||
# first we define for R, G and B which coour has to be adapted
|
# first we define for R, G and B which coour has to be adapted
|
||||||
@ -108,7 +164,14 @@ class Preparation:
|
|||||||
return img
|
return img
|
||||||
|
|
||||||
def change_image_to_yellow_new(self):
|
def change_image_to_yellow_new(self):
|
||||||
base_path = Path(self.folder_path).parent
|
# ?? Hier sind wir nicht mehr auf Ebene des Päckchens, sondern im übergeordneteten Bereich. Ist das
|
||||||
|
# ?? richtig so? Beim Kopieren waren wir nur auf Päckchen-Ebene unterwegs.
|
||||||
|
# Wenn jetzt neue Instanzen dieser Klasse mit anderen Päckchen desselben Basisordners erstellt werden, werden
|
||||||
|
# die Berechnungen an dieser Stelle immer erneut durchgeführt, auch für die anderen Päckchen, egal ob bereits
|
||||||
|
# durchgeführt oder durch Nutzer abgewählt
|
||||||
|
# Annahme hier: Es sollen nur Dateien des aktuellen Päckchens bearbeitet werden.
|
||||||
|
base_path = self.path
|
||||||
|
# base_path = Path(self.folder_path).parent
|
||||||
|
|
||||||
# iterate over all 'checkimg' folders recursively
|
# iterate over all 'checkimg' folders recursively
|
||||||
# !! check needed
|
# !! check needed
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user