Это веб-сервис на основе 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