Это веб-сервис на основе flask и синтезатора речи RHVoice. Благодаря REST API его легко интегрировать в качестве TTS-провайдера.
docker run -d \
--name=rhvoice-rest \
-p 8080:8080 \
--restart unless-stopped \
aculeasis/rhvoice-rest:latestПоддерживаемые архитектуры:
| Architecture | Available | Tag |
|---|---|---|
| x86-64 | ✅ | amd64 |
| arm64 | ✅ | arm64v8 |
| armhf | ✅ | arm32v7 |
Для автоматического обновления можно использовать Watchtower.
http://SERVER/say?
text=<текст>
& voice=<
aleksandr|anna|arina|artemiy|elena|irina|pavel| # Russian
alan|bdl|clb|slt| # English
spomenka| # Esperanto
natia| # Georgian
azamat|nazgul| # Kyrgyz
talgat| # Tatar
anatol|natalia| # Ukrainian
kiko| # Macedonian
letícia-f123 # Portuguese
>
& format=<wav|mp3|opus|flac>
& rate=0..100
& pitch=0..100
& volume=0..100
SERVER - Адрес и порт rhvoice-rest. При дефолтной установке на локалхост будет localhost:8080.
Конечно, вы можете установить сервер rhvoice-rest на одной машине а клиент на другой. Особенно актуально для слабых одноплатников.
text - URL-encoded строка. Обязательный параметр.
voice - Голос из RHVoice полный список.
anna используется по умолчанию и в качестве альтернативного спикера.
format - Формат возвращаемого файла. По умолчанию mp3.
rate - Темп речи. По умолчанию 50.
pitch - Высота голоса. По умолчанию 50.
volume - Громкость голоса. По умолчанию 50.
http://SERVER/info - выводит различную информацию о сервере в JSON.
Для интеграции в Rhasspy через Remote замените /say на /rhasspy. Аргументы text и format игнорируются (формат всегда wav, а текст передается в теле POST).
"text_to_speech": {
"system": "remote",
"remote": {
"url": "http://localhost:8080/rhasspy?voice=anna"
}
}
Для начала нужно установить зависимости:
pip3 install flask pymorphy2 rhvoice-wrapper
Собрать и установить RHVoice или установить rhvoice-wrapper-bin предоставляющий библиотеки и данные RHVoice. Второй вариант рекомендуется для Windows т.к. не требует сборки.
И еще рядом с app.py положить rhvoice_tools - переименовав preprocessing из RHVoice-dictionary/tools.
Для поддержки mp3, opus и flac нужно установить lame, opus-tools и flac
git clone https://github.com/Aculeasis/rhvoice-rest
cd rhvoice-rest
chmod +x install.sh
sudo ./install.sh
Статус сервиса sudo systemctl status rhvoice-rest.service
Нужно задать пути через переменные окружения. Если вы используете rhvoice-wrapper-bin то первые 2 задавать не нужно:
RHVOICELIBPATH до RHVoice.dll той же архитектуры что и питон и RHVOICEDATAPATH до папки с languages и voices. По умолчанию они ставятся в C:\Program Files (x86)\RHVoice\data
Не обязательно: LAMEPATH, OPUSENCPATH и FLACPATH для поддержки соответствующих форматов.
Протестировано на Windows 10 и Python 3.6.
Все настройки задаются через переменные окружения, до запуска скрипта или при создании докер-контейнера (через -e):
- RHVOICELIBPATH: Путь до библиотеки RHVoice. По умолчанию
RHVoice.dllв Windows иlibRHVoice.soв Linux. - RHVOICEDATAPATH: Путь до данных RHVoice. По умолчанию
/usr/local/share/RHVoice. - THREADED: Количество запущенных процессов синтеза, определяет количество запросов которые могут быть обработаны одновременно. Если
> 1генераторы будут запущены в качестве отдельных процессов что существенно увеличит потребление памяти. Рекомендуемое максимальное значение1.5 * core count. По умолчанию1. - LAMEPATH: Путь до
lameилиlame.exe, если файл не найден поддержкаmp3будет отключена. По умолчаниюlame. - OPUSENCPATH: Путь до
opusencилиopusenc.exe, если файл не найден поддержкаopusбудет отключена. По умолчаниюopusenc. - FLACPATH: Путь до
flacилиflac.exe, если файл не найден поддержкаflacбудет отключена. По умолчаниюflac. - RHVOICE_DYNCACHE: Если задано и не равно
no,disableилиfalseкэширует результат запроса на время его генерации. Включается автоматически вместе с RHVOICE_FCACHE. - RHVOICE_FCACHE: Если задано и не равно
no,disableилиfalseбудет включен файловый кэш. Чтение из кэша почти не увеличивает скорость реакции, но значительно уменьшает время загрузки всех данных. Может некорректно работать в Windows. По умолчанию кэш отключен. - RHVOICE_FCACHE_LIFETIME: Если кэш включен задает время жизни файлов кэша в часах, исчисляется от времени последнего доступа к файлу. Если FS смонтирована с
noatime(а почти всегда это так) тоatimeбудет обновляться принудительно. Может некорректно работать в Windows. По умолчанию0(файлы кэша живут вечно). - CHUNKED_TRANSFER: Если задано и не равно
no,disableилиfalseвключает Chunked transfer encoding. По умолчанию отключен.
http://localhost:8080/say?text=Привет
http://localhost:8080/say?text=Привет%20еще%20раз&format=opus
http://localhost:8080/say?text=Kaj%20mi%20ankaŭ%20parolas%20Esperanton&voice=spomenka&format=opus