Eine Node.js-Anwendung, die Audio-Aufnahmen mit Whisper-Tiny transkribiert und mit GPT-OSS:20B in strukturierte JSON-Daten umwandelt.
- Das Resultat ist noch zum Teil, noch fehlerhaft. Verbesserungsvorschläge gerne an Peter.
- 🎤 Audio-Aufnahme: Direkte Aufnahme über das Web-Interface
- 📁 Datei-Upload: Upload bestehender Audio-Dateien
- 🔄 Lokale Speech-to-Text: Transkription mit Python faster-whisper (small-Modell)
- 🎵 Audio-Konvertierung: Automatische Konvertierung zu 16kHz mono WAV (FFmpeg)
- 🧠 Lokale KI-Strukturierung: Automatische Kategorisierung mit GPT-OSS:20B (Ollama)
- � Intelligente Datenkorrektur: Automatische Korrektur von Transkriptionsfehlern
- 📝 Medizinische Textverarbeitung: Erkennung und Formatierung medizinischer Begriffe
- �📊 JSON-Ausgabe: Strukturierte Daten nach medizinischen Kategorien
- 🗑️ Automatische Bereinigung: Audio-Dateien werden nach Verarbeitung automatisch gelöscht
Die App kategorisiert und korrigiert Audio-Inhalte automatisch nach:
- Vorname: Erkennt deutsche Vornamen, auch bei Transkriptionsfehlern
- Nachname: Extrahiert Familiennamen aus dem Kontext
- Alter: Konvertiert Zahlwörter ("fünfzig Jahre" → "50")
- Geschlecht: Erkennt "männlich/weiblich/divers" in verschiedenen Formulierungen
- Blutdruck: Korrigiert Werte ("einhundertdreißig zu achtzig" → "130/80 mmHg")
- Körpertemperatur: Formatiert Temperaturen ("achtunddreißig Grad" → "38.0°C")
- Weitere Vitalparameter: Puls, Sauerstoffsättigung, Atemfrequenz etc.
- Diagnose Liste (1-5): Medizinische Diagnosen, Symptome, Beschwerden
"Hallo, mein Name ist Max Mustermann, ich bin fünfzig Jahre alt, männlich. Mein Blutdruck ist einhundertdreißig zu achtzig, Temperatur achtunddreißig Komma fünf Grad. Ich habe Kopfschmerzen und Fieber."
{
"vorname": "Max",
"nachname": "Mustermann",
"alter": "50",
"geschlecht": "männlich",
"blutdruck": "130/80 mmHg",
"koerpertemperatur": "38.5°C",
"weitere_vitalparameter": [],
"diagnose_liste": ["Kopfschmerzen", "Fieber"]
}- Node.js (v18 oder höher)
- Python (v3.8 oder höher)
- FFmpeg (für Audio-Konvertierung)
- Ollama (für lokale LLM-Integration)
git clone <repository-url>
cd speech-to-structurenpm install# Virtual Environment erstellen
python3 -m venv .venv
# Virtual Environment aktivieren
# Linux/macOS:
source .venv/bin/activate
# Windows:
# .venv\Scripts\activate
# Python-Abhängigkeiten installieren
pip install faster-whispermacOS (mit Homebrew):
brew install ffmpegUbuntu/Debian:
sudo apt update
sudo apt install ffmpegWindows:
- Lade FFmpeg von https://ffmpeg.org/download.html herunter
- Füge FFmpeg zum PATH hinzu
# Ollama installieren (macOS/Linux)
curl -fsSL https://ollama.ai/install.sh | sh
# Ollama starten
ollama serve &
# GPT-OSS:20B Modell laden (13 GB)
ollama pull gpt-oss:20b
# Alternative: Kleineres Modell für Tests
ollama pull llama3:8bcp .env.example .envBearbeite die .env-Datei und passe die Pfade an:
# Python-Integration für faster-whisper
PYTHON_BIN=/path/to/your/project/.venv/bin/python
WHISPER_MODEL_SIZE=small
# GPT-OSS:20B Konfiguration
GPT_OSS_ENDPOINT=http://localhost:11434/api/generate
# Server Port
PORT=3000# Python Virtual Environment aktivieren (falls nicht bereits aktiv)
source .venv/bin/activate
# Server starten
npm startÖffne http://localhost:3000 in deinem Browser
Vollständig installiert und konfiguriert:
- faster-whisper: Lokale Speech-to-Text Transkription (244 MB small-Modell)
- FFmpeg: Audio-Konvertierung zu 16kHz mono WAV
- Python Virtual Environment: Isolierte Python-Umgebung
Bereits installierte Modelle:
- gpt-oss:20b: Lokale Text-zu-JSON Strukturierung (13 GB)
- llama3:8b: Alternative für Strukturierung (4.7 GB)
-
Audio aufnehmen:
- Klicke auf "Aufnahme starten"
- Spreche den zu strukturierenden Text
- Klicke auf "Aufnahme beenden"
-
Datei hochladen:
- Wähle eine Audio-Datei aus
- Klicke auf "Datei verarbeiten"
-
Ergebnis betrachten:
- Die Transkription wird angezeigt
- Die strukturierten Daten erscheinen in kategorisierter Form
- Eingabe: WAV, MP3, M4A, OGG, FLAC, WEBM
- Intern konvertiert zu: 16kHz mono WAV (optimal für Whisper)
- Maximale Dateigröße: 25MB
# Python Virtual Environment aktivieren
source .venv/bin/activate
# Server im Entwicklungsmodus starten
npm run dev# Python-Whisper testen
source .venv/bin/activate
python transcribe.py test.wav # (benötigt eine test.wav Datei)
# Server-Health-Check
curl http://localhost:3000/health# Virtual Environment neu erstellen
rm -rf .venv
python3 -m venv .venv
source .venv/bin/activate
pip install faster-whisper# FFmpeg-Version überprüfen
ffmpeg -version
# Pfad überprüfen
which ffmpeg# Ollama-Status überprüfen
ollama list
# Ollama neu starten
ollama serve
# Modell-Status überprüfen
curl http://localhost:11434/api/tags- Backend: Node.js, Express.js
- Frontend: Vanilla HTML/CSS/JavaScript
- Audio-Verarbeitung: Web Audio API, MediaRecorder
- Audio-Konvertierung: FFmpeg (über fluent-ffmpeg)
- File-Upload: Multer
- Speech-to-Text: Python faster-whisper (OpenAI Whisper)
- Text-Strukturierung: Ollama GPT-OSS:20B
- Python Integration: child_process execFile
- Stelle sicher, dass die virtuelle Umgebung aktiviert ist:
source .venv/bin/activate - Überprüfe den Python-Pfad in der
.env-Datei - Installiere faster-whisper neu:
pip install --upgrade faster-whisper
- Überprüfe die Audio-Qualität und -format
- Stelle sicher, dass FFmpeg installiert ist
- Maximale Dateigröße: 25MB
- Das erste Mal dauert länger (Modell wird heruntergeladen: ~75MB)
- Überprüfe die Python-Umgebung und faster-whisper Installation
- Prüfe die Netzwerkverbindung für den ersten Model-Download
- Überprüfe ob Ollama läuft:
ollama serve - Stelle sicher, dass gpt-oss:20b installiert ist:
ollama pull gpt-oss:20b - Prüfe die API-Verbindung:
curl http://localhost:11434/api/tags
MIT License
Erstellt mit KI
