Небольшое веб-приложение на FastAPI для загрузки и транскрибации аудиофайлов с поддержкой диаризации спикеров и генерации кратких протоколов содержания.
- 📤 Загрузка аудиофайлов форматов:
ogg,wav,mp3, и др. - 📝 Транскрибация аудио с возможностью скачать текст.
- 🧑🤝🧑 Поддержка диаризации спикеров (определение "кто и когда говорил") с возможностью указания количества говорящих.
- 🧠 Генерация протокола/конспекта по результатам транскрипции.
- ⚙️ Настройка параметров транскрибации (модель, качество и др.).
- 💬 Возможность задавать промпты (подсказки) для улучшения транскрибации и протоколирования.
├── app.py # основной FastAPI сервер
├── index.html # веб-интерфейс
├── styles.css # стили
├── requirements.txt # зависимости проекта
├── .env # переменные окружения
├── prompts/ # пользовательские промпты (текстовые файлы .txt)
└── reference_voices/ # голосовые образцы для диаризации
Для диаризации используется голосовой банк (reference voices).
Чтобы добавить свой голос, поместите отрывок речи длиной от 15 до 30 секунд в папку reference_voices/.
Имя файла будет использоваться как метка (например, ivan.wav → ivan: в тексте).
Если не указаны кастомные голоса, будет использована автоматическая кластеризация по количеству спикеров.
Для улучшения качества распознавания и конспектирования можно задать промпты.
Разместите текстовые подсказки в виде .txt файлов в папке prompts/.
Например:
context.txt— описание ситуации (лекция, совещание и т.д.)names.txt— список возможных участников разговораvocabulary.txt— терминология по теме
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
Для работы с диаризацией через PyAnnote необходимо:
- Получить токен на Hugging Face
- Обязательно подтвердить доступ к следующим моделям:
- Для каждой модели нужно:
- Перейти по ссылке
- Нажать "Agree to access"
- Авторизоваться при необходимости
Для генерации протоколов требуется:
- Получить API ключ в Google AI Studio
- Добавить его в
.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/перед запуском транскрипции.
