doof-ferb commited on
Commit
cc2e3f3
1 Parent(s): 4bbf7cf

Upload 6 files

Browse files
Files changed (6) hide show
  1. .gitattributes +2 -24
  2. README.md +16 -6
  3. app.py +122 -0
  4. colab-notebook.ipynb +66 -0
  5. packages.txt +1 -0
  6. requirements.txt +2 -0
.gitattributes CHANGED
@@ -1,35 +1,13 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
  *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
  *.npy filter=lfs diff=lfs merge=lfs -text
15
  *.npz filter=lfs diff=lfs merge=lfs -text
16
  *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
  *.pickle filter=lfs diff=lfs merge=lfs -text
21
  *.pkl filter=lfs diff=lfs merge=lfs -text
22
  *.pt filter=lfs diff=lfs merge=lfs -text
23
  *.pth filter=lfs diff=lfs merge=lfs -text
24
  *.rar filter=lfs diff=lfs merge=lfs -text
25
  *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
1
  *.ckpt filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
2
  *.npy filter=lfs diff=lfs merge=lfs -text
3
  *.npz filter=lfs diff=lfs merge=lfs -text
4
  *.onnx filter=lfs diff=lfs merge=lfs -text
 
 
 
5
  *.pickle filter=lfs diff=lfs merge=lfs -text
6
  *.pkl filter=lfs diff=lfs merge=lfs -text
7
  *.pt filter=lfs diff=lfs merge=lfs -text
8
  *.pth filter=lfs diff=lfs merge=lfs -text
9
  *.rar filter=lfs diff=lfs merge=lfs -text
10
  *.safetensors filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
11
  *.zip filter=lfs diff=lfs merge=lfs -text
12
+ g_02500000 filter=lfs diff=lfs merge=lfs -text
13
+ generator_v1 filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -1,13 +1,23 @@
1
  ---
2
- title: MatchaTTS Ngngngan
3
- emoji: 📈
4
- colorFrom: green
5
- colorTo: purple
6
  sdk: gradio
7
- sdk_version: 4.17.0
8
  app_file: app.py
9
  pinned: false
10
  license: agpl-3.0
 
 
 
11
  ---
12
 
13
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
1
  ---
2
+ title: MatchaTTS NgNgNgan
3
+ emoji: 🗣️🎙️
4
+ colorFrom: blue
5
+ colorTo: indigo
6
  sdk: gradio
 
7
  app_file: app.py
8
  pinned: false
9
  license: agpl-3.0
10
+ models: [doof-ferb/matcha_ngngngan]
11
+ tags: [tts, vietnamese]
12
+ preload_from_hub: ["doof-ferb/matcha_ngngngan ckpt/checkpoint_epoch420_slim.pt,hifigan/g_02500000"]
13
  ---
14
 
