index-tts是不支持日语的,但是有一种办法可以勉强让其输出日语,就是将日语转换为罗马音让其读出来:

pykakasi是一个Python自然语言处理(NLP)库,用于将平假名、片假名和汉字(日语文本)转写为罗马字(拉丁/罗马字母)。它能够处理NFC(指Unicode字符的一种标准化形式,用于确保不同表示方式的字符在比较时能够被视为相同)形式的字符。

from pykakasi import kakasi

kks = kakasi()
kks.setMode('J', 'H')  # 汉字 -> 平假名
converter = kks.getConverter()

text = "日本語"
result = converter.do(text)
print(result)  # にほんご

旧版v1.2 API、wakati类以及setMode()getConverter()do()函数将在v3.0版本发布后被弃用。使用convert()方法。

import pykakasi

kks = pykakasi.kakasi()
text = 'かな漢字'
result = kks.convert(text)
for item in result:
    print("{}: kana '{}', hiragana '{}', romaji: '{}'".format(item['orig'], item['kana'], item['hira'], item['hepburn']))

convert的返回值为一个[str, str]的字典组成的列表,上面的代码执行如下:

(tts) bluebonnet27@bluebonnet27:~/Project/Python/tts_index/index-tts/utils$ python pykakasi_adapter.py
かな: kana 'カナ', hiragana 'かな', romaji: 'kana'
漢字: kana 'カンジ', hiragana 'かんじ', romaji: 'kanji'

各个字段的含义如下,我们使用赫本式罗马字即可:

字段名 含义 示例(输入:“東京”)
orig 原始输入文本片段(未经转换的原始字符串) “”“東京”“”
kana 片假名(Katakana) 表示 “”“トウキョウ”“”
hira 平假名(Hiragana) 表示 “”“とうきょう”“”
hepburn 赫本式罗马字(Hepburn romanization) —— 最常见的罗马字拼写方案 “”“toukyou”“”
passport 日本护照标准罗马字(基于赫本式,但对长音等有特定规则,用于官方证件) “”“toukyou”“”(多数情况同 Hepburn)
kunrei 训令式罗马字(Kunrei-shiki) —— 日本政府官方标准,但国际较少使用 “”“toukyou”“”(但如“し”在训令式中为 si,赫本为 shi)

我们将日语转为罗马音,这样tts就可以很方便地读出来。但这样读出来的声音,没有感情,更像是机器声音。因此其实只能作为一种缓解手段,还是需要支持日语的tts。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