Labeln & Klassen aufzeichnen
- GestureRecognition.labeling.data_labeling(times: int, label: str)
TODO: data_labeling: Datenerfassung für Gesten (SignalHub)
Ziel:
Implementiere eine Funktion, mit der Trainingsdaten für eine bestimmte Geste aufgenommen und gespeichert werden können.
Anforderungen / Ideen:
Aufnahme starten
Starte SignalHub über einen Subprocess
Übergib einen Dateipfad für die Aufnahme
Überlege, welche Module aufgenommen werden sollen
Nimm entsprechende Änderungen in der
config.yamlvor
Interaktive Steuerung (optional)
Implementiere eine einfache Benutzerinteraktion: - Aufnahme speichern - Aufnahme verwerfen - Programm beenden
Tipp
Die Funktion
getch()(Aus dem Modul Linuxgetchoder bei Windowsmsvcrt) ist sehr hilfreich, um einzelne Tastendrücke direkt auszulesen (ohne Enter). Damit kannst du dir ein schnelles Labeling-Interface bauen.Beispiel:
ESC → speichern andere Taste → verwerfen
Daten sichten und bereinigen
Lade die aufgenommenen Daten
Überlege: - Welche Teile sind relevant? - Welche Frames sind leer oder unbrauchbar? - Sollten gewisse Sequenzen evtl. gar nicht benutzt werden?
Entferne unnötige Anteile (z. B. keine erkannte Hand am Anfang/Ende)
Speicherung
Speichere Daten strukturiert nach Labels (z. B. Ordnerstruktur)
Jede Aufnahme sollte einzeln gespeichert werden
Bemerkung
Die konkrete Umsetzung (Dateiformat, Struktur, Ablauf) ist bewusst offen. Entwickle ein System, das für dich sinnvoll ist und sich gut weiterverarbeiten lässt.
Warnung
Ziel ist nicht nur, dass es „funktioniert“, sondern ein sauberer und effizienter Workflow für Datensammlung.
- param times:
Wie viele Aufnahmen gemacht werden sollen. Kann frei angepasst werden (z. B. Endlosschleife oder interaktive Steuerung).
- type times:
int
- param label:
Name der Geste / Klasse. Kann ebenfalls frei gestaltet werden (z. B. dynamische Labels, mehrere Klassen gleichzeitig).
- type label:
str
- GestureRecognition.labeling.dataset_building(output_path)
TODO: dataset_building: Trainingsdatensatz aus aufgenommenen Gesten erstellen
Ziel:
Implementiere eine Funktion, die alle aufgenommenen Daten lädt, verarbeitet und in eine Form bringt, die von eurem Hidden-Markov-Modell (HMM) Classifier verwendet werden kann.
Anforderungen / Ideen:
Daten laden
Durchsuche deinen Trainingsdaten-Ordner
Organisiere Daten nach Labels
Feature-Extraktion / Preprocessing
Überlege: - Welche Features braucht dein Modell? - Wie transformierst du die Rohdaten sinnvoll?
Wende eine konsistente Verarbeitung auf alle Sequenzen an
Umgang mit Sequenzen
Daten sind zeitliche Sequenzen
Achte auf: - Unterschiedliche Längen - Konsistente Struktur
Validierung
Entferne unbrauchbare Daten (z. B. zu kurze oder fehlerhafte Sequenzen)
Ausgabeformat
Baue den Datensatz so, dass dein HMM direkt damit arbeiten kann
Das Format sollst du selbst definieren
Bemerkung
Es gibt hier keine vorgegebene „richtige“ Lösung. Wichtig ist, dass dein Datensatz konsistent und nutzbar ist.
Tipp
Denke wie ein System-Designer: Wie müssen Daten aussehen, damit Training und Inferenz sauber funktionieren?
Warnung
Inkonsistente Datenstrukturen sind eine der häufigsten Fehlerquellen beim Training von Sequenzmodellen.
Erweiterung (optional):
Normalisierung der Daten
Datenaugmentation
Debug-Ausgaben oder Visualisierung
- param output_path:
Zielpfad für den erzeugten Trainingsdatensatz.
- type output_path:
Path or str