Views
No views yet
facebook/mms-tts-uzb-script_cyrillic modelini o'zbek datasetida fine-tune qilingan versiyasi.1import torch
2import soundfile as sf
3import numpy as np
4import scipy.signal as signal
5from transformers import VitsModel, AutoTokenizer
6from IPython.display import Audio, display
7
8# Model yuklash
9model = VitsModel.from_pretrained("MuzaffarSharofitdinov/mms-tts-uzbek-finetuned")
10tokenizer = AutoTokenizer.from_pretrained("MuzaffarSharofitdinov/mms-tts-uzbek-finetuned")
11model.eval()
12
13# Lotin → Kiril konvertatsiya
14LAT2CYR = {
15 "sh": "ш", "ch": "ч", "ng": "нг",
16 "g'": "ғ", "o'": "ў",
17 "yo": "ё", "yu": "ю", "ya": "я", "ts": "ц",
18 "a": "а", "b": "б", "v": "в", "g": "г", "d": "д",
19 "e": "е", "z": "з", "i": "и", "y": "й", "k": "к",
20 "l": "л", "m": "м", "n": "н", "o": "о", "p": "п",
21 "r": "р", "s": "с", "t": "т", "u": "у", "f": "ф",
22 "x": "х", "q": "қ", "h": "ҳ", "j": "ж", " ": " ",
23}
24
25def latin_to_cyrillic(text):
26 if not isinstance(text, str):
27 return ''
28 text = text.lower()
29 result = ''
30 i = 0
31 while i < len(text):
32 if i + 1 < len(text) and text[i:i+2] in LAT2CYR:
33 result += LAT2CYR[text[i:i+2]]
34 i += 2
35 elif text[i] in LAT2CYR:
36 result += LAT2CYR[text[i]]
37 i += 1
38 else:
39 i += 1
40 return result
41
42# Shovqin filtri
43def remove_noise(audio, sample_rate=16000):
44 b, a = signal.butter(2, 7000 / (sample_rate / 2), btype='low')
45 audio_filtered = signal.filtfilt(b, a, audio)
46 audio_filtered = audio_filtered / (np.max(np.abs(audio_filtered)) + 1e-8) * 0.95
47 return audio_filtered.astype(np.float32)
48
49# TTS funksiyasi
50def speak(text_latin, filename='output.wav'):
51 text_cyr = latin_to_cyrillic(text_latin)
52 inputs = tokenizer(text_cyr, return_tensors='pt')
53 with torch.no_grad():
54 audio = model(
55 **inputs,
56 noise_scale=0.1,
57 noise_scale_w=0.5,
58 length_scale=1.2,
59 ).waveform.squeeze().detach().numpy()
60 audio = remove_noise(audio, model.config.sampling_rate)
61 sf.write(filename, audio, model.config.sampling_rate)
62 return audio
63
64# Test
65speak("salom, bu sinov ovozi", "output.wav")
66display(Audio('output.wav'))facebook/mms-tts-uzb-script_cyrillicBeehzod/uzbek_stt_data (Common Voice o'zbek)flow va decoder qatlamlari| Parametr | Qiymat | Tavsif |
|---|---|---|
noise_scale | 0.1 | Past = tekisroq ovoz |
noise_scale_w | 0.5 | Ritm barqarorligi |
length_scale | 1.2 | Ovoz tezligi (1.0 = normal) |