https://github.com/m0nkkke/whisperx-protocol-manager
A simple protocol manager for your audios
https://github.com/m0nkkke/whisperx-protocol-manager
fastapi huggingface pyannote-audio python whisper whisperx
Last synced: 5 months ago
JSON representation
A simple protocol manager for your audios
- Host: GitHub
- URL: https://github.com/m0nkkke/whisperx-protocol-manager
- Owner: m0nkkke
- Created: 2025-06-19T05:06:58.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-07-09T12:20:21.000Z (12 months ago)
- Last Synced: 2025-07-26T04:03:57.873Z (11 months ago)
- Topics: fastapi, huggingface, pyannote-audio, python, whisper, whisperx
- Language: HTML
- Homepage:
- Size: 8.15 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# ποΈ WhisperX Protocol Manager
ΠΠ΅Π±ΠΎΠ»ΡΡΠΎΠ΅ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° FastAPI Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ ΡΡΠ°Π½ΡΠΊΡΠΈΠ±Π°ΡΠΈΠΈ Π°ΡΠ΄ΠΈΠΎΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ Π΄ΠΈΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠΏΠΈΠΊΠ΅ΡΠΎΠ² ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΡΠ°ΡΠΊΠΈΡ
ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠ² ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ.
## π ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ
1. π€ ΠΠ°Π³ΡΡΠ·ΠΊΠ° Π°ΡΠ΄ΠΈΠΎΡΠ°ΠΉΠ»ΠΎΠ² ΡΠΎΡΠΌΠ°ΡΠΎΠ²: `ogg`, `wav`, `mp3`, ΠΈ Π΄Ρ.
2. π Π’ΡΠ°Π½ΡΠΊΡΠΈΠ±Π°ΡΠΈΡ Π°ΡΠ΄ΠΈΠΎ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΡΠΊΠ°ΡΠ°ΡΡ ΡΠ΅ΠΊΡΡ.
3. π§βπ€βπ§ ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° **Π΄ΠΈΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠΏΠΈΠΊΠ΅ΡΠΎΠ²** (ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ "ΠΊΡΠΎ ΠΈ ΠΊΠΎΠ³Π΄Π° Π³ΠΎΠ²ΠΎΡΠΈΠ»") Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π³ΠΎΠ²ΠΎΡΡΡΠΈΡ
.
4. π§ ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ **ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°/ΠΊΠΎΠ½ΡΠΏΠ΅ΠΊΡΠ°** ΠΏΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΠΈ.
5. βοΈ ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΡΠ°Π½ΡΠΊΡΠΈΠ±Π°ΡΠΈΠΈ (ΠΌΠΎΠ΄Π΅Π»Ρ, ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΠΈ Π΄Ρ.).
6. π¬ ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°Π΄Π°Π²Π°ΡΡ **ΠΏΡΠΎΠΌΠΏΡΡ** (ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ) Π΄Π»Ρ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΡΡΠ°Π½ΡΠΊΡΠΈΠ±Π°ΡΠΈΠΈ ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
## πΈ ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
[](https://ibb.co/vvCp77fT)
## π Π‘ΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°
```
βββ app.py # ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ FastAPI ΡΠ΅ΡΠ²Π΅Ρ
βββ index.html # Π²Π΅Π±-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ
βββ styles.css # ΡΡΠΈΠ»ΠΈ
βββ requirements.txt # Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°
βββ .env # ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
βββ prompts/ # ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΏΡΠΎΠΌΠΏΡΡ (ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ .txt)
βββ reference_voices/ # Π³ΠΎΠ»ΠΎΡΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ°Π·ΡΡ Π΄Π»Ρ Π΄ΠΈΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ
```
## π οΈ Π’Π΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ
- [FastAPI](https://fastapi.tiangolo.com/)
- [WhisperX](https://github.com/m-bain/whisperx)
- [PyAnnote-Audio](https://github.com/pyannote/pyannote-audio)
- [Hugging Face Transformers](https://huggingface.co/)
- [Gemini API (Google)](https://ai.google.dev/)
## π§ ΠΠΈΠ°ΡΠΈΠ·Π°ΡΠΈΡ ΠΈ Π±Π°Π½ΠΊ Π³ΠΎΠ»ΠΎΡΠΎΠ²
ΠΠ»Ρ Π΄ΠΈΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ **Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠΉ Π±Π°Π½ΠΊ (reference voices)**.
Π§ΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ²ΠΎΠΉ Π³ΠΎΠ»ΠΎΡ, ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ **ΠΎΡΡΡΠ²ΠΎΠΊ ΡΠ΅ΡΠΈ Π΄Π»ΠΈΠ½ΠΎΠΉ ΠΎΡ 15 Π΄ΠΎ 30 ΡΠ΅ΠΊΡΠ½Π΄** Π² ΠΏΠ°ΠΏΠΊΡ `reference_voices/`.
ΠΠΌΡ ΡΠ°ΠΉΠ»Π° Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΌΠ΅ΡΠΊΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, `ivan.wav` β `ivan:` Π² ΡΠ΅ΠΊΡΡΠ΅).
> ΠΡΠ»ΠΈ Π½Π΅ ΡΠΊΠ°Π·Π°Π½Ρ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠ΅ Π³ΠΎΠ»ΠΎΡΠ°, Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΡΠΏΠΈΠΊΠ΅ΡΠΎΠ².
## π¬ ΠΡΠΎΠΌΠΏΡΡ
ΠΠ»Ρ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ ΠΈ ΠΊΠΎΠ½ΡΠΏΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ **ΠΏΡΠΎΠΌΠΏΡΡ**.
Π Π°Π·ΠΌΠ΅ΡΡΠΈΡΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ Π² Π²ΠΈΠ΄Π΅ `.txt` ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΠΏΠ°ΠΏΠΊΠ΅ `prompts/`.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
- `context.txt` β ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΈΡΡΠ°ΡΠΈΠΈ (Π»Π΅ΠΊΡΠΈΡ, ΡΠΎΠ²Π΅ΡΠ°Π½ΠΈΠ΅ ΠΈ Ρ.Π΄.)
- `names.txt` β ΡΠΏΠΈΡΠΎΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ
ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ°
- `vocabulary.txt` β ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΏΠΎ ΡΠ΅ΠΌΠ΅
## π¦ Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
```bash
git clone https://github.com/yourusername/audio-transcriber-api.git
cd audio-transcriber-api
python -m venv venv
source venv/bin/activate # ΠΈΠ»ΠΈ .\venv\Scripts\activate Π΄Π»Ρ Windows
pip install -r requirements.txt
```
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ .env ΡΠ°ΠΉΠ» Π² ΠΊΠΎΡΠ½Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°:
```
# Π’ΠΎΠΊΠ΅Π½ Hugging Face Π΄Π»Ρ pyannote
HUGGINGFACE_TOKEN=Π²Π°Ρ_ΡΠΎΠΊΠ΅Π½
# API ΠΊΠ»ΡΡ Gemini
GEMINI_API_KEY=Π²Π°Ρ_ΠΊΠ»ΡΡ
# ΠΡΠΎΠΊΡΠΈ (Π΅ΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ)
HTTP_PROXY=
HTTPS_PROXY=
# ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ WhisperX
MODEL_NAME=large-v3
COMPUTE_TYPE=int8
# ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π΄ΠΈΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ (ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌΡΠ΅)
MIN_SPEAKERS=2
MAX_SPEAKERS=2
SEGMENTATION_THRESHOLD=0.60
SEGMENTATION_MIN_DURATION_OFF=0.20
CLUSTERING_THRESHOLD=0.50
CLUSTERING_MIN_CLUSTER_SIZE=8
```
## π Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ
### Hugging Face Access
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π΄ΠΈΠ°ΡΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΡΠ΅ΡΠ΅Π· PyAnnote Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ:
1. ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠΊΠ΅Π½ Π½Π° [Hugging Face](https://huggingface.co/settings/tokens)
2. **ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»ΡΠΌ:**
- [pyannote/segmentation](https://huggingface.co/pyannote/segmentation)
- [pyannote/speaker-diarization](https://huggingface.co/pyannote/speaker-diarization)
3. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½ΡΠΆΠ½ΠΎ:
- ΠΠ΅ΡΠ΅ΠΉΡΠΈ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅
- ΠΠ°ΠΆΠ°ΡΡ "Agree to access"
- ΠΠ²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ
### Gemini API
ΠΠ»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠ² ΡΡΠ΅Π±ΡΠ΅ΡΡΡ:
1. ΠΠΎΠ»ΡΡΠΈΡΡ API ΠΊΠ»ΡΡ Π² [Google AI Studio](https://ai.google.dev/)
2. ΠΠΎΠ±Π°Π²ΠΈΡΡ Π΅Π³ΠΎ Π² `.env` ΡΠ°ΠΉΠ» ΠΊΠ°ΠΊ `GEMINI_API_KEY`
βΆοΈ ΠΠ°ΠΏΡΡΠΊ
```
uvicorn app:app --reload
```
ΠΡΠΊΡΠΎΠΉΡΠ΅ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅: http://localhost:8000
## βοΈ ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ
| ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
|----------------------------------|--------------------------------------------------------------------------|
| `MODEL_NAME` | ΠΠΎΠ΄Π΅Π»Ρ WhisperX (`base`, `medium`, `large-v3`) |
| `COMPUTE_TYPE` | Π’ΠΈΠΏ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ (`int8`, `float16`, `float32`) |
| `MIN_SPEAKERS`, `MAX_SPEAKERS` | ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡΡ
ΡΠΏΠΈΠΊΠ΅ΡΠΎΠ² (ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅) |
| `SEGMENTATION_THRESHOLD` | ΠΠΎΡΠΎΠ³ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΠ΅ΡΠΈ (ΠΎΠΏΡΠΈΠΌΡΠΌ `0.60`) |
| `SEGMENTATION_MIN_DURATION_OFF` | ΠΠΈΠ½. ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠΈΡΠΈΠ½Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ (Π² ΡΠ΅ΠΊΡΠ½Π΄Π°Ρ
) |
| `CLUSTERING_THRESHOLD` | ΠΠΎΡΠΎΠ³ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΠΊΠ΅ΡΠ° |
| `CLUSTERING_MIN_CLUSTER_SIZE` | ΠΠΈΠ½. ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ |
## π ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
- **ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΡΠ°ΠΉΠ»Π°:**
ΠΠ°Π³ΡΡΠ·ΠΈΡΠ΅ Π°ΡΠ΄ΠΈΠΎΡΠ°ΠΉΠ» ΡΠ΅ΡΠ΅Π· Π²Π΅Π±-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ.
- **ΠΠΈΠ°ΡΠΈΠ·Π°ΡΠΈΡ:**
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ»Π°Π³ "ΠΠΈΠ°ΡΠΈΠ·Π°ΡΠΈΡ", Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΏΠΈΠΊΠ΅ΡΠΎΠ² ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠ΅ Π³ΠΎΠ»ΠΎΡΠ° (ΠΏΠ°ΠΏΠΊΠ° `reference_voices/`).
- **ΠΡΠΎΠΌΠΏΡΡ:**
ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ Π² ΠΏΠ°ΠΏΠΊΡ `prompts/` ΠΏΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΡΠΊΠΎΠΌ ΡΡΠ°Π½ΡΠΊΡΠΈΠΏΡΠΈΠΈ.