Rumah >pembangunan bahagian belakang >Tutorial Python >Meneroka Kokoro TTS Voice Synthesis di Google Colab dengan T4
Kokoro-82M: Meneroka Model Teks-ke-Pertuturan (TTS) Berprestasi Tinggi
Kokoro-82M ialah model TTS berprestasi tinggi yang mampu menghasilkan audio berkualiti tinggi. Ia menyokong penukaran teks-ke-pertuturan yang mudah dan boleh melakukan sintesis pertuturan dengan mudah dengan menggunakan pemberat pada fail audio.
Kokoro-82M pada Muka Berpeluk
Bermula dari versi 0.23, Kokoro-82M turut menyokong bahasa Jepun. Anda boleh mencubanya dengan mudah melalui pautan berikut:
[Kokoro TTS pada Memeluk Face Spaces](Memeluk Face Spaces pautan hendaklah dimasukkan di sini)
Namun, intonasi Jepun masih agak tidak wajar.
Dalam tutorial ini kami akan menggunakan kokoro-onnx, pelaksanaan TTS yang memanfaatkan Kokoro dan masa jalan ONNX. Kami akan menggunakan versi 0.19 (versi stabil), yang hanya menyokong sintesis pertuturan untuk Bahasa Inggeris Amerika dan Inggeris Inggeris.
Seperti tajuknya, kod akan dilaksanakan dalam Google Colab.
Pasang kokoro-onnx
<code class="language-bash">!git lfs install !git clone https://huggingface.co/hexgrad/Kokoro-82M %cd Kokoro-82M !apt-get -qq -y install espeak-ng > /dev/null 2>&1 !pip install -q phonemizer torch transformers scipy munch !pip install -U kokoro-onnx</code>
Memuatkan pakej
<code class="language-python">import numpy as np from scipy.io.wavfile import write from IPython.display import display, Audio from models import build_model import torch from models import build_model from kokoro import generate</code>
Jalankan contoh
Sebelum menguji sintesis pertuturan, mari jalankan contoh rasmi. Menjalankan kod berikut akan menjana dan memainkan audio dalam beberapa saat.
<code class="language-python">device = 'cuda' if torch.cuda.is_available() else 'cpu' MODEL = build_model('kokoro-v0_19.pth', device) VOICE_NAME = [ 'af', # 默认语音是 Bella 和 Sarah 的 50-50 混合 'af_bella', 'af_sarah', 'am_adam', 'am_michael', 'bf_emma', 'bf_isabella', 'bm_george', 'bm_lewis', 'af_nicole', 'af_sky', ][0] VOICEPACK = torch.load(f'voices/{VOICE_NAME}.pt', weights_only=True).to(device) print(f'Loaded voice: {VOICE_NAME}') text = "How could I know? It's an unanswerable question. Like asking an unborn child if they'll lead a good life. They haven't even been born." audio, out_ps = generate(MODEL, text, VOICEPACK, lang=VOICE_NAME[0]) display(Audio(data=audio, rate=24000, autoplay=True)) print(out_ps)</code>
Sintesis pertuturan
Sekarang, mari kita masuk ke topik dan menguji sintesis pertuturan.
Tentukan pakej suara
<code class="language-python">voicepack_af = torch.load(f'voices/af.pt', weights_only=True).to(device) voicepack_af_bella = torch.load(f'voices/af_bella.pt', weights_only=True).to(device) voicepack_af_nicole = torch.load(f'voices/af_nicole.pt', weights_only=True).to(device) voicepack_af_sarah = torch.load(f'voices/af_sarah.pt', weights_only=True).to(device) voicepack_af_sky = torch.load(f'voices/af_sky.pt', weights_only=True).to(device) voicepack_am_adam = torch.load(f'voices/am_adam.pt', weights_only=True).to(device) voicepack_am_michael = torch.load(f'voices/am_michael.pt', weights_only=True).to(device) voicepack_bf_emma = torch.load(f'voices/bf_emma.pt', weights_only=True).to(device) voicepack_bf_isabella = torch.load(f'voices/bf_isabella.pt', weights_only=True).to(device) voicepack_bm_george = torch.load(f'voices/bm_george.pt', weights_only=True).to(device) voicepack_bm_lewis = torch.load(f'voices/bm_lewis.pt', weights_only=True).to(device)</code>
Jana teks menggunakan pertuturan yang dipratentukan
Untuk mengkaji perbezaan antara pertuturan yang disintesis, mari jana audio menggunakan paket pertuturan yang berbeza. Kami akan menggunakan teks contoh yang sama, tetapi anda boleh menukar pembolehubah voicepack_
untuk menggunakan sebarang pek pertuturan yang diingini.
<code class="language-python"># 以下代码段与原文相同,只是重复了多次,为了简洁,这里省略了重复的代码块。 # 每个代码块都使用不同的语音包生成音频,并使用 display(Audio(...)) 播放。</code>
Sintesis Pertuturan: Pertuturan Campuran
Mula-mula, mari cipta suara biasa, menggabungkan dua suara wanita British (bf).
<code class="language-python">bf_average = (voicepack_bf_emma + voicepack_bf_isabella) / 2 audio, out_ps = generate(MODEL, text, bf_average, lang=VOICE_NAME[0]) display(Audio(data=audio, rate=24000, autoplay=True)) print(out_ps)</code>
Seterusnya, mari kita sintesiskan gabungan dua suara perempuan dan satu suara lelaki.
<code class="language-python">weight_1 = 0.25 weight_2 = 0.45 weight_3 = 0.3 weighted_voice = (voicepack_bf_emma * weight_1 + voicepack_bf_isabella * weight_2 + voicepack_bm_lewis * weight_3) audio, out_ps = generate(MODEL, text, weighted_voice, lang=VOICE_NAME[0]) display(Audio(data=audio, rate=24000, autoplay=True)) print(out_ps)</code>
Akhir sekali, mari kita sintesiskan gabungan vokal lelaki Amerika dan British.
<code class="language-python">m_average = (voicepack_am_michael + voicepack_bm_george) / 2 audio, out_ps = generate(MODEL, text, m_average, lang=VOICE_NAME[0]) display(Audio(data=audio, rate=24000, autoplay=True)) print(out_ps)</code>
Saya juga menggunakan Gradio untuk menguji kesan campuran suara: (Pautan atau tangkapan skrin demo Gradio hendaklah dimasukkan di sini)
Menggabungkan ini dengan Ollama boleh membawa kepada beberapa percubaan yang menarik.
Output yang disemak ini mengekalkan makna dan struktur asal sambil meningkatkan aliran dan kejelasan blok kod berulang untuk menjana audio dengan pek suara yang berbeza telah diringkaskan untuk mengelakkan lebihan Pautan Spaces]" dan "(Pautan atau tangkapan skrin demo Gradio hendaklah dimasukkan di sini)" dengan pautan atau imej sebenar.
Atas ialah kandungan terperinci Meneroka Kokoro TTS Voice Synthesis di Google Colab dengan T4. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!