Code Monkey home page Code Monkey logo

silero-tts-service's Issues

Start with CUDA

Добрый день для запуска с CUDA достаточно использовать ранее установленный pytorch с CUdA? или логика в коде не позволит его юзать ?

Согласование склонений

Привет.

Нашел такую проблему. Склонение чисел не всегда согласуется со следующими после них существительными.

1 <d>минута</d>      один минута
2 <d>минута</d>      два минута
3 <d>минута</d>      три минуты
41 <d>минута</d>    сорок один минута
44 <d>минута</d>    сорок четыре минуты

Голос valeria не работает на ru языке

Голос Valeria указан в списке доступных в боте @silero_voice_bot, но при попытке вызова TTS получаю такую ошибку:

ERROR Invalid speaker: speaker valeria not supported by this language

Could not initialize NNPACK!

Приветствую!
При запуске контейнера получаем [W NNPACK.cpp:80] Could not initialize NNPACK! Reason: Unsupported hardware

Предположение:
USE_NNPACK=0 ?
Может стоит вынести в environment?

SAMPLE_RATE: 16000

Здравствуйте!

Частота дискретизации SAMPLE_RATE:
SAMPLE_RATE: 48000
Возможние значения: 48000, 24000, 8000
По умолчанию: 48000

Добавьте, пожалуйста, значение в 16000.
Все ESP satellite rhasspy юзают как раз 16000.

Thanks!

Очень хочу поблагодарить. Этот проект появился на гитхабе удивительно вовремя, я как раз ломал голову, пытаясь каким-нибудь образом прикрутить Silero к Home Assistant (и у меня ничего не получалось).

Единственное, что было не очевидно, и о чем хочется упомянуть чтобы сэкономить кому-нибудь время:
подключение к Rhasspy настраивается в модуле MaryTTS.

2022-12-21_12-21

Добавить управление громкостью

Спасибо за сервис!
Было бы здорово добавить управляющий yaml код по управлению громкостью воспроизведения, по аналогии с другими TTS в Home Assistant, пример:

service: tts.marytts_say
data: 
  entity_id: media_player.player
  volume_level: 0.3
  message: >-
    Спустя 15 лет жизнь некогда бороздившего космические просторы Жана-Люка
    Пикара

Спасибо!

У меня было 15 <d>яблоко</d>

Здравствуйте!

Великолепная работа!

Однако, пока не удалось испробовать склонение.
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 колонку?

Спасибо вам за эту интеграцию с нормальным синтезом речи. Хотел бы добавить мануал как добавить вывод звука, если имеется bluetooth колонка. Все дело в том, что в документации пишется, что надо добавить в configuration.yaml и это конечно работает, но при выборе объекта, куда будем выводить звук может не оказаться bluetooth колонки. Я долго искал решение и нашел. Думаю, что, кто с этим столкнется, это будет полезным и сократит время.

tts:
  - platform: marytts
    host: localhost # Адрес сервера
    port: 9898
    codec: WAVE_FILE
    voice: xenia # Имя голоса который хотите использовать.
    language: ru # Не используется. Настройки языка указываются в настройках сервера.
  1. Если Home Assistant как основная ОС (HAOS), то читаем эту документацию TTS Bluetooth Speaker for Home Assistant

  2. Если Home Assistant стоит на Debian, то делаем следующее

Отредактируем client.conf

nano /etc/pulse/client.conf

Добавим следующее

default-server = unix:/usr/share/hassio/audio/external/pulse.sock
autospawn = no

image

Перезапускаем 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
image

Подключаем bluetooth колонку к Debian, kb,j через GUI, либо через консоль используя команду bluetoothctl

Включим bluetooth

power on

Запуск сканирования девайсов

scan on

Как увидели свой девайс, спариваемся с устройством

pair mac адрес девайса

Подключаемся к устройству

connect mac адрес девайса

Добавляем устройство в доверенные

trust  mac адрес девайса

Далее, как добавлен bluetooth девайс то в двух аддонов Rhasspy Assistant и Mopidy нужно указать источник вывода звука bluetooth девайса

  1. В Rhasspy Assistant указываем так
    image

  2. В Mopidy указываем так
    image

После этого открываем Панель разработчика => Службы
Вид в текстовом файле
image

service: tts.marytts_say
data:
  entity_id: media_player.mpd_mopidy
  message: >-
    Спустя 15 лет жизнь некогда бороздившего космические просторы Жана-Люка
    Пикара

Вид в GUI
image

Failed to parse SSML

Приветствую!

Периодически(!) возникает проблема парсинга 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 ?

Не видит пути при запуске через вирт. окружение venv\conda python.

Я уж и менял на абсолютные и так и эдак - не понимаю как он формирует путь или что не так с ошибкой.
Файлы в папке не создаются.
(а если запускать без вирт окружения то создаются, но кстати потом не чистятся, вроде должны ?)
А без вирт окружения - у остальных пакетов зависимости слетают.
Если подпаку 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.

HA assist

Приветствую!

А не замахнуться ли на что-то более глобальное и упрощающее жизнь и убрать прослойку в виде Rhasspy Assistant?
К примеру есть https://www.home-assistant.io/docs/assist/ или REST API от HA...

Как думаете?

.HA_FIX contains true

Приветствую!

Исправление обрубания окончания фразы 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
Но, как показалось, не факт, что оно работает.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.