15
+ original:
16
+ - https://github.com/shivammehta25/Matcha-TTS
17
+ - https://huggingface.co/spaces/shivammehta25/Matcha-TTS/tree/main
18
+
19
+ using my fork: https://github.com/phineas-pta/MatchaTTS_ngngngan
20
+
21
+ data scraping code: https://github.com/phineas-pta/speech-synthesis-ngngngan
22
+
23
+ download checkpoints: https://huggingface.co/doof-ferb/matcha_ngngngan
app.py ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+
4
+ import gradio as gr
5
+ import torch
6
+ from huggingface_hub import hf_hub_download
7
+
8
+ from matcha.cli import get_torch_device, load_matcha, load_vocoder, process_text, to_waveform
9
+ from matcha.utils.utils import plot_tensor
10
+
11
+
12
+ TITLE="🍵 Matcha-TTS: A fast TTS architecture with conditional flow matching"
13
+ DESCRIPTION = """# chuyển đổi chuyển văn bản thành giọng nói, sử dụng giọng đọc của nhà văn Nguyễn Ngọc Ngạn
14
+
15
+ original: 🍵 https://github.com/shivammehta25/Matcha-TTS
16
+
17
+ my personal checkpoints: a speech-synthesis model of Vietnamese M.C. Nguyễn Ngọc Ngạn
18
+
19
+ the checkpoints is released under CC-BY-NC-SA-4.0
20
+
21
+ In accordance with the terms of the CC-BY-NC-SA-4.0 license, the use of my checkpoints and any audio output generated by them for commercial purposes is strictly prohibited. This includes, but is not limited to:
22
+ - online and offline voice cloning as a service
23
+ - online and offline text-to-speech as a service
24
+ - content creation for monetization on social media platforms
25
+
26
+ Căn cứ vào các điều khoản của giấp phép CC-BY-NC-SA-4.0, việc sử dụng các checkpoints này và bất kỳ đầu ra âm thanh nào được tạo bởi chúng đều bị nghiêm cấm sử dụng cho mục đích thương mại. Điều này bao gồm, nhưng không giới hạn ở:
27
+ - các dịch vụ nhân bản giọng nói trực tuyến và ngoại tuyến
28
+ - các dịch vụ chuyển văn bản thành giọng nói trực tuyến và ngoại tuyến
29
+ - tạo nội dung để kiếm tiền trên các nền tảng mạng xã hội"""
30
+
31
+
32
+ DEMO_TEXT_0 = "Đây là một chương trình chuyển đổi văn bản thành giọng nói, sử dụng giọng đọc của nhà văn Nguyễn Ngọc Ngạn"
33
+ DEMO_TEXT_1 = "Kính thưa quý vị, xin quý vị ghé vào thăm kênh Youtube Nguyễn Ngọc Ngạn, quý vị sẽ gặp lại tất cả các băng đọc truyện của Nguyễn Ngọc Ngạn do Trung tâm Thúy Nga thực hiện và những truyện mới cùng những buổi nói chuyện về nhiều đề tài phổ biến khác nhau. Xin chân thành cảm ơn và chờ đón quý vị."
34
+
35
+
36
+ # model files already pre-downloaded, see README.md >>> preload_from_hub
37
+ MODEL_PATH = hf_hub_download(repo_id="doof-ferb/matcha_ngngngan", filename="ckpt/checkpoint_epoch420_slim.pt")
38
+ VOCODER_PATH = hf_hub_download(repo_id="doof-ferb/matcha_ngngngan", filename="hifigan/g_02500000")
39
+ DEVICE = get_torch_device()
40
+ MODEL = load_matcha(MODEL_PATH, DEVICE)
41
+ VOCODER, DENOISER = load_vocoder(VOCODER_PATH, DEVICE)
42
+
43
+
44
+ @torch.inference_mode()
45
+ def process_text_gradio(text):
46
+ output = process_text(text, DEVICE)
47
+ return output["x_phones"][1::2], output["x"], output["x_lengths"]
48
+
49
+
50
+ @torch.inference_mode()
51
+ def synthesise_mel(text, text_length, n_timesteps, temperature, length_scale):
52
+ output = MODEL.synthesise(text, text_length, n_timesteps=n_timesteps,temperature=temperature, spks=None, length_scale=length_scale)
53
+ waveform = to_waveform(output["mel"], VOCODER, DENOISER).numpy()
54
+ return (22050, waveform), plot_tensor(output["mel"].squeeze().cpu().numpy())
55
+ # sample rate 22.05 kHz
56
+
57
+
58
+ def example_cacher(text, n_timesteps, mel_temp, length_scale):
59
+ phones, text, text_lengths = process_text_gradio(text)
60
+ audio, mel_spectrogram = synthesise_mel(text, text_lengths, n_timesteps, mel_temp, length_scale)
61
+ return phones, audio, mel_spectrogram
62
+
63
+
64
+ with gr.Blocks(title=TITLE, theme="soft") as demo:
65
+ processed_text = gr.State(value=None)
66
+ processed_text_len = gr.State(value=None)
67
+
68
+ with gr.Row():
69
+ gr.Markdown(DESCRIPTION)
70
+
71
+ with gr.Group():
72
+ with gr.Row():
73
+ text = gr.Textbox(label="nhập văn bản tiếng việt", lines=3)
74
+ synth_btn = gr.Button("Chuyển thành giọng nói", variant="primary", scale=0, size="lg")
75
+ with gr.Accordion(label="tuỳ chọn nâng cao", open=False):
76
+ with gr.Row():
77
+ n_timesteps = gr.Slider(label="số bước xoá nhiễu", minimum=1, maximum=100, step=1, value=50, interactive=True)
78
+ length_scale = gr.Slider(label="length scale", info="càng lớn thì đọc càng chậm", minimum=0.5, maximum=1.5, step=0.05, value=.95, interactive=True)
79
+ mel_temp = gr.Slider(label="sampling temperature", minimum=0.00, maximum=2.001, step=0.16675, value=0.667, interactive=True,)
80
+ # idk min max of denoiser strength so let it default at 2.5e-4
81
+
82
+ with gr.Group():
83
+ with gr.Row():
84
+ audio = gr.Audio(label="audio", interactive=False)
85
+ with gr.Accordion(label="thông tin chuyên sâu", open=False):
86
+ with gr.Row():
87
+ phonetised_text = gr.Textbox(label="Văn bản dưới dạng mẫu tự biểu âm quốc tế (IPA)", info="khẩu âm Hà Nội", interactive=False, lines=3)
88
+ mel_spectrogram = gr.Image(label="mel spectrogram", interactive=False)
89
+
90
+ with gr.Row():
91
+ examples = gr.Examples(
92
+ label="ví dụ văn bản đầu vào",
93
+ examples=[
94
+ [DEMO_TEXT_0, 2, 0.677, 0.95],
95
+ [DEMO_TEXT_0, 4, 0.677, 0.95],
96
+ [DEMO_TEXT_0, 10, 0.677, 0.95],
97
+ [DEMO_TEXT_0, 50, 0.677, 0.95],
98
+ [DEMO_TEXT_1, 50, 0.677, 0.95],
99
+ ],
100
+ fn=example_cacher,
101
+ inputs=[text, n_timesteps, mel_temp, length_scale],
102
+ outputs=[phonetised_text, audio, mel_spectrogram],
103
+ cache_examples=True,
104
+ )
105
+
106
+ with gr.Row():
107
+ gr.Markdown("[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/#fileId=https://huggingface.co/spaces/doof-ferb/MatchaTTS_ngngngan/blob/main/colab-notebook.ipynb)")
108
+
109
+ synth_btn.click(
110
+ fn=process_text_gradio,
111
+ inputs=[text],
112
+ outputs=[phonetised_text, processed_text, processed_text_len],
113
+ api_name="phonemize",
114
+ queue=True,
115
+ ).then(
116
+ fn=synthesise_mel,
117
+ inputs=[processed_text, processed_text_len, n_timesteps, mel_temp, length_scale],
118
+ outputs=[audio, mel_spectrogram],
119
+ api_name="speak",
120
+ )
121
+
122
+ demo.queue(default_concurrency_limit=5).launch()
colab-notebook.ipynb ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": null,
6
+ "metadata": {},
7
+ "outputs": [],
8
+ "source": [
9
+ "!apt-get install espeak-ng\n",
10
+ "%pip install -q git+https://github.com/phineas-pta/MatchaTTS_ngngngan.git\n",
11
+ "\n",
12
+ "import IPython.display as ipd\n",
13
+ "import torch\n",
14
+ "from huggingface_hub import hf_hub_download\n",
15
+ "from matcha.cli import get_torch_device, load_matcha, load_vocoder, process_text, to_waveform\n",
16
+ "\n",
17
+ "MODEL_PATH = hf_hub_download(repo_id=\"doof-ferb/matcha_ngngngan\", filename=\"ckpt/checkpoint_epoch420_slim.pt\")\n",
18
+ "VOCODER_PATH = hf_hub_download(repo_id=\"doof-ferb/matcha_ngngngan\", filename=\"hifigan/g_02500000\")\n",
19
+ "DEVICE = get_torch_device()\n",
20
+ "MODEL = load_matcha(MODEL_PATH, DEVICE)\n",
21
+ "VOCODER, DENOISER = load_vocoder(VOCODER_PATH, DEVICE)\n",
22
+ "\n",
23
+ "@torch.inference_mode()\n",
24
+ "def tts(text, n_timesteps, temperature, length_scale, denoiser_strength):\n",
25
+ "\ttmp0 = process_text(text, DEVICE)\n",
26
+ "\tphones, txt, txt_len = tmp0[\"x_phones\"][1::2], tmp0[\"x\"], tmp0[\"x_lengths\"]\n",
27
+ "\toutput = MODEL.synthesise(txt, txt_len, n_timesteps=n_timesteps, temperature=temperature, spks=None, length_scale=length_scale)\n",
28
+ "\twaveform = to_waveform(output[\"mel\"], VOCODER, DENOISER, denoiser_strength=denoiser_strength).numpy()\n",
29
+ "\tipd.display(ipd.Audio(waveform, rate=22050))\n",
30
+ "\tipd.display(ipd.Markdown(\"Văn bản dưới dạng mẫu tự biểu âm quốc tế (IPA), khẩu âm Hà Nội\\n\\n\" + phones))"
31
+ ]
32
+ },
33
+ {
34
+ "cell_type": "code",
35
+ "execution_count": null,
36
+ "metadata": {},
37
+ "outputs": [],
38
+ "source": [
39
+ "tts(\n",
40
+ "\"\"\"Kính thưa quý vị, xin quý vị ghé vào thăm kênh Youtube Nguyễn Ngọc Ngạn,\n",
41
+ "quý vị sẽ gặp lại tất cả các băng đọc truyện của Nguyễn Ngọc Ngạn do Trung tâm Thúy Nga thực hiện\n",
42
+ "và những truyện mới cùng những buổi nói chuyện về nhiều đề tài phổ biến khác nhau.\n",
43
+ "Xin chân thành cảm ơn và chờ đón quý vị.\"\"\",\n",
44
+ "n_timesteps=50, temperature=0.667, length_scale=.95, denoiser_strength=2.5e-4\n",
45
+ ")"
46
+ ]
47
+ }
48
+ ],
49
+ "metadata": {
50
+ "colab": {
51
+ "private_outputs": true,
52
+ "provenance": [],
53
+ "gpuType": "T4"
54
+ },
55
+ "kernelspec": {
56
+ "name": "python3",
57
+ "display_name": "Python 3"
58
+ },
59
+ "language_info": {
60
+ "name": "python"
61
+ },
62
+ "accelerator": "GPU"
63
+ },
64
+ "nbformat": 4,
65
+ "nbformat_minor": 0
66
+ }
packages.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ espeak-ng
requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ git+https://github.com/phineas-pta/MatchaTTS_ngngngan.git
2
+ # --find-links=https://download.pytorch.org/whl/torch_stable.html