Transkriptor ist eine modulare Streamlit-Anwendung zur lokalen und datenschutzkonformen Transkription und kontrollierten Anonymisierung von Audioaufnahmen. Das Tool wurde für Soziale Arbeit, Forschung, Dokumentation und andere sensible Anwendungsfälle entwickelt, bei denen Daten lokal verbleiben müssen.
- Features
- Systemanforderungen
- Warum nur NVIDIA GPU?
- Installation
- Konfiguration
- Verwendung
- Projektstruktur
- Abhängigkeiten
- Troubleshooting
- Zukünftige Erweiterungen
- Lizenz
- Mikrofonaufnahme mit Auswahl des Eingabegeräts
- Live-Pegelanzeige während der Aufnahme
- Datei-Upload für
.wav,.mp3,.m4a
- Vorverarbeitung (optional): Resampling auf 16kHz, Normalisierung, Rauschunterdrückung
- Lokale Transkription mit faster-whisper (GPU-beschleunigt)
- Zeitstempel für jedes Segment (ein-/ausschaltbar)
- Speaker Diarization mit pyannote.audio
- Anonymisierte Sprecher als "Person 1", "Person 2", etc.
- Dummy-Fallback falls kein Hugging Face Token vorhanden
- NER-basierte Anonymisierung mit spaCy (deutsches Modell)
- Ersetzt automatisch:
- Personennamen (
[PER]) - Orte (
[LOC]) - Organisationen (
[ORG]) - E-Mails (
[EMAIL]) - Telefonnummern (
[TELEFON]) - Daten (
[DATUM]) - Zahlen (
[ZAHL])
- Personennamen (
- Export als
.txtoder.json - Debug-Modi: Anzeige von Diarization- und Transkript-Segmenten
- Verwerfen & Neustart Button für schnelles Zurücksetzen
| Komponente | Minimum | Empfohlen |
|---|---|---|
| Betriebssystem | Windows 10, macOS 10.15+, Linux (Ubuntu 20.04+) | Windows 11, macOS 12+, Ubuntu 22.04+ |
| Python | 3.8+ | 3.10+ |
| RAM | 8 GB | 16 GB+ |
| GPU | - | NVIDIA GPU mit 6+ GB VRAM |
| CUDA | - | CUDA 11.8 oder 12.x |
| Speicher | 5 GB (Modelle) | 10 GB+ |
Kurze Antwort: Die meisten ML-Frameworks (PyTorch, TensorFlow, CTranslate2) nutzen CUDA, NVIDIAs proprietäre Compute-Plattform.
-
CUDA-Abhängigkeit:
faster-whisperbasiert auf CTranslate2, das für CUDA optimiert istpyannote.audionutzt PyTorch, das primär CUDA unterstützt- NVIDIA-Treiber + CUDA Toolkit sind Standard in der ML-Community
-
Alternativen und ihre Einschränkungen:
- AMD ROCm: Nur auf bestimmten AMD-Karten, oft Linux-only, instabil
- Intel GPUs: Experimentell, kaum Library-Support
- Apple Silicon (M1/M2/M3): PyTorch hat MPS-Support, aber CTranslate2 nicht vollständig kompatibel
-
Warum keine CPU-Optimierung?:
- CPU-Inferenz ist 10-50x langsamer als GPU
- Große Whisper-Modelle (
large-v3) benötigen GPU-VRAM für performante Verarbeitung - Speaker Diarization (pyannote) ist extrem rechenintensiv
Empfehlung: NVIDIA GPU mit mindestens 6 GB VRAM (z.B. RTX 3060, RTX 4060, GTX 1660 Ti)
git clone https://github.com/stickmaaaan/TranscriptAutomation.git
cd TranscriptAutomationpython3 -m venv .venv
source .venv/bin/activatepython -m venv .venv
.venv\Scripts\Activate.ps1python -m venv .venv
.venv\Scripts\activate.batpip install --upgrade pip
pip install -r requirements.txtWichtig: Zuerst NVIDIA-Treiber + CUDA Toolkit installieren!
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install -r requirements.txtpip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install -r requirements.txtCUDA Toolkit Download: https://developer.nvidia.com/cuda-downloads
PyTorch Installation Wizard: https://pytorch.org/get-started/locally/
- Registriere dich bei Hugging Face
- Gehe zu Settings → Access Tokens
- Klicke auf "New token"
- Name: z.B.
transkriptor-token - Type: Read
- Kopiere den Token (beginnt mit
hf_...)
Folgende Modelle müssen manuell akzeptiert werden:
Klicke auf jeder Seite auf "Agree and access repository"
{
"HF_TOKEN": "hf_deinTokenHier..."
}Alternative: Token direkt in der UI eingeben (Sidebar → "Token bearbeiten")
Für deutsche Anonymisierung:
python -m spacy download de_core_news_lgAlternative Modelle (falls Speicher knapp):
de_core_news_md(mittlere Genauigkeit, 40 MB)de_core_news_sm(niedrige Genauigkeit, 15 MB)
spaCy Modelle: https://spacy.io/models/de
nvidia-smiErwartete Ausgabe:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 535.104.05 Driver Version: 535.104.05 CUDA Version: 12.2 |
+-----------------------------------------------------------------------------+
Falls nvidia-smi nicht funktioniert:
- Windows: NVIDIA-Treiber Download
- Linux:
sudo apt install nvidia-driver-535(Ubuntu)
import torch
print(f"PyTorch Version: {torch.__version__}")
print(f"CUDA verfügbar: {torch.cuda.is_available()}")
print(f"CUDA Version: {torch.version.cuda}")
print(f"GPU Name: {torch.cuda.get_device_name(0)}")Erwartete Ausgabe:
PyTorch Version: 2.1.0+cu118
CUDA verfügbar: True
CUDA Version: 11.8
GPU Name: NVIDIA GeForce RTX 3060
cd transcriptor
streamlit run app.pyErwartete Ausgabe:
You can now view your Streamlit app in your browser.
Local URL: http://localhost:8501
Network URL: http://192.168.x.x:8501
-
Token überprüfen (Sidebar)
- Grüner Haken ✅ = Token gültig
- Roter Fehler ❌ = Token ungültig/fehlt
-
Pipeline-Einstellungen (Sidebar, alle optional)
- ☑️ Preprocessing aktivieren
- ☑️ Text-Anonymizer aktivieren
- ☑️ Sprecher-Diarization aktivieren
- ☑️ Zeitstempel anzeigen
- ☑️ Dummy-Fallback erzwingen (für Tests ohne Token)
-
Audio-Input wählen
- Aufnahme: Mikrofon auswählen → Dauer einstellen → Aufnahme starten
- Upload: Datei hochladen (
.wav,.mp3,.m4a)
-
Transkription starten
- Button "🚀 Transkription starten" klicken
- Warten (je nach GPU/CPU: 1-10 Minuten pro Stunde Audio)
-
Ergebnisse exportieren
- 📄 Als TXT exportieren: Reiner Text mit Zeitstempeln
- 📋 Als JSON exportieren: Strukturierte Daten
- 🗑️ Verwerfen & Neustart: Session zurücksetzen
Mit Diarization + Zeitstempel:
[0.00-2.50] Person 1: Guten Tag, wie kann ich Ihnen helfen?
[2.50-5.00] Person 2: Ich hätte gerne Informationen zu [ORG].
[5.00-8.20] Person 1: Natürlich, [PER] kann Ihnen da weiterhelfen.
Nur Transkript (ohne Optionen):
Guten Tag, wie kann ich Ihnen helfen?
Ich hätte gerne Informationen zu dem Projekt.
Natürlich, unser Kollege kann Ihnen da weiterhelfen.
TranscriptAutomation/
│
├── transcriptor/
│ ├── app.py # Haupt-Streamlit-App
│ ├── config.json # HF Token (optional, nicht in Git)
│ │
│ └── modules/
│ ├── recorder.py # Mikrofonaufnahme + Audio-Handling
│ ├── transcribe.py # Whisper-Transkription (Hauptlogik)
│ ├── speaker_diarization.py # pyannote Speaker Diarization
│ ├── preprocessing.py # Audio-Normalisierung/Resampling
│ └── anonymize.py # spaCy NER-Anonymisierung
│
├── requirements.txt # Python-Abhängigkeiten
├── README.md # Diese Datei
├── .gitignore # Git-Ausschlüsse
└── screenshot/
└── TranscriptorWF.png # UI-Screenshot
| Paket | Version | Zweck |
|---|---|---|
streamlit |
>=1.28.0 | Web-UI Framework |
faster-whisper |
>=0.10.0 | Whisper-Transkription (CTranslate2) |
torch |
>=2.0.0 | ML-Backend / GPU-Beschleunigung |
torchaudio |
>=2.0.0 | Audio-Tensor-Operationen |
pyannote.audio |
>=3.0.0 | Speaker Diarization |
| Paket | Version | Zweck |
|---|---|---|
sounddevice |
>=0.4.6 | Mikrofonaufnahme (PortAudio) |
scipy |
>=1.10.0 | Audio-Resampling |
librosa |
>=0.10.0 | Audio-Feature-Extraction |
soundfile |
>=0.12.0 | WAV/FLAC/OGG I/O |
noisereduce |
>=3.0.0 | Rauschunterdrückung |
| Paket | Version | Zweck |
|---|---|---|
spacy |
>=3.6.0 | NER (Named Entity Recognition) |
de_core_news_lg |
>=3.6.0 | Deutsches Sprachmodell |
| Paket | Version | Zweck |
|---|---|---|
numpy |
>=1.24.0 | Array-Operationen |
huggingface_hub |
>=0.19.0 | HF Model Download/Auth |
streamlit>=1.28.0
faster-whisper>=0.10.0
torch>=2.0.0
torchaudio>=2.0.0
pyannote.audio>=3.0.0
sounddevice>=0.4.6
scipy>=1.10.0
librosa>=0.10.0
soundfile>=0.12.0
noisereduce>=3.0.0
spacy>=3.6.0
numpy>=1.24.0
huggingface-hub>=0.19.0Installation (siehe oben):
pip install -r requirements.txtLösung:
- Token in
config.jsonoder UI eingeben (Sidebar → "Token bearbeiten") - Falls vorhanden: Modelle auf HF akzeptieren (siehe Hugging Face Token)
Ursachen:
- Modelle nicht auf Hugging Face akzeptiert
- Token hat falsche Permissions (muss
readsein) - Netzwerkprobleme beim Download
Lösung:
- Manuell auf HF einloggen und Modelle akzeptieren
- Token neu erstellen mit
read-Scope - Proxy/Firewall-Einstellungen prüfen
Ursachen:
- PyTorch für CPU installiert (nicht CUDA)
- NVIDIA-Treiber fehlt/veraltet
- CUDA Toolkit nicht installiert
Lösung:
# GPU-Check
nvidia-smi
# PyTorch neu installieren (CUDA 11.8)
pip uninstall torch torchvision torchaudio
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# Test
python -c "import torch; print(torch.cuda.is_available())"Linux:
sudo apt-get install portaudio19-dev python3-pyaudiomacOS:
brew install portaudioWindows: Normalerweise kein Problem, falls doch:
- Visual C++ Redistributables installieren
pip install sounddevice --force-reinstall
Lösung:
python -m spacy download de_core_news_lgUrsache: Keine NVIDIA GPU verfügbar oder CUDA nicht richtig Installiert!
Temporäre Lösung:
- Kleineres Whisper-Modell nutzen (
base,smallstattlarge) - Kürzere Audio-Dateien verarbeiten
- Geduld haben (10-30 Minuten für 1 Stunde Audio auf CPU)
Dauerhafte Lösung: NVIDIA GPU installieren
In der Sidebar:
- ☑️ Debug: Diarization Segmente anzeigen
- ☑️ Debug: Transcript Segmente anzeigen
Zeigt detaillierte Zeitstempel und Speaker-Labels.
- Streaming-Transkription während der Aufnahme
- Intuitive User Experience mit Live-Feedback
- WebSocket-basierte Architektur für niedrige Latenz
- Cloud-Deployment (AWS/GCP/Azure) mit GPU-Instanzen
- Ressourcenschonend für Client (nur Browser benötigt)
- Schnellere Verarbeitung durch dedizierte Server-GPUs
- Multi-User-Support mit Queue-System
- LLM-basierte Zusammenfassung (GPT-4, Claude, Llama)
- Automatische Extraktion der wichtigsten Punkte
- Konjunktiv-Umschreibung für objektive Darstellung
- Export als Executive Summary
Dieses Projekt steht unter der MIT-Lizenz. Siehe LICENSE für Details.
- faster-whisper: MIT License
- pyannote.audio: MIT License
- spaCy: MIT License
- Whisper (OpenAI): MIT License
GitHub Issues: TranscriptAutomation/issues
Häufige Probleme: Siehe Troubleshooting
- OpenAI Whisper: State-of-the-Art Speech-to-Text
- pyannote.audio: Robuste Speaker Diarization
- spaCy: Schnelle NLP-Pipeline
- Streamlit: Einfaches UI-Framework
Made with ❤️ for privacy-conscious transcription
