VoiceStreamAI — это серверное и клиентское решение на базе Python 3, которое обеспечивает потоковую передачу и транскрипцию звука практически в реальном времени с использованием WebSocket. Система использует обнаружение голосовой активности (VAD) Huggingface и модель Whisper OpenAI (по умолчанию используется более быстрый шепот) для точного распознавания и обработки речи.
Здесь не будет подробно описано, как использовать CUDA в докере, см., например, здесь.
Тем не менее, это команды для Linux:
distribution= $( . /etc/os-release ; echo $ID$VERSION_ID )
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
&& curl -s -L https://nvidia.github.io/libnvidia-container/ $distribution /libnvidia-container.list |
sed ' s#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g ' |
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
Вы можете создать образ контейнера с помощью:
sudo docker build -t VoiceStreamAI .
После получения токена VAD (см. следующие разделы) запустите:
sudo docker volume create huggingface_models
sudo docker run --gpus all -p 8765:8765 -v huggingface_models:/root/.cache/huggingface -e PYANNOTE_AUTH_TOKEN= ' VAD_TOKEN_HERE ' VoiceStreamAI
Функция «объем» позволит вам не перезагружать модели обнимающихся лиц каждый раз, когда вы повторно запускаете контейнер. Если вам это не нужно, просто используйте:
sudo docker run --gpus all -p 8765:8765 -e PYANNOTE_AUTH_TOKEN= ' VAD_TOKEN_HERE ' VoiceStreamAI
Для настройки сервера VoiceStreamAI вам потребуется Python 3.8 или более поздней версии и следующие пакеты:
transformers
pyannote.core
pyannote.audio
websockets
asyncio
sentence-transformers
faster-whisper
Установите эти пакеты с помощью pip:
pip install -r requirements.txt
На клиентской стороне вам понадобится современный веб-браузер с поддержкой JavaScript.
Сервер VoiceStreamAI можно настроить с помощью аргументов командной строки, что позволяет указать параметры компонентов, хоста и порта в соответствии с вашими потребностями.
--vad-type
: указывает тип используемого конвейера обнаружения голосовой активности (VAD) (по умолчанию: pyannote
).--vad-args
: строка JSON, содержащая дополнительные аргументы для конвейера VAD. (обязательно для pyannote
: '{"auth_token": "VAD_AUTH_HERE"}'
)--asr-type
: указывает тип используемого конвейера автоматического распознавания речи (ASR) (по умолчанию: faster_whisper
).--asr-args
: строка JSON, содержащая дополнительные аргументы для конвейера ASR (например, можно изменить model_name
на шепот)--host
: устанавливает адрес хоста для сервера WebSocket (по умолчанию: 127.0.0.1
).--port
: устанавливает порт, который прослушивает сервер (по умолчанию: 8765
).--certfile
: путь к сертификату SSL (файлу сертификата) при использовании защищенных веб-сокетов (по умолчанию: None
)--keyfile
: путь к файлу ключей SSL при использовании защищенных веб-сокетов (по умолчанию: None
)Для запуска сервера со стандартной конфигурацией:
python3 -m src.main --vad-args ' {"auth_token": "vad token here"} '
Посмотреть все параметры командной строки можно с помощью команды:
python3 -m src.main --help
client/index.html
в веб-браузере.ws://localhost:8765
).Компоненты VAD и ASR можно легко расширить для интеграции новых методов и использования моделей с интерфейсом, отличным от конвейеров HuggingFace. Новые стратегии обработки/фрагментирования могут быть добавлены в server.py и использованы конкретными клиентами, установившими ключ «processing_strategy» в конфигурации.
Обнаружение голосовой активности (VAD) в VoiceStreamAI позволяет системе различать речевые и неречевые сегменты в аудиопотоке. Основная цель внедрения VAD — повысить эффективность и точность процесса преобразования речи в текст:
VoiceStreamAI использует модель VAD Huggingface для обеспечения надежного обнаружения речи в различных звуковых условиях.
Стратегия буферизации предназначена для балансировки между обработкой практически в реальном времени и обеспечением полного и точного захвата речевых сегментов. Вот как осуществляется буферизация:
В VoiceStreamAI каждый клиент может иметь уникальную конфигурацию, которая адаптирует процесс транскрипции к его конкретным потребностям. Такая персонализированная настройка достигается через систему обмена сообщениями, в которой клиент JavaScript отправляет сведения о конфигурации на сервер Python. В этом разделе объясняется, как структурируются и передаются эти конфигурации.
Конфигурация клиента может включать в себя различные параметры, такие как языковые предпочтения, длину фрагмента и смещение фрагмента. Например:
language
: указывает язык транскрипции. Если установлено значение, отличное от «многоязычности», это приведет к тому, что вывод Whisper будет на этом языке.processing_strategy
: определяет тип обработки для этого клиента, своего рода шаблон стратегии. Стратегии на данный момент не используют ООП, но они реализованы в if/else в server.py.chunk_length_seconds
: определяет длину каждого аудиофрагмента, подлежащего обработке.chunk_offset_seconds
: определяет время тишины в конце каждого фрагмента, необходимое для обработки звука (используется в Process_strategy № 1).Инициализация : когда клиент инициализирует соединение с сервером, он может дополнительно отправить сообщение конфигурации. Это сообщение представляет собой объект JSON, содержащий пары «ключ-значение», представляющие предпочтительные настройки клиента.
Настройка клиента JavaScript . В демонстрационном клиенте конфигурация собирается из элементов пользовательского интерфейса (например, раскрывающихся списков и полей ввода). Как только аудио начинает передаваться, создается объект JSON и отправляется на сервер через WebSocket. Например:
function sendAudioConfig ( ) {
const audioConfig = {
type : "config" ,
data : {
chunk_length_seconds : 5 ,
chunk_offset_seconds : 1 ,
processing_strategy : 1 ,
language : language ,
} ,
} ;
websocket . send ( JSON . stringify ( audioConfig ) ) ;
}
При реализации новой стратегии ASR, Vad или буферизации вы можете протестировать ее с помощью:
pip install -r requirements-dev.txt
export PYANNOTE_AUTH_TOKEN= < VAD_TOKEN_HERE >
ASR_TYPE=faster_whisper python -m unittest test.server.test_server
Убедитесь, что конечные переменные присутствуют, например, для токена аутентификации VAD. Имеется несколько других тестов, например, для автономного ASR.
В настоящее время VoiceStreamAI обрабатывает звук, сохраняя фрагменты в файлы, а затем пропуская эти файлы через модели.
Форкните и клонируйте этот репозиторий. Установите зависимости и связанные инструменты.
pip install -r requirements.txt
pip install -r requirements-dev.txt
npm install -g [email protected] [email protected]
Добавьте свои изменения в репозиторий и запустите проверку стиля кода вручную или интегрируйте их в свою IDE/редактор.
# For Python
flake8 src/ test/
black --line-length 79 src/ test/
isort src/ test/
# For JavaScript
jshint client/ * .js
eslint client/ * .js
Наконец, нажмите и создайте запрос на включение.
Этот проект открыт для вкладов. Не стесняйтесь создавать форк репозитория и отправлять запросы на включение.