流媒体模式在C ++中使用(可选)RK3588 NPU加速度支持在C ++中实现。以Esperanto的“说话”命名。
在构建之前,您需要实现以下依赖性
(API/Web服务器)
(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)
还提供了Web API服务器,以便其他应用程序可以轻松地执行文本到语音。有关详细信息,请参阅Web API文档以获取详细信息。默认情况下,可以在URL的根部访问演示UI。 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标志将生成一个载体令牌,每次都不同,并且Websocket和HTTP合成API只有在启用时才能工作。 --auth [YOUR_TOKEN]将将令牌设置为your_token。此外,设置PAROLI_TOKEN环境变量将把持有人令牌设置为设置的环境变量。
Authentication: Bearer <insert the token>
启用身份验证时,网络UI将无法工作
要获取编码器和解码器模型,您要么需要下载它们,要么从检查点创建一个。检查点是训练有素的原始模型吹笛者生成的。有关详细信息,请参阅Piper的Training.md。要将检查点转换为ONNX文件对,您需要Mush42的Piper叉和流式分支。跑步
python3 -m piper_train.export_onnx_streaming /path/to/your/traning/lighting_logs/version_0/checkpoints/blablablas.ckpt /path/to/output/directory拥抱面上提供了一些100%的法律模型。
默认情况下,模型在CPU上运行,可能是饥饿和慢的。 --accelerator cuda您想使用GPU等。目前,唯一支持的加速器是Cuda。但是ROCM可以很容易地支持,只是我没有硬件来测试它。随时做出贡献。
这是支持加速器的列表:
cuda -nvidia cudatensorrt - nvidia tensorrt此外,在基于RK3588的系统上,可以通过将-DUSE_RKNN=ON传递到CMAKE并传递RKNN模型而不是ONNX作为解码器来启用NPU支持。与在RK3588 CPU内核上运行相比,〜4.3倍加速度。请注意,当使用RKNN模型时, accelerator标志没有效果,并且只有解码器才能在RK3588 NPU上运行。
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的版本,因为这是与上游Piper一起使用的版本。 RKNN-ToolKit2版本1.6.0是必需的。
# 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进行推理,只需通过CLI中的RKNN模型即可。如果传递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 托多:
除了Rockchip改进了RKNNRT及其编译器之外,还没有降低RK3588的合成潜伏期的好方法。编码器是一个动态图,因此RKNN无法正常工作。以及他们如何实现多NPU的共同过程禁止更快的单批次推理。多批量可以更快地制作,但我看不到它的价值,因为它已经足够快地用于家庭使用。