Prozessor
Installation und Start
Bei der CoSy-Software handelt es sich um ein Python-Programm, das mit Poetry ausgeführt wird. Poetry ist ein Tool zur Verwaltung von Python-Abhängigkeiten und zur Erstellung von Python-Paketen.
Projekt von GitHub klonen
Zunächst muss das Projekt von GitHub geklont werden:
git clone git@github.com:uzl-cosy/cosy-processor.git
cd cosy-processor
Poetry installieren
Falls Poetry noch nicht installiert ist, kann es mit folgendem Befehl installiert werden:
curl -sSL https://install.python-poetry.org | python3 -
Stelle sicher, dass der Poetry-Pfad zur PATH-Umgebungsvariable hinzugefügt wird. Dies kann in der Regel durch Hinzufügen der folgenden Zeile zu ~/.bashrc, ~/.zshrc oder ~/.profile erreicht werden:
export PATH="$HOME/.local/bin:$PATH"
Anschließend die Shell neu starten oder den source-Befehl ausführen:
source ~/.bashrc # oder ~/.zshrc bzw. ~/.profile je nach Shell
Eine detaillierte Anleitung zur Installation von Poetry finden Sie in der Poetry-Dokumentation.
Abhängigkeiten mit Poetry installieren
Im Projektverzeichnis müssen die Abhängigkeiten mit Poetry installiert werden:
poetry install
CoSy-Prozessor starten
Nach der Installation der Abhängigkeiten kann der CoSy-Prozessor mit dem folgenden Befehl gestartet werden:
poetry run main
Konfiguration
Die Konfiguration einer CoSy-Einheit wird aus YAML-Dateien geladen. Die Konfigurationen können schichtenweise geladen werden und überschreiben dabei zuvor geladene Konfigurationen. Als Basis wird eine universelle default.yml geladen. In dieser sind Grundeinstellungen enthalten, sowie die Pfade zu allen KI- und Audio-Tools, die im Workflow genutzt werden können. Die Tools an sich werden ebenfalls hier definiert.
Zur Startzeit können beliebig viele Konfigurationsdateien übereinander geladen werden. Diese können über den Startparameter '-c' angegeben (in der CoSy-GUI im Textfeld 'Startbefehl' in den Einstellungen). Dieser erwartet eine Liste von String mit Pfaden zu den Konfigurationsdateien.
In einer laufenden CoSy-Instanz kann die Konfiguration nicht geändert werden. Der Workflow wird stets vollständig überschrieben. Es gilt also der zuletzt geladene Workflow.
Aufbau
application_setting
Grundlegende Informationen zu CoSy wie Programm-Name, Versionsnummer, lokales Datenverzeichnis
data_dir: Pfad zum Datenverzeichnis. Dort werden zwischenverarbeitete Daten abgelegtcleanup_on_launch: Löscht alle Dateien indata_dirbei Systemstart falls gesetzt
internal_api_settings
Einstellungen bezüglich der API
port: Post der API. Muss vom Frontend und der GUI erreichbar sein
tool_binaries
Auflistung der Start-Befehle der KI-Tools - 'tool-name': Name des (KI-)Tool-Typs - base_command: Auflistung der Segmente des Startbefehls
tools
Definition der Werkzeuge, enthält etwa Name des Werkzeugs, Typ, sowie Einstellungen (beispielsweise Pfad zum Plugin, StateFile, Anzahl der zu ladenden Werkzeuge) - 'tool-name' String, Spezifisches Tool, wird in workflow wiederverwendet. Kann auch aus mehreren einzelnen tools bestehen - `type: String, Art des Tools, kann generisch sein
num_worker: Int, Anzahl der zu startenden Instanzensettings: Tool-abhängig, beispielsweise Pfad zum Plugin / StateFileplugin_file: String, Pfad zur Plugin-Dateistate_file: String, Pfad zur StateFile-Datei (Speichert Einstellungen für Plugin in JUCE-Plugin-Host)
workflow
Definition des Informationsfluss der Verarbeitungskette. Für jedes Tool werden die vorangehenden Tools definiert. Es ist möglich, dass ein Tool Informationen von mehr als einem Vorgänger bezieht - 'tool-name': String, Referenziert 'tool-name' in tools - input: Liste von Strings, Eingangsordner / vorausgehende Tools
Beispiel
# Application settings
application_settings:
data_dir: ./data
cleanup_on_launch: true
# API settings
internal_api_settings:
port: 8000
# Tool binary locations and base commands
tool_binaries:
# Custom crosstalk suppression tool
audio_cleaner:
base_command:
- bin/AudioCleaner
- "-r"
- "0.0001"
# Custom lightweight plugin host
audio_enhancer:
base_command:
- bin/AudioEnhancer
# Custom asr wrapper
ai_transcript:
base_command:
- ".venv/bin/python"
- "-m"
- "laboratorium_ai_asr"
# Custom forced alignment wrapper
ai_forcedalignment:
base_command:
- ".venv/bin/python"
- "-m"
- "laboratorium_ai_forced_alignment"
# Custom pitch and loudness algorithm wrapper
ai_pitchloudness:
base_command:
- ".venv/bin/python"
- "-m"
- "laboratorium_ai_pitch_loudness"
# Custom nlp algorithm wrapper
ai_nlp:
base_command:
- ".venv/bin/python"
- "-m"
- "laboratorium_ai_nlp"
# Tool configurations
tools:
recorder:
type: audio_recorder
settings:
audio_device: "Wireless Microphone RX"
channels: 2
sample_rate: 44100
chunk_length: 30
cleaner:
type: audio_cleaner
num_workers: 4
settings:
compressor:
plugin_file: /Library/Audio/Plug-Ins/Components/FabFilter Pro-C 2.component
state_file: config/StateFiles/FabComp
gate:
plugin_file: /Library/Audio/Plug-Ins/Components/FabFilter Pro-G.component
state_file: config/StateFiles/FabGate
extractdialogue:
type: audio_enhancer
num_workers: 1
settings:
plugin_file: /Library/Audio/Plug-Ins/VST3/Acon Digital/ExtractDialogue.vst3
state_files: config/StateFiles/ExtractDialogue
transcript:
type: ai_transcript
num_workers: 1
forcedalignment:
type: ai_forcedalignment
num_workers: 1
pitchloudness:
type: ai_pitchloudness
num_workers: 1
nlp:
type: ai_nlp
num_workers: 1
audio_stitcher:
type: audio_stitcher
num_workers: 1
backend_packager:
type: backend_packager
num_workers: 1
backend_analysis_communicator:
type: communicator
num_workers: 1
settings:
format: json
url: https://backend.example.de/analysis
method: PUT
backend_audio_communicator:
type: communicator
num_workers: 1
settings:
format: file
method: POST
url: https://backend.example.de/audio
# Workflow graph defined by input relations
workflow:
recorder:
input: []
cleaner:
input: [recorder]
extractdialogue:
input: [cleaner]
transcript:
input: [extractdialogue]
forcedalignment:
input: [extractdialogue, transcript]
audio_stitcher:
input: [extractdialogue]
backend_packager:
input: [forcedalignment]
backend_analysis_communicator:
input: [backend_packager]
backend_audio_communicator:
input: [audio_stitcher]
API
Die API ermöglicht die Steuerung der CoSy-Software, sowie das Auslesen von Informationen zum System oder den Zustand der Software. Die Routen sind über die die IP-Adresse des Systems + Route erreichbar. Als Protokoll sollte HTTPS verwendet werden.l
/health
GET-Route. Informationen zum Computer
Return:
cpuLoad: Float, Auslastung des Prozessors auf 0,01% gerundetmemoryLoad: Float, Auslastung des Arbeitsspeicher auf 0,01% gerundet
/status
GET-Route. Informationen zur Cosy-Instanz
Return:
microphones: Liste der verwendeten Mikrophone:{'id': id, 'active': true/false}loading: Float: Fortschritt des Ladens der Modelle und Plugins. Zwischen 0.0 und 1.0progress: Float: Verarbeitungsfortschritt der Instanz. Zwischen 0.0 und 1.0recording: Bool: Aufnahmezustand
/recording/start
POST-Route. Startet eine Aufnahme
Parameter in JSON:
feedbackID: Bezeichner der AufnahmewordsNotToSay: Liste von Wörtern, die als negativ hervorgehoben werden sollenwordsToSay: Liste von Wörtern, die als positiv hervorgehoben werden sollen
/recording/stop
POST-Route, Stoppt die laufende Aufnahme. Keine Auswirkung, wenn keine Aufnahme läuft
/debug/event/file_create
POST-Route. Simuliert das Erzeugen einer Datei auf einem bestimmten Pfad und erzeugt die entsprechende Nachricht
Parameter in String:
file_path: Pfad für die 'file.created'-Event-Benachrichtigung
/debug/receiver/json
POST-Route. Debug-Route um ein JSON-Objekt an die API zu senden
Parameter in JSON:
- Beliebig
/debug/receiver/file
POST-Route. Debug-Route um eine Datei an die API zu senden. Gibt die Größe der Datei zurück, speichert diese nicht.