Features als hdf5 speichern
WORK IN PROGRESS
Einleitung
Für jeden Song in der Datenbank müssen Merkmalsvektorn für Rhythm-Track, Timbre-Track und Pitch-Track extrahiert werden. Das erzeugt im Verzeichnis eine JSON-Datei, die die Daten alle Tracks in Textform enthält. Hinzu kommen dann noch .hmm-Dateien undzwar eine für jedes Feature im Timbre-Track und eine für den Rhythm_Track. ESRA verwendet all diese Daten nicht: sie werden von apollon extrahiert und werden nur von apollon, z.B. für HMMs oder SOM, wiederverwendet.
Die Menge der anfallenden Daten ist immens. JSON ist allerdings nicht der beste Weg zur dauerhaften Sicherung großer Datenmengen. Da diese Daten, mit ausnahme des csv-Exports, auch nicht in der GUI verwendet werden, stellt JSON tatsächlich einen Umweg in der Kommunikation zwischen den apollon Subprogrammen dar.
Ich möchte daher die Sicherung der extrahierten Merkmale, der HMMs und der SOMs auf HDF5 umstellen, ein binäres Format das zur Speicherung großer Datenmenge entworfen wurde und schnelle I/O-Zeite garantiert. Mit h5py steht außerdem ein Python-Package zur Verfügung, dass einfachen Zugriff auf das HDF5-Dateisystem ermöglicht.
Was würde sich ändern?
Nur noch eine Datei
Statt mehrer Dateien pro Song in ESRA zu verwalten würde es nur eine Datei geben, die alle Merkmale für alle Tracks für alle Songs enthält und von apollon verwaltet wird. Ebenso würde es nur eine Datei geben, die alle HMMs für alle Tracks für alle Songs verwaltet. Dadurch werden zuerst die Zugriffszeiten optimiert. Es muss nur noch eine Datei geöffnet werden, statt einer pro Song. Da apollon in diesem Szenario direkten Zugriff auf alle einmal extrahierten Merkmale aller Songs hat, wird die Berechnung von HMMs, und vor allem von SOMs immens erleichtert und, vor allem, beschleunigt. Es wäre dadurch z.B. möglich neue SOMs aus einer Songauswahl des Nutzers zu berechnen.
Definition der Pfade
Es müsste definiert werden wo, auf dem Server apollon die Feature-, HMM-, und SOM-Dateien speichert.
GUI zugriff auf die Daten
Die aktuell einzige Schnittschtelle zwischen GUI und den Merkmalsdaten ist der csv-Export. Dies kann auf drei Arten geregelt werden: - Direkter Zugriff des Servers auf die HDF5-Dateien - Server fragt Daten mittles apollon Subkommand an und bekommt JSON - Server fragt Daten mittels apollon Subkommanda an und bekommt zip.
Ein Subkommando könnte dies fogendermaßen regeln:
apollon export SONG_IDS FEATURE_PATHS [--csv, --json] [-o --out_path]
Dabei sein SONG_IDS
eine eindeutiger Name, unterdem der Server die betreffende Datei verwaltet und der ebenfalls alls Schlüssel in den HDF5-Feature-Dateien hinterlegt ist. Für FEATURE_PATHS
gelten dieselben Regeln wie beim apollon hmm
Kommando. Beispiel:
apollon export --csv EAn-011-A2 onset.peaks spectrum.perceptual.roughness spectrum.spectral.centroid hmm.params.gamma -o data.zip
Dieser Aufruf würde dann drei Dateien erstellen, eine für Onset-Features, eine Spektrum-Merkmale und eine für HMM-Parameter. Diese würden dann zu "data.zip" zusammengefasst und gespeichert. Der Server kann die zip dann zu Download bereithalten und anschließend wieder löschen.
Alternativ könnte man das Kommando so gestalten:
apollon export DSRC_FILE
,
wobei DSRC_FILE
ein JSON ist, das die Nutzereingaben enthält:
{"song_ids": [ ... ],
"track": ...,
"features": [ ... ],
"format": ...
}
dadurch könnte man sich wieder lange Kommandozeilen sparen.