Qapdex's picture
Upload 9 files
a3584e8 verified
|
Raw
History Blame Contribute Delete
3.5 kB
# Audio Transcription Pipeline
A modular audio transcription pipeline with speech recognition, audience response classification, speaker diarization, meeting summarization, and ASCII visualization.
## Architecture
```
Audio Input (WAV/FLAC/MP3)
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Transcriber β”‚ ← faster-whisper (base model, CPU int8)
β”‚ Word-level timing β”‚ Language detection, beam search
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Audience Class. β”‚ ← Rule-based + AST (MIT/ast-finetuned-audioset)
β”‚ 10 event classes β”‚ Applause, laughter, cheering, music, etc.
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Diarizer β”‚ ← pyannote/speaker-diarization-3.1 or mock
β”‚ Speaker labeling β”‚ HF_TOKEN required for full diarization
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Summarizer β”‚ ← Qwen2.5-0.5B-Instruct GGUF
β”‚ Structured JSON β”‚ Overview, decisions, action items
β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ GlyphCast ASCII β”‚ ← Spectrogram β†’ ASCII art
β”‚ 7 charsets/3 modesβ”‚ Dark, light, hallow themes
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```
## Quick Start
### CLI
```bash
cd /app/audio_transcription_pipeline_1527
# Full transcription
python main.py transcribe data/jfk_speech.wav --output json
# With summary + ASCII visualization
python main.py transcribe data/jfk_speech.wav --summary --ascii
# All pipeline modules at once
python main.py all data/jfk_speech.wav --output json
# Audience response classification only
python main.py audience data/test_tone.wav --output json
# ASCII visualization only
python main.py ascii-viz data/jfk_speech.wav --mode dark
```
### Web Demo (Runs as background service)
- **Frontend (Gradio)**: Port 8080
- **Backend API (FastAPI)**: Port 8081
```bash
# Start backend
python -m uvicorn api:app --host 0.0.0.0 --port 8081 --log-level warning
# Start frontend (in another terminal)
python app.py
```
### API Endpoints
| Endpoint | Method | Description |
|----------|--------|-------------|
| `/health` | GET | Health check |
| `/transcribe` | POST | Upload audio β†’ transcription + analysis |
## Models Used
| Model | Source | Size | Purpose |
|-------|--------|------|---------|
| faster-whisper base | Systran/faster-whisper-base | ~150 MB | Speech recognition |
| AST audioset | MIT/ast-finetuned-audioset-10-10-0.4593 | ~230 MB | Audience classification |
| Qwen2.5-0.5B-Instruct | Qwen/Qwen2.5-0.5B-Instruct-GGUF | ~350 MB | Meeting summarization |
| Whisper-large-v3-turbo | openai/whisper-large-v3-turbo | ~2 GB | Encoder for hybrid model |
| Qwen3-8B-Instruct | Qwen/Qwen3-8B-GGUF | ~5 GB | LLM for hybrid model |
## Hybrid Speech-Transcription Model
See `hybrid_model/ARCHITECTURE.md` for details on the Encoder-Projector-LLM architecture.
## Requirements
- Python 3.10+
- CPU with ~8GB RAM minimum
- Optional: HuggingFace token for pyannote diarization
## License
MIT