軽量なTTSモデル「Kokoro TTS」を試す
HugggingFace
Kokoroは、8200万パラメータのオープンウェイトTTSモデルです。軽量なアーキテクチャにもかかわらず、より大規模なモデルと同等の品質を提供しながら、より高速でコスト効率に優れています。Apacheライセンスのウェイトを使用することで、Kokoroは本番環境から個人プロジェクトまで、あらゆる場所で展開することができます。
リリース
モデル 公開 トレーニングデータ 言語と音声 SHA256 v0.19 2024/12/25 100時間以下 1言語 ・10音声 3b0c392f v1.0 2025/01/27 数百時間 8言語・54音声 496dba11
v1.0が出て日本語にも対応。利用可能な言語・音声についてはこちら。
GitHubレポジトリ
インストール
Colaboratory T4で。
パッケージインストール。misakiはKokoroモデル向けに用意されたg2pエンジン。使いたい言語をextrasで指定しておく必要がある。
!pip install "kokoro>=0.3.4" soundfile misaki[en,ja]
!pip freeze | egrep -i "kokoro|misaki"
kokoro==0.7.16
misaki==0.7.16
音素取得のためのeSpeak NGをインストール。英語の音素辞書に載ってない場合のフォールバック、またいくつかの非英語では使うみたい。多分、日本語の場合はいらないような気もする。
!apt install -y espeak-ng
ではTTS。
from kokoro import KPipeline
from IPython.display import display, Audio
import soundfile as sf
# パイプラインを作成
pipeline = KPipeline(
# lang_code: 言語を指定
# - 🇪🇸 'e' => スペイン語(es)
# - 🇫🇷 'f' => フランス語(fr-fr)
# - 🇮🇳 'h' => ヒンズー語(hi)
# - 🇮🇹 'i' => イタリア語(it)
# - 🇧🇷 'p' => ポルトガル語(ブラジル)(pt-br)
# - 🇺🇸 'a' => 英語(アメリカ)
# - 🇬🇧 'b' => 英語(イギリス)
# - 🇯🇵 'j' => 日本語: `pip install misaki[ja]` が必要
# - 🇨🇳 'z' => 中国語(北京語): `pip install misaki[zh]` が必要
lang_code='j'
)
# パイプラインにテキストを与えて実行
generator = pipeline(
# TTS対象のテキスト
"おはようございます。今日はいいお天気ですね。こんな日は競馬に行きたくなりますね。",
# 音声を指定。日本語の場合は以下の
# - jf_alpha(女性)
# - jf_gongitsune(女性)
# - jf_nezumi(女性)
# - jf_tebukuro(女性)
# - jm_kumo(男性)
voice='jf_alpha',
# 発話速度
speed=1,
# 発話生成を分割する正規表現。この単位で生成するファイルも
# 分割される。文末等であれば `split_pattern=r'(?<=[。!?])'`とか
split_pattern=None
)
for i, (gs, ps, audio) in enumerate(generator):
print(i) # i => インデックス
print(gs) # gs => 書記素/テキスト
print(ps) # ps => 音素
display(Audio(data=audio, rate=24000, autoplay=False))
sf.write(f'{i}.wav', audio, 24000)
0
おはようございます。今日はいいお天気ですね。こんな日は競馬に行きたくなりますね。
ohajoː ɡoʣaimasɨ. kʲoː βa iː o teŋkʲi desɨ ne. konna çi βa keːba ɲi ikʲi takɯ naɾʲimasɨ ne.

実際に再生したもの。各日本語音声で試してみた。
ちなみに別言語の音声も使える様子。
from kokoro import KPipeline
from IPython.display import display, Audio
import soundfile as sf
# パイプラインを作成
pipeline = KPipeline(
lang_code='j'
)
# パイプラインにテキストを与えて実行
generator = pipeline(
"おはようございます。今日はいいお天気ですね。こんな日は競馬に行きたくなりますね。",
# 英語で最も評価が高いモデルを使用
voice='af_heart',
speed=1,
split_pattern=None
)
for i, (gs, ps, audio) in enumerate(generator):
print(i)
print(gs)
print(ps)
display(Audio(data=audio, rate=24000, autoplay=False))
sf.write(f'{i}.wav', audio, 24000)
外国人の日本語っぽくはなるけども、日本語モデルよりもいいように個人的には感じる。
英語テキストの場合
from kokoro import KPipeline
from IPython.display import display, Audio
import soundfile as sf
pipeline = KPipeline(
lang_code='a'
)
generator = pipeline(
"Good morning. It's a beautiful day today. On days like this, I feel like going to the horse races.",
voice='af_heart',
speed=1,
split_pattern=None
)
for i, (gs, ps, audio) in enumerate(generator):
print(i)
print(gs)
print(ps)
display(Audio(data=audio, rate=24000, autoplay=False))
sf.write(f'{i}.wav', audio, 24000)
0
Good morning. It's a beautiful day today. On days like this, I feel like going to the horse races.
ɡˈʊd mˈɔɹnɪŋ. ˌɪts ɐ bjˈuTəfəl dˈA tədˈA. ˌɔn dˈAz lˈIk ðˈɪs, ˌI fˈil lˈIk ɡˈOɪŋ tə ðə hˈɔɹs ɹˈAsᵻz.

当然ながら英語だときれい。
モデルごとの学習用音声の総時間やグレードを見る限り、やはり学習データが品質につながっているように思える。
トレーニング用のスクリプトは公開されない感じかな
ONNXもあるのだが・・・
色々やってみたがうまく動かせなかった
以下の記事ではkokoro-onnxを使っているようなので、また試してみる。
まとめ
軽量だけあってたしかに速い。ONNXならエッジデバイスでも動かせないかなーという期待がある。
こういうのがある
Kokoro-FastAPI
Kokoro-82M テキスト音声合成モデル用の Docker 化された FastAPI ラッパー
- 多言語サポート(英語、日本語、韓国語、中国語、ベトナム語はまもなく対応予定)
- OpenAI 互換の音声エンドポイント、NVIDIA GPU による高速化または PyTorch による CPU 推論
- ONNX サポートはまもなく対応予定、暫定的なレガシー ONNX サポートについては v0.1.5 以前を参照
- システム統計を監視するためのデバッグエンドポイント、ローカルホスト:8880/web上の統合ウェブUI
- 音素に基づく音声生成、音素生成
- 単語ごとのタイムスタンプ付きキャプション生成
- 重み付けされた組み合わせによる音声ミキシング
docker composeで試してみた。環境は以下。
- Ubuntu-22.04
- RTX4090
レポジトリクローン
git clone https://github.com/remsky/Kokoro-FastAPI.git && cd Kokoro-FastAPI
今回はGPUを有効にして試してみる。
cd docker/gpu
ビルドして起動
docker compose up --build
Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #0: error running hook: exit status 1, stdout: , stderr: Auto-detected mode as 'legacy'
nvidia-container-cli: requirement error: unsatisfied condition: cuda>=12.8, please update your driver to a newer version, or use an earlier cuda container: unknown
結構新し目のバージョンが必要になるのね。。。。また今度。
2025/05/25追記
以下の点を修正すればいけた
- Dockerfileでベースとなっているイメージを自分のCUDAバージョンに合わせた。元はUbuntu-24.04+CUDA-12.8だったが、CUDA-12.4.1のイメージでUbuntu-22.04はなかった。
FROM nvidia/cuda:12.4.1-cudnn-runtime-ubuntu22.04
(snip)
- docker compose 起動時にモデルをダウンロードするが、コンテナ内部ではUID/GIDが1001固定になっていて、ホスト側と合致しない場合にパーミッションエラーが出る。あらかじめパーミッションを設定しておけば良い
sudo chown -R 1001:1001 ../../api
起動するとこんな感じ。

とりあえず生成がめちゃくちゃ速い。
kokoro-tts-1 | 08:25:42 AM | DEBUG | paths:153 | Scanning for voices in path: /app/api/src/voices/v1_0
kokoro-tts-1 | INFO: 172.18.0.1:59430 - "POST /v1/audio/speech HTTP/1.1" 200 OK
kokoro-tts-1 | 08:25:42 AM | DEBUG | paths:153 | Scanning for voices in path: /app/api/src/voices/v1_0
kokoro-tts-1 | 08:25:42 AM | DEBUG | paths:131 | Searching for voice in path: /app/api/src/voices/v1_0
kokoro-tts-1 | 08:25:42 AM | DEBUG | tts_service:200 | Using single voice path: /app/api/src/voices/v1_0/af_heart.pt
kokoro-tts-1 | 08:25:42 AM | DEBUG | tts_service:275 | Using voice path: /app/api/src/voices/v1_0/af_heart.pt
kokoro-tts-1 | 08:25:42 AM | INFO | tts_service:279 | Using lang_code 'a' for voice 'af_heart' in audio stream
kokoro-tts-1 | 08:25:42 AM | INFO | text_processor:135 | Starting smart split for 98 chars
kokoro-tts-1 | a
kokoro-tts-1 | 08:25:42 AM | DEBUG | text_processor:53 | Total processing took 0.49ms for chunk: 'Good morning.'
kokoro-tts-1 | 08:25:42 AM | DEBUG | text_processor:53 | Total processing took 0.42ms for chunk: 'It's a beautiful day today.'
kokoro-tts-1 | 08:25:42 AM | DEBUG | text_processor:53 | Total processing took 0.58ms for chunk: 'On days like this, I feel like going to the horse ...'
kokoro-tts-1 | 08:25:42 AM | INFO | text_processor:268 | Yielding final chunk 1: 'Good morning. It's a beautiful day today. On days ...' (108 tokens)
kokoro-tts-1 | 08:25:42 AM | DEBUG | kokoro_v1:261 | Generating audio for text with lang_code 'a': 'Good morning. It's a beautiful day today. On days like this, I feel like going to the horse races.'
kokoro-tts-1 | 08:25:42 AM | DEBUG | kokoro_v1:268 | Got audio chunk with shape: torch.Size([147000])
kokoro-tts-1 | 08:25:42 AM | INFO | text_processor:274 | Split completed in 93.25ms, produced 1 chunks
Kokoro-TTSで30分ぐらいの音声を生成するデモがあった。30秒ぐらいで生成されるらしい。
これちょっと気になるな
"Introcuding KokoroDoki a Local, Open-Source and Real-Time TTS"