k2-fsa / sherpa-onnx

Speech-to-text, text-to-speech, speaker recognition, and VAD using next-gen Kaldi with onnxruntime without Internet connection. Support embedded systems, Android, iOS, Raspberry Pi, RISC-V, x86_64 servers, websocket server/client, C/C++, Python, Kotlin, C#, Go, NodeJS, Java, Swift, Dart, JavaScript, Flutter, Object Pascal, Lazarus, Rust
https://k2-fsa.github.io/sherpa/onnx/index.html
Apache License 2.0
3.27k stars 381 forks source link

voice tts 最新的1.8.9生成的日语不全 #418

Closed jinlife closed 10 months ago

jinlife commented 11 months ago

前几天下载了sherpa-onnx-1.8.8, 运行里面的范例 vits-zh-aishell3

python3 ./python-api-examples/offline-tts.py 
 --vits-model=./vits-aishell3.onnx \
 --vits-lexicon=./lexicon.txt \
 --vits-tokens=./tokens.txt \
 --tts-rule-fsts=./rule.fst \
 --sid=21 \
 --output-filename=./liubei-21.wav \
 "勿以恶小而为之,勿以善小而不为。惟贤惟德,能服于人。122334"

有不少字都无法生成,如而, 2 等。 下载了另外一个中日文模型,vits-hf-zh-jp-zomehwh,也有同样的问题,中日文都会丢字。

今天下载了 1.8.9版本,中文两个模型都没问题了。 不过用 vits-hf-zh-jp-zomehwh 生成日文的时候还是丢一样的字,例如你好的日文こんにちは 里面的 ち 被ignore掉了。 丢的字和报错同1.8.8.

D:\a\sherpa-onnx\sherpa-onnx\sherpa-onnx\csrc\lexicon.cc:InitLexicon:341 Duplicated word: 鼻. Ignore it.
D:\a\sherpa-onnx\sherpa-onnx\sherpa-onnx\csrc\lexicon.cc:InitLexicon:341 Duplicated word: 齢. Ignore it.
D:\a\sherpa-onnx\sherpa-onnx\sherpa-onnx\csrc\lexicon.cc:InitLexicon:341 Duplicated word: 龍. Ignore it.
D:\a\sherpa-onnx\sherpa-onnx\sherpa-onnx/csrc/offline-tts-vits-impl.h:OfflineTtsVitsImpl:42 rule fst: ./vits-hf-zh-jp-zomehwh/rule.fst
D:\a\sherpa-onnx\sherpa-onnx\sherpa-onnx/csrc/offline-tts-vits-impl.h:Generate:92 Raw text: こんにちは
D:\a\sherpa-onnx\sherpa-onnx\sherpa-onnx/csrc/offline-tts-vits-impl.h:Generate:99 After normalizing: こんにちは
Input text in string: こんにちは
Input text in bytes: e3 81 93 e3 82 93 e3 81 ab e3 81 a1 e3 81 af
After splitting to words: こん に ち は
D:\a\sherpa-onnx\sherpa-onnx\sherpa-onnx\csrc\lexicon.cc:ConvertTextToTokenIdsChinese:224 OOV ち. Ignore it!
Saved to ./test.wav
The text is 'こんにちは'
Elapsed seconds: 0.768
Audio duration in seconds: 0.964
RTF: 0.768/0.964 = 0.797

请看看这个能不能修复一下.

csukuangfj commented 11 months ago

例如你好的日文こんにちは 里面的 ち 被ignore掉了

根据你贴的 log,

D:\a\sherpa-onnx\sherpa-onnx\sherpa-onnx\csrc\lexicon.cc:ConvertTextToTokenIdsChinese:224 OOV ち. Ignore it!

lexicon.txt 里面,没有 这个字的发音。

你把这个字加入到 lexicon.txt 里面去,就好了。

如果你懂日语的话,你参考 lexicon.txt 里面其他日语的发音,找到 对应的发音.

jinlife commented 11 months ago

谢谢,确实是这个问题。 在lexicon.txt里面找到,第二行有点奇怪。有不少单个字的地方都有类似的情况。

ちん ʧ i ↓ N
ぢ j   i

我补了个 ち ʧ i 就行了。

ちん ʧ i ↓ N
ち ʧ i
ぢ j   i

这个库是也是您的库 https://huggingface.co/csukuangfj/vits-hf-zh-jp-zomehwh 可能需要修一下。 我也不懂日语,用的google翻译,可能帮不上忙。不好意思。

jinlife commented 11 months ago

另外一些信息, 我在 lexicon.txt也找到了整个句子 こんにちは k o ↑ N n i ʧ i w a 不知道为啥不起作用。 另外, 将数字和日文一起生成,数字会生成成中文。可能还没官方支持日文,所以这部分还没处理吧。希望将来可以支持日文。谢谢。

下面的日文是google翻译的 勿以恶小而为之,勿以善小而不为。惟贤惟德,能服于人。122334

D:\a\sherpa-onnx\sherpa-onnx\sherpa-onnx/csrc/offline-tts-vits-impl.h:Generate:92 Raw text: 小さいからといって悪を行ってはならないし、小さいからといって善を行ってはならない。 善良で徳のある人だけが他人に従うことができます。 122334
D:\a\sherpa-onnx\sherpa-onnx\sherpa-onnx/csrc/offline-tts-vits-impl.h:Generate:99 After normalizing: 小さいからといって 悪を行ってはならないし、小さいからといって善を行ってはならない。 善良で徳のある人だけが他人に従うことができます。 十二万二千三百三十四
Input text in string: 小さいからといって悪を行ってはならないし、小さいからといって善を行ってはならない。 善良で徳のある 人だけが他人に従うことができます。 十二万二千三百三十四
Input text in bytes: e5 b0 8f e3 81 95 e3 81 84 e3 81 8b e3 82 89 e3 81 a8 e3 81 84 e3 81 a3 e3 81 a6 e6 82 aa e3 82 92 e8 a1 8c e3 81 a3 e3 81 a6 e3 81 af e3 81 aa e3 82 89 e3 81 aa e3 81 84 e3 81 97 e3 80 81 e5 b0 8f e3 81 95 e3 81 84 e3 81 8b e3 82 89 e3 81 a8 e3 81 84 e3 81 a3 e3 81 a6 e5 96 84 e3 82 92 e8 a1 8c e3 81 a3 e3 81 a6 e3 81 af e3 81 aa e3 82 89 e3 81 aa e3 81 84 e3 80 82 20 e5 96 84 e8 89 af e3 81 a7 e5 be b3 e3 81 ae e3 81 82 e3 82 8b e4 ba ba e3 81 a0 e3 81 91 e3 81 8c e4 bb 96 e4 ba ba e3 81 ab e5 be 93 e3 81 86 e3 81 93 e3 81 a8 e3 81 8c e3 81 a7 e3 81 8d e3 81 be e3 81 99 e3 80 82 20 e5 8d 81 e4 ba 8c e4 b8 87 e4 ba 8c e5 8d 83 e4 b8 89 e7 99 be e4 b8 89 e5 8d 81 e5 9b 9b
After splitting to words: 小さい から とい って 悪 を 行 って はな ら ない し 、 小さい から とい って 善 を 行 って は な ら ない 。 善 良 で 徳 の ある 人 だけ が 他人 に 従う こと が でき ます 。 十 二 万 二 千 三 百 三 十 四
Saved to ./test.wav
The text is '小さいからといって悪を行ってはならないし、小さいからといって善を行ってはならない。 善良で徳のある人だけが他人に従うことができます。 122334'
Elapsed seconds: 10.542
Audio duration in seconds: 12.295
RTF: 10.542/12.295 = 0.857
csukuangfj commented 11 months ago

不知道为啥不起作用。

这个能说具体点么?


还有,这个是中日混合的模型。由于一些字,同时属于中文和日文,目前的发音应该是只取中文的发音。

对于数字这个,目前支持的是中文发音。

我在考虑把这个模型拆成两个,一个只支持中文,一个只支持日文。

jinlife commented 11 months ago

我的意思是有整句,こんにちは k o ↑ N n i ʧ i w a ,模型还去找单字。 我也不太懂,瞎说的。

中日文混一起确实有汉字冲突。刚才又试验多了几个日文,也有识别不出来。 双手赞成支持分开的方案。

如果这个只是改模型,1.8.9代码没问题,咱这个issue可以关掉了。

D:\a\sherpa-onnx\sherpa-onnx\sherpa-onnx/csrc/offline-tts-vits-impl.h:OfflineTtsVitsImpl:42 rule fst: ./vits-hf-zh-jp-zomehwh/rule.fst
D:\a\sherpa-onnx\sherpa-onnx\sherpa-onnx/csrc/offline-tts-vits-impl.h:Generate:92 Raw text: クラスメイトのシャオモ
D:\a\sherpa-onnx\sherpa-onnx\sherpa-onnx/csrc/offline-tts-vits-impl.h:Generate:99 After normalizing: クラスメイトのシャ オモ
Input text in string: クラスメイトのシャオモ
Input text in bytes: e3 82 af e3 83 a9 e3 82 b9 e3 83 a1 e3 82 a4 e3 83 88 e3 81 ae e3 82 b7 e3 83 a3 e3 82 aa e3 83 a2
After splitting to words: クラ ス メ イ ト の シ ャ オ モ
D:\a\sherpa-onnx\sherpa-onnx\sherpa-onnx\csrc\lexicon.cc:ConvertTextToTokenIdsChinese:224 OOV ス. Ignore it!
D:\a\sherpa-onnx\sherpa-onnx\sherpa-onnx\csrc\lexicon.cc:ConvertTextToTokenIdsChinese:224 OOV メ. Ignore it!
D:\a\sherpa-onnx\sherpa-onnx\sherpa-onnx\csrc\lexicon.cc:ConvertTextToTokenIdsChinese:224 OOV イ. Ignore it!
D:\a\sherpa-onnx\sherpa-onnx\sherpa-onnx\csrc\lexicon.cc:ConvertTextToTokenIdsChinese:224 OOV ト. Ignore it!
D:\a\sherpa-onnx\sherpa-onnx\sherpa-onnx\csrc\lexicon.cc:ConvertTextToTokenIdsChinese:224 OOV ャ. Ignore it!
D:\a\sherpa-onnx\sherpa-onnx\sherpa-onnx\csrc\lexicon.cc:ConvertTextToTokenIdsChinese:224 OOV オ. Ignore it!
D:\a\sherpa-onnx\sherpa-onnx\sherpa-onnx\csrc\lexicon.cc:ConvertTextToTokenIdsChinese:224 OOV モ. Ignore it!
Saved to ./test.wav
The text is 'クラスメイトのシャオモ'
Elapsed seconds: 0.679
Audio duration in seconds: 0.824
RTF: 0.679/0.824 = 0.823
lucasjinreal commented 11 months ago

这个效果怎么样啊,中文合成的

csukuangfj commented 11 months ago

这个效果怎么样啊,中文合成的

我们目前不训练模型,只提供 tts runtime. 目前支持vits 模型。

你可以去 https://huggingface.co/spaces/k2-fsa/text-to-speech 在线体验我们从网上找的 vits 预训练模型。

https://k2-fsa.github.io/sherpa/onnx/tts/apk.html 有 android apk 供你下载体验。

jinlife commented 10 months ago

这个效果怎么样啊,中文合成的

效果都不错,vits-hf-zh-jp-zomehwh是游戏动漫语音的效果。 vits-zh-aishell3的中文更真人音色些。

houyafei commented 4 months ago

这个效果怎么样啊,中文合成的

我们目前不训练模型,只提供 tts runtime. 目前支持vits 模型。

你可以去 https://huggingface.co/spaces/k2-fsa/text-to-speech 在线体验我们从网上找的 vits 预训练模型。

https://k2-fsa.github.io/sherpa/onnx/tts/apk.html 有 android apk 供你下载体验。

你好,中文合成,如果想更换合成人的音色,该怎么操作?

houyafei commented 4 months ago

这个效果怎么样啊,中文合成的

我们目前不训练模型,只提供 tts runtime. 目前支持vits 模型。 你可以去 https://huggingface.co/spaces/k2-fsa/text-to-speech 在线体验我们从网上找的 vits 预训练模型。 https://k2-fsa.github.io/sherpa/onnx/tts/apk.html 有 android apk 供你下载体验。

你好,中文合成,如果想更换合成人的音色,该怎么操作?如果我把我的音色用来作为合成语音的输出,而不仅仅是更换tts对应的模型里面的speaker 的id。