文字转语音使用的技术简称为TTS。一般情况下我用的都是在线的EDGE-TTS服务。但非常幸运的是,BM1684X上居然有适配好的本地运行TTS,那自然是要体验一番。
先转到project文件夹下,克隆下整个仓库,并切换到radxa_v0.1.2
分支:
cd /data/project
git clone https://github.com/zifeng-radxa/EmotiVoice-TPU.git
cd EmotiVoice-TPU
git checkout radxa_v0.1.2
接下来下载模型
cd model_file
wget https://github.com/radxa-edge/TPU-Edge-AI/releases/download/EmotiVoice/EmotiVoice_bmodels.tar.gz
tar -xvf EmotiVoice_bmodels.tar.gz
mv ./EmotiVoice_bmodels/* .
下面下载nltk数据,由于python包中自动下载部分基本都会下载失败,因此我们先手动下载下来。
git clone https://github.com/nltk/nltk_data.git
mv nltk_data/packages ~/nltk_data
下面来配置虚拟环境:
python3 -m venv tts_venv
source tts_venv/bin/activate
pip3 install https://github.com/radxa-edge/TPU-Edge-AI/releases/download/v0.1.0/tpu_perf-1.2.31-py3-none-manylinux2014_aarch64.whl
pip3 install -r requirements.txt
全部运行完成后,启动示例:
bash run_gr.sh
接下来需要等待一段时间来加载模型,然后如果看到以下输出,说明启动顺利:
打开网页后,可以看到以下界面:
输入文字后,点击生成。就可以朗读。
这里经过实测,我发现右边的播放器有一点问题,点了播放按钮并没有任何反应。但这个问题不大,因为从终端中我们可以看到如下内容:
这里清楚的显示了生成的文件保存在哪。我们可以直接打开这个文件,就能听到声音。
测试完成,接下来我们需要研究下代码,看看如何可以应用到我们的项目中。run_gr.sh
文件内,除了配置一下环境变量外,就是运行gr.py
这个文件。打开文件后,可以看到里面有一个gradio服务器,我们使用的生成按钮调用了一个名叫tts_only
的函数,这个函数仅有三个输入,需要转化的文字,朗读者和情绪。非常简单。这个函数的返回值是输出音频文件的相对路径。
在使用前,我们还需要知道speaker和emotion有哪些值可以用。其中可支持的speaker列表见./data/youdao/text/speaker2,可支持的任意文字,参考的emotion列表见./data/youdao/text/emotion。所有的变量都是字符串的格式。
那么接下来,我们只需要稍微改动一下gr.py
,关闭gradio服务器,就可以把它作为一个库使用,方便外部调用。
先注释最后两行:
# demo.queue()
# demo.launch(debug=True, show_api=True, share=False, server_name="0.0.0.0")
接着我们新建一个run.py
文件,写入以下内容:
from gr import tts_only
res = tts_only("你好","8051","开心")
print(res)
运行以下,就可以看到我们直接调用了方法,并且生成好了对应的音频文件。
更多回帖