navatusein / silero-tts-service Goto Github PK
View Code? Open in Web Editor NEWSilero TTS backend service. Can be used with Home Assistant and Rhasspy.
License: MIT License
Silero TTS backend service. Can be used with Home Assistant and Rhasspy.
License: MIT License
Добрый день для запуска с CUDA достаточно использовать ранее установленный pytorch с CUdA? или логика в коде не позволит его юзать ?
Привет.
Нашел такую проблему. Склонение чисел не всегда согласуется со следующими после них существительными.
1 <d>минута</d> один минута
2 <d>минута</d> два минута
3 <d>минута</d> три минуты
41 <d>минута</d> сорок один минута
44 <d>минута</d> сорок четыре минуты
Голос Valeria указан в списке доступных в боте @silero_voice_bot, но при попытке вызова TTS получаю такую ошибку:
ERROR Invalid speaker: speaker valeria not supported by this language
Приветствую!
При запуске контейнера получаем [W NNPACK.cpp:80] Could not initialize NNPACK! Reason: Unsupported hardware
Предположение:
USE_NNPACK=0 ?
Может стоит вынести в environment?
Здравствуйте!
Частота дискретизации SAMPLE_RATE:
SAMPLE_RATE: 48000
Возможние значения: 48000, 24000, 8000
По умолчанию: 48000
Добавьте, пожалуйста, значение в 16000.
Все ESP satellite rhasspy юзают как раз 16000.
Очень хочу поблагодарить. Этот проект появился на гитхабе удивительно вовремя, я как раз ломал голову, пытаясь каким-нибудь образом прикрутить Silero к Home Assistant (и у меня ничего не получалось).
Единственное, что было не очевидно, и о чем хочется упомянуть чтобы сэкономить кому-нибудь время:
подключение к Rhasspy настраивается в модуле MaryTTS.
Спасибо за сервис!
Было бы здорово добавить управляющий yaml код по управлению громкостью воспроизведения, по аналогии с другими TTS в Home Assistant, пример:
service: tts.marytts_say
data:
entity_id: media_player.player
volume_level: 0.3
message: >-
Спустя 15 лет жизнь некогда бороздившего космические просторы Жана-Люка
Пикара
Спасибо!
Здравствуйте!
Великолепная работа!
Однако, пока не удалось испробовать склонение.
Ubuntu 22, docker, amd64
Просто ничего не происходит. Ксения сообщает, что "У меня было 15". О яблоках - ни слова
/process?INPUT_TYPE=TEXT&OUTPUT_TYPE=AUDIO&AUDIO=WAVE&LOCALE=&INPUT_TEXT=У меня было 15 <d>яблоко</d>&VOICE=xenia
Может в настройках надо что-то инициировать?
Спасибо!
Дополнено:
Выловил вот такую ошибку:
<torch_package_0>.multi_acc_v3_package.py:196: UserWarning: Current model doesn't support SSML tag: d warnings.warn(f"Current model doesn't support SSML tag: {child.tag}")
Здравствуйте!
Идея уменьшить образ - великолепна!
Но было бы здорово ендюзеру дать визуальные данные, что идет процесс скачивание и установка зависимостей.
Сейчас просто
INFO [2022-12-25 12:35:14,343] Starting updating
INFO [2022-12-25 12:35:15,321] Update requirements
Collecting torch==1.13.1
Downloading torch-1.13.1-cp310-cp310-manylinux1_x86_64.whl (887.5 MB)
и висит уже некоторое время.
То есть малоинформативно.
Дополнено:
Я имею ввиду отображать % того, что скачивается.
Но, кроме того, как мне кажется, философия докера - работа из коробки - немного нарушается. ИМХО
Спасибо вам за эту интеграцию с нормальным синтезом речи. Хотел бы добавить мануал как добавить вывод звука, если имеется bluetooth колонка. Все дело в том, что в документации пишется, что надо добавить в configuration.yaml и это конечно работает, но при выборе объекта, куда будем выводить звук может не оказаться bluetooth колонки. Я долго искал решение и нашел. Думаю, что, кто с этим столкнется, это будет полезным и сократит время.
tts:
- platform: marytts
host: localhost # Адрес сервера
port: 9898
codec: WAVE_FILE
voice: xenia # Имя голоса который хотите использовать.
language: ru # Не используется. Настройки языка указываются в настройках сервера.
Если Home Assistant как основная ОС (HAOS), то читаем эту документацию TTS Bluetooth Speaker for Home Assistant
Если Home Assistant стоит на Debian, то делаем следующее
Отредактируем client.conf
nano /etc/pulse/client.conf
Добавим следующее
default-server = unix:/usr/share/hassio/audio/external/pulse.sock
autospawn = no
Перезапускаем pulseaudio
pulseaudio -k && pulseaudio --start
Ставим аддон Mopidy версии Current version: 2.1.1 и ставим только эту версию. Mopidy 2.2.0 не ставить - она сломанная. Подробнее про поломанную версию Mopidy 2.2.0 читать здесь
Добавляем в configuration.yaml
#MPD music player daemon
media_player:
- platform: mpd
name: "MPD Mopidy"
host: localhost
port: 6600
Перезагружаем Home Assistant полностью, чтобы перезагрузился сам Debian
Подключаем bluetooth колонку к Debian, kb,j через GUI, либо через консоль используя команду bluetoothctl
Включим bluetooth
power on
Запуск сканирования девайсов
scan on
Как увидели свой девайс, спариваемся с устройством
pair mac адрес девайса
Подключаемся к устройству
connect mac адрес девайса
Добавляем устройство в доверенные
trust mac адрес девайса
Далее, как добавлен bluetooth девайс то в двух аддонов Rhasspy Assistant и Mopidy нужно указать источник вывода звука bluetooth девайса
После этого открываем Панель разработчика => Службы
Вид в текстовом файле
service: tts.marytts_say
data:
entity_id: media_player.mpd_mopidy
message: >-
Спустя 15 лет жизнь некогда бороздившего космические просторы Жана-Люка
Пикара
Приветствую!
Периодически(!) возникает проблема парсинга SSML.
Причем возникает без какой-либо закономерности.
Exception in ASGI application
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/uvicorn/protocols/http/h11_impl.py", line 407, in run_asgi
result = await app( # type: ignore[func-returns-value]
File "/usr/local/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py", line 78, in __call__
return await self.app(scope, receive, send)
File "/usr/local/lib/python3.10/site-packages/uvicorn/middleware/message_logger.py", line 86, in __call__
raise exc from None
File "/usr/local/lib/python3.10/site-packages/uvicorn/middleware/message_logger.py", line 82, in __call__
await self.app(scope, inner_receive, inner_send)
File "/usr/local/lib/python3.10/site-packages/fastapi/applications.py", line 270, in __call__
await super().__call__(scope, receive, send)
File "/usr/local/lib/python3.10/site-packages/starlette/applications.py", line 124, in __call__
await self.middleware_stack(scope, receive, send)
File "/usr/local/lib/python3.10/site-packages/starlette/middleware/errors.py", line 184, in __call__
raise exc
File "/usr/local/lib/python3.10/site-packages/starlette/middleware/errors.py", line 162, in __call__
await self.app(scope, receive, _send)
File "/usr/local/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
raise exc
File "/usr/local/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
await self.app(scope, receive, sender)
File "/usr/local/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
raise e
File "/usr/local/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
await self.app(scope, receive, send)
File "/usr/local/lib/python3.10/site-packages/starlette/routing.py", line 706, in __call__
await route.handle(scope, receive, send)
File "/usr/local/lib/python3.10/site-packages/starlette/routing.py", line 276, in handle
await self.app(scope, receive, send)
File "/usr/local/lib/python3.10/site-packages/starlette/routing.py", line 66, in app
response = await func(request)
File "/usr/local/lib/python3.10/site-packages/fastapi/routing.py", line 235, in app
raw_response = await run_endpoint_function(
File "/usr/local/lib/python3.10/site-packages/fastapi/routing.py", line 161, in run_endpoint_function
return await dependant.call(**values)
File "/usr/app/app/handlers.py", line 44, in process
audio_file = get_tts_file(text, speaker, settings.sample_rate, sox_params=settings.sox_param)
File "/usr/app/app/tts.py", line 41, in get_tts_file
model.save_wav(ssml_text=text, speaker=speaker, audio_path=temp_file_path, sample_rate=sample_rate)
File "<torch_package_0>.multi_acc_v3_package.py", line 366, in save_wav
audio = self.apply_tts(text=text,
File "<torch_package_0>.multi_acc_v3_package.py", line 316, in apply_tts
sentences, clean_sentences, break_lens, prosody_rates, prosody_pitches, sp_ids = self.prepare_tts_model_input(input_text,
File "<torch_package_0>.multi_acc_v3_package.py", line 61, in prepare_tts_model_input
clean_text_list = self.process_ssml(text)
File "<torch_package_0>.multi_acc_v3_package.py", line 113, in process_ssml
raise ValueError(f"Failed to parse SSML: {e}")
ValueError: Failed to parse SSML: invalid literal for int() with base 10: 'двадцать0'
Start text processing: <speak>Текущее время двадцать часов <break time='100ms'/> двадцать одна минута <break time='двадцать0ms'/></speak>
Изначально - <break time='200ms'/>
Думал, что HA чудит, перепробовал многие варианты кавычек и экранирования. Но закономерности так и не уловил.
Здравствуйте!
Несколько дней работает контейнер без особого использования. 1.3GB не слишком ли много?
$ docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
b92407531c1d silero-tts-service 0.42% 1.301GiB / 3.681GiB 35.34% 62.9MB / 11.5MB 199MB / 184MB 11
...
9909ca915b28 rhasspy 27.89% 622.7MiB / 3.681GiB 16.52% 24.8GB / 1.48GB 1.21GB / 1.29GB 55
Обновил модели силеро и код ниже ,
silero_settings = {
'ru': {
'model_link': 'https://models.silero.ai/models/tts/ru/v4_ru.pt',
'model_name': 'silero_model_v4.pt',
'speakers': [
'aidar', 'baya', 'kseniya', 'xenia', 'eugene', 'random'
]
},
'en': {
'model_link': 'https://models.silero.ai/models/tts/en/v3_en.pt',
'model_name': 'v3_en.pt',
'speakers': [
'lj', 'random'
]
},
'multi': {
'model_link': 'https://models.silero.ai/models/tts/multi/v2_multi.pt',
'model_name': 'v2_multi.pt',
'speakers': [
'irina', 'random'
]
}
}
Хочу использовать мультивойс от Silero team, сыпется
root@oc2:/ai/Silero-TTS-Service# /usr/bin/python3 -u ./main.py
Traceback (most recent call last):
File "/ai/Silero-TTS-Service/./main.py", line 5, in <module>
from app.logger import LogConfig
File "/ai/Silero-TTS-Service/app/logger.py", line 5, in <module>
class LogConfig(BaseModel):
File "/usr/local/lib/python3.10/dist-packages/pydantic/_internal/_model_construction.py", line 92, in __new__
private_attributes = inspect_namespace(
File "/usr/local/lib/python3.10/dist-packages/pydantic/_internal/_model_construction.py", line 384, in inspect_namespace
raise PydanticUserError(
pydantic.errors.PydanticUserError: A non-annotated attribute was detected: `LOGGER_NAME = 'uvicorn'`. All model fields require a type annotation; if `LOGGER_NAME` is not meant to be a field, you may be able to resolve this error by annotating it as a `ClassVar` or updating `model_config['ignored_types']`.
В питоне ообще почти 0 , поправить быстро не удалось. Я правильно понимаю что чтото надо переписать под pydantic. 2.6 ?
Я уж и менял на абсолютные и так и эдак - не понимаю как он формирует путь или что не так с ошибкой.
Файлы в папке не создаются.
(а если запускать без вирт окружения то создаются, но кстати потом не чистятся, вроде должны ?)
А без вирт окружения - у остальных пакетов зависимости слетают.
Если подпаку audios удалить - приложение ее корректно создаст и создат там temp.wav
INFO [2024-02-05 13:58:10] Time spent on the process: 3.8143470287323
INFO [2024-02-05 13:58:10] 192.168.0.44:33888 - "POST /process HTTP/1.1" 500
ERROR [2024-02-05 13:58:10] Exception in ASGI application
Traceback (most recent call last):
File "/opt/conda/envs/silero/lib/python3.10/site-packages/uvicorn/protocols/http/h11_impl.py", line 407, in run_asgi
result = await app( # type: ignore[func-returns-value]
File "/opt/conda/envs/silero/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py", line 78, in call
return await self.app(scope, receive, send)
File "/opt/conda/envs/silero/lib/python3.10/site-packages/uvicorn/middleware/message_logger.py", line 86, in call
raise exc from None
File "/opt/conda/envs/silero/lib/python3.10/site-packages/uvicorn/middleware/message_logger.py", line 82, in call
await self.app(scope, inner_receive, inner_send)
File "/opt/conda/envs/silero/lib/python3.10/site-packages/fastapi/applications.py", line 270, in call
await super().call(scope, receive, send)
File "/opt/conda/envs/silero/lib/python3.10/site-packages/starlette/applications.py", line 124, in call
await self.middleware_stack(scope, receive, send)
File "/opt/conda/envs/silero/lib/python3.10/site-packages/starlette/middleware/errors.py", line 184, in call
raise exc
File "/opt/conda/envs/silero/lib/python3.10/site-packages/starlette/middleware/errors.py", line 162, in call
await self.app(scope, receive, _send)
File "/opt/conda/envs/silero/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 79, in call
raise exc
File "/opt/conda/envs/silero/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 68, in call
await self.app(scope, receive, sender)
File "/opt/conda/envs/silero/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in call
raise e
File "/opt/conda/envs/silero/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call
await self.app(scope, receive, send)
File "/opt/conda/envs/silero/lib/python3.10/site-packages/starlette/routing.py", line 706, in call
await route.handle(scope, receive, send)
File "/opt/conda/envs/silero/lib/python3.10/site-packages/starlette/routing.py", line 276, in handle
await self.app(scope, receive, send)
File "/opt/conda/envs/silero/lib/python3.10/site-packages/starlette/routing.py", line 69, in app
await response(scope, receive, send)
File "/opt/conda/envs/silero/lib/python3.10/site-packages/starlette/responses.py", line 334, in call
raise RuntimeError(f"File at path {self.path} does not exist.")
RuntimeError: File at path ./audios/xenia-5439322806554fc5d84099e7cd753769ad77b4c5d0dacd52939878066d5a9af2737659fd2a721bf764990c15aa377f43b472cbb8fe7f695243d1c6f376bd2d6e.wav does not exist.
Приветствую!
А не замахнуться ли на что-то более глобальное и упрощающее жизнь и убрать прослойку в виде Rhasspy Assistant?
К примеру есть https://www.home-assistant.io/docs/assist/ или REST API от HA...
Как думаете?
Приветствую!
Исправление обрубания окончания фразы HA_FIX:
HA_FIX: True
services.silero-tts-service.environment.HA_FIX contains true, which is an invalid type, it should be a string, number, or a null
Работает только
HA_FIX: 1
HA_FIX: 0
Но, как показалось, не факт, что оно работает.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.