Режим потокового режима реализации системы Piper TTS в C ++ с (необязательно) поддержкой ускорения NPU RK3588. Назван в честь «разговора» в Эсперанто.
Перед строительством вам нужно будет выполнить следующие зависимости
(API/веб -сервер)
(Поддержка RKNN)
В котором piper-phoenomize и бинарное onnxruntime (не источник! Если вы не хотите построить себя!), Вероятно, нужно загружать и декомпрессировать вручную. После этого запустите Cmake и укажите на папки, которые вы их рекомендовали.
mkdir build
cd build
cmake .. -DORT_ROOT=/path/to/your/onnxruntime-linux-aarch64-1.14.1 -DPIPER_PHONEMIZE_ROOT=/path/to/your/piper-phonemize-2023-11-14 -DCMAKE_BUILD_TYPE=Release
make -j
# IMPORTANT! Copy espeak-ng-data or pass `--espeak_data` CLI flag
cp -r /path/to/your/piper-phonemize-2023-11-14/share/espeak-ng-data . После этого запустите paroli-cli и введите в консоль для синтеза речи. Пожалуйста, обратитесь к более поздним разделам для создания моделей.
./paroli-cli --encoder /path/to/your/encoder.onnx --decoder /path/to/your/decoder.onnx -c /path/to/your/model.json
...
[2023-12-23 03:13:12.452] [paroli] [info] Wrote /home/marty/Documents/rkpiper/build/./1703301190238261389.wav
[2023-12-23 03:13:12.452] [paroli] [info] Real-time factor: 0.16085024956315996 (infer=2.201744556427002 sec, audio=13.688163757324219 sec)
Также предоставляется веб -сервер API, поэтому другие приложения могут легко выполнять текст на речь. Для получения подробной информации, пожалуйста, обратитесь к документу Web API для получения подробной информации. По умолчанию, демонстрационный интерфейс можно получить в корне URL. API -сервер поддерживает оба ответа с помощью сжатого звука для сокращения требований пропускной способности и потокового звука через WebSocket.
Чтобы запустить:
./paroli-server --encoder /path/to/your/encoder.onnx --decoder /path/to/your/decoder.onnx -c /path/to/your/model.json --ip 0.0.0.0 --port 8848И вызвать TSS
curl http://your.server.address:8848/api/v1/synthesise -X POST -H ' Content-Type: application/json ' -d ' {"text": "To be or not to be, that is the question"} ' > test.opusДемонстрация:
Чтобы включить варианты использования, когда услуга выставлена по какой -либо причине. Сервер API поддерживает базовую схему аутентификации. Флаг --auth будет генерировать токен для носителя, который отличается каждый раз, и API WebSocket и HTTP -синтез будет работать только в случае включения. --auth [YOUR_TOKEN] установит токен на your_token. Кроме того, установление переменной среды PAROLI_TOKEN установит токен для носителя на то, на что установлена переменная среды.
Authentication: Bearer <insert the token>
Интернет -интерфейс не будет работать при включении аутентификации
Чтобы получить модели Encoder и Decoder, вам нужно либо загрузить их, либо создать одну из контрольных точек. Контрольные точки - это обученная модель необработанной модели, которую генерирует Piper. Пожалуйста, обратитесь к обучению Piper.md для деталей. Чтобы преобразовать контрольно -пропускные пункты в пары файлов ONNX, вам понадобятся вилка Piper Mush42 и потоковая ветвь. Бегать
python3 -m piper_train.export_onnx_streaming /path/to/your/traning/lighting_logs/version_0/checkpoints/blablablas.ckpt /path/to/output/directoryНекоторые 100% юридических моделей предоставляются на Huggingface.
По умолчанию модели работают на процессоре и могут быть голодными и медленными. Если вы хотите использовать GPU и и т. Д. Вы можете передать флаг --accelerator cuda CUDA, чтобы включить его. На данный момент единственным поддерживаемым акселератором является CUDA. Но ROCM можно легко поддерживать, просто у меня нет аппаратного обеспечения для его проверки. Не стесняйтесь вносить свой вклад.
Это список поддерживаемых акселераторов:
cuda - nvidia cudatensorrt - nvidia tensorrt Кроме того, в системах, основанных на RK3588, поддержка NPU может быть включена путем передачи -DUSE_RKNN=ON в Cmake и пропустив модель RKNN вместо ONNX в качестве декодера. В результате ~ 4,3 -кратного ускорения по сравнению с работой на ядрах процессоров RK3588. Обратите внимание, что флаг accelerator не имеет никакого влияния, когда используется модель A RKNN, и только декодер может работать на NPU RK3588.
RockChip не предоставляет какой -либо пакет для установки библиотек и заголовков. Это должно быть сделано вручную.
git clone https://github.com/rockchip-linux/rknn-toolkit2
cd rknn-toolkit2/rknpu2/runtime/Linux/librknn_api
sudo cp aarch64/librknnrt.so /usr/lib/
sudo cp include/ * /usr/include/Кроме того, преобразование ONNX в RKNN должен быть сделан на компьютере X64. На момент написания этого документа вы, вероятно, хотите установить версию для Python 3.10, так как это та же версия, которая работает с Upstream Piper. Требуется версия 1.6.0 rknn-toolkit2.
# Install rknn-toolkit2
git clone https://github.com/rockchip-linux/rknn-toolkit2
cd rknn-toolkit2/tree/master/rknn-toolkit2/packages
pip install rknn_toolkit2-1.6.0+81f21f4d-cp310-cp310-linux_x86_64.whl
# Run the conversion script
python tools/decoder2rknn.py /path/to/model/decoder.onnx /path/to/model/decoder.rknnЧтобы использовать RKNN для вывода, просто передайте модель RKNN в CLI. Ошибка появится, если RKNN будет передана, но поддержка RKNN не включена во время компиляции.
./paroli-cli --encoder /path/to/your/encoder.rknn --decoder /path/to/your/decoder.onnx -c /path/to/your/model.json
# ^^^^
# The only change Тодо:
Нет хорошего способа уменьшить задержку синтеза на RK3588, помимо Rockchip, улучшающего RKNNRT и их компилятор. Энкодер - это динамический график, таким образом, RKNN не будет работать. И то, как они реализуют мульти-NPU совместный процесс, запрещает более быстрый единый пакетный вывод. Multi Pactor может быть сделан быстрее, но я не вижу его значения, так как она уже достаточно быстро для домашнего использования.