Распознавание речи с использованием модели Whisper от OpenAI, реализованное в виде двух микросервисов:
- Python сервис для работы с Whisper API
- Golang клиент и веб-интерфейс
Проект разделен на два микросервиса:
-
Python Whisper Service
- Низкоуровневая работа с моделью Whisper
- Эффективное управление моделями (кэширование)
- TCP сервер для взаимодействия с клиентами
- Поддержка GPU через CUDA
- Voice Activity Detection (VAD) фильтр
-
Golang Web Service
- Веб-интерфейс для конечных пользователей
- REST API для интеграции с другими системами
- Эффективный клиент для Python сервиса
- Метрики и мониторинг
- Поддержка контекста для отмены операций
Микросервисы взаимодействуют по бинарному протоколу через TCP соединение.
- Python 3.8-3.11
- Go 1.18+
- FFmpeg
- CUDA Toolkit 11.8
- PyTorch с поддержкой CUDA
-
Установите Python 3.8-3.11 (рекомендуется):
-
Установите CUDA Toolkit 11.8:
- CUDA Toolkit 11.8
- При установке выберите опцию "Custom" и убедитесь, что выбраны компоненты:
- CUDA Runtime
- CUDA Development
- cuBLAS
- cuDNN
-
Установите PyTorch с поддержкой CUDA:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118- Установите необходимые библиотеки:
cd python
pip install -r requirements.txt-
Установите библиотеки CUDA:
- Скачайте библиотеки CUDA 11.8 из репозитория
- Распакуйте архив
CUDA11_v4 - Скопируйте файлы в папку
C:\Windows\System32\:cublas64_11.dllcudnn64_8.dll- и другие файлы из архива
-
Запустите сервис:
python whisper_service.pyПо умолчанию сервис запускается на 127.0.0.1:9000. Можно изменить через переменные окружения:
WHISPER_HOST=0.0.0.0 WHISPER_PORT=9001 python whisper_service.py-
Установите Go 1.18 или выше:
-
Установите зависимости и запустите сервис:
cd golang
go mod download
go run main.go whisper_client.goПо умолчанию веб-сервер запускается на порту 8080. Настройки через переменные окружения:
WHISPER_HOST=127.0.0.1 WHISPER_PORT=9000 SERVER_PORT=8080 go run main.go whisper_client.goПолучение списка доступных моделей.
Отправка аудиофайла для распознавания.
Параметры:
file: Аудиофайл (multipart/form-data)model: Название модели (опционально, по умолчанию "base")language: Код языка (опционально)task: Задача - "transcribe" или "translate" (опционально, по умолчанию "transcribe")
Проверка статуса сервиса.
Получение метрик сервиса.
Микросервисы используют бинарный протокол поверх TCP со следующей структурой:
- Заголовок (8 байт) - длина сообщения в формате big-endian
- Тело сообщения - JSON данные
Команды:
transcribe- распознавание речиlist_models- получение списка моделей
tiny: самая быстрая, но наименее точная модель (~1 ГБ)base: хороший баланс между скоростью и точностью (~1 ГБ)small: более точная, чем base, но медленнее (~2 ГБ)medium: еще более точная, но требует больше ресурсов (~5 ГБ)large: самая точная и самая ресурсоемкая модель (~10 ГБ)
При первом запуске модель будет загружена из интернета и кэширована локально.
На Python 3.13 могут возникать ошибки при установке Whisper. Это связано с изменениями в Python и тем, что библиотека еще не полностью адаптирована к новым версиям.
Решения:
- Используйте Python 3.8-3.11
- Создайте виртуальное окружение с более старой версией Python
- Используйте conda для управления окружением
Если вы видите ошибки при установке через requirements.txt:
- Попробуйте использовать virtualenv или conda для создания изолированного окружения
- Обновите pip до последней версии:
python -m pip install --upgrade pip - Установите необходимые инструменты для сборки:
pip install setuptools wheel - Установите Whisper напрямую из GitHub:
pip install git+https://github.com/openai/whisper.gitЕсли возникают ошибки, связанные с CUDA:
- Убедитесь, что установлена правильная версия CUDA Toolkit (11.8)
- Проверьте, что все необходимые DLL файлы скопированы в System32
- Убедитесь, что PyTorch установлен с поддержкой CUDA
- Проверьте, что GPU доступен и поддерживает CUDA
Для лучшей производительности:
- Используйте GPU, если он доступен
- Выберите подходящую модель в зависимости от требований к точности и скорости
- Настройте параметры VAD фильтра под ваши нужды
- Используйте кэширование моделей
- Оптимизируйте размер буфера для аудио данных
MIT License - смотрите файл LICENSE
Приветствуются pull requests и issue reports. Для крупных изменений, пожалуйста, сначала откройте issue для обсуждения предлагаемых изменений.
Были проведены тесты с различными моделями на аудиофайле длительностью 19:19:
- Время обработки: ~63 секунды
- Использование VAD фильтра: удалено 1:30 тишины
- Определение языка: русский (точность 98%)
- Использование GPU: CUDA
- Потребление памяти: ~2 ГБ
- Время обработки: ~141 секунд (2:21)
- Использование VAD фильтра: удалено 1:30 тишины
- Определение языка: русский (точность 100%)
- Использование GPU: CUDA
- Потребление памяти: ~5 ГБ
| Модель | Размер | Время обработки | Качество | Память | Точность определения языка |
|---|---|---|---|---|---|
| Tiny | ~1 ГБ | ~30 сек | Низкое | ~1 ГБ | ~95% |
| Base | ~1 ГБ | ~60 сек | Среднее | ~1 ГБ | ~97% |
| Small | ~2 ГБ | ~63 сек | Хорошее | ~2 ГБ | ~98% |
| Medium | ~5 ГБ | ~140 сек | Отличное | ~5 ГБ | ~100% |
| Large | ~10 ГБ | ~300 сек | Лучшее | ~10 ГБ | ~100% |
- Tiny - для быстрого тестирования и коротких аудиофайлов
- Base - хороший баланс между скоростью и качеством
- Small - оптимальный выбор для большинства задач (хорошее качество при разумном времени обработки)
- Medium - для профессионального использования, когда важна точность
- Large - для максимальной точности, когда время обработки не критично
- Используйте VAD фильтр для удаления тишины (экономия ~8% времени обработки)
- Выбирайте модель в зависимости от требований к качеству и времени
- Убедитесь, что у вас достаточно GPU памяти
- Для больших файлов рекомендуется использовать модели Tiny или Base
- Модель Small показала лучший баланс между скоростью и качеством для большинства задач