File size: 6,235 Bytes
0c9ade6
 
 
 
 
 
 
c1be6b2
 
 
98ed83e
0c9ade6
 
 
 
9a161e2
6b11349
0c9ade6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fe595a2
 
 
 
 
 
 
 
7d289ad
0c9ade6
 
 
 
 
7d289ad
243e310
 
 
 
 
 
0c9ade6
 
 
 
243e310
0c9ade6
 
 
 
 
243e310
0c9ade6
243e310
1906a4f
 
 
 
 
 
 
0c9ade6
 
 
 
1906a4f
60d46cc
 
 
 
 
 
1906a4f
0c9ade6
 
 
 
7d289ad
 
0c9ade6
1906a4f
243e310
0c9ade6
 
 
 
 
 
 
 
 
 
 
 
 
 
7d289ad
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0c9ade6
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
---
language:
- ru
tags:
- vits
license: apache-2.0
pipeline_tag: text-to-speech
widget:
  - example_title: text to speech
    text: >
      прив+ет, как дел+а? всё +очень хорош+о! а у тебя как?
---

# Text to Speech Russian free multispeaker model

This is a multiple speakers text-to-speech model for the Russian language. It works on plain text with punctuation separation, and does not require prior conversion of the text into phonemes.
The model with multiple speakers has two voices: 0 - woman, 1 - man.

The size of the model is only 15.1 million parameters.

The text accepts lowercase.

For better generation quality, we recommend putting accents in the text before the vowel letters.

We recommend using the "ruaccent" library for accentuation.

To install "ruaccent", use: 

```bash
pip install -y ruaccent
```



For test inference use Spaces:

https://huggingface.co/spaces/utrobinmv/tts_ru_free_hf_vits_low_multispeaker



Usage example using PyTorch:

```python
from transformers import VitsModel, AutoTokenizer, set_seed
import torch
import scipy
from ruaccent import RUAccent

device = 'cuda' #  'cpu' or 'cuda'

speaker = 0 # 0-woman, 1-man  

set_seed(555)  # make deterministic

# load model
model_name = "utrobinmv/tts_ru_free_hf_vits_low_multispeaker"

model = VitsModel.from_pretrained(model_name).to(device)
tokenizer = AutoTokenizer.from_pretrained(model_name)
model.eval()

# load accentizer
accentizer = RUAccent()
accentizer.load(omograph_model_size='turbo', use_dictionary=True, device=device)

# text
text = """Ночью двадцать третьего июня начал извергаться самый высокий 
действующий вулкан в Евразии - Кл+ючевской. Об этом сообщила руководитель 
Камчатской группы реагирования на вулканические извержения, ведущий 
научный сотрудник Института вулканологии и сейсмологии ДВО РАН Ольга Гирина.
«Зафиксированное ночью не просто свечение, а вершинное эксплозивное 
извержение стромболианского типа. Пока такое извержение никому не опасно: 
ни населению, ни авиации» пояснила ТАСС госпожа Гирина."""

# the placement of accents
text = accentizer.process_all(text)
print(text)
# н+очью дв+адцать тр+етьего и+юня н+ачал изверг+аться с+амый выс+окий 
# д+ействующий вулк+ан в евр+азии - ключевск+ой. об +этом сообщ+ила 
# руковод+итель камч+атской гр+уппы реаг+ирования на вулкан+ические
# изверж+ения, вед+ущий на+учный сотр+удник инстит+ута вулканол+огии
# и сейсмол+огии дво ран +ольга г+ирина. « зафикс+ированное н+очью не
# пр+осто свеч+ение, а верш+инное эксплоз+ивное изверж+ение 
# стромболи+анского т+ипа. пок+а так+ое изверж+ение ником+у не оп+асно:
# ни насел+ению, ни ави+ации » поясн+ила тасс госпож+а г+ирина.

inputs = tokenizer(text, return_tensors="pt")

with torch.no_grad():
    output = model(**inputs.to(device), speaker_id=speaker).waveform
    output = output.detach().cpu().numpy()
    
scipy.io.wavfile.write("tts_audio.wav", rate=model.config.sampling_rate,
                       data=output[0])
```



For displayed in a Jupyter Notebook / Google Colab:

```python
from IPython.display import Audio

Audio(output, rate=model.config.sampling_rate)
```

##  

Usage example using ONNX:

First copy the model.onnx file to the folder "tts_ru_free_hf_vits_low_multispeaker".

```python
import numpy as np
import scipy
import onnxruntime
from ruaccent import RUAccent
from transformers import AutoTokenizer

speaker = 0 # 0-woman, 1-man

# load model
model_path = "tts_ru_free_hf_vits_low_multispeaker/model.onnx"

sess_options = onnxruntime.SessionOptions()
model = onnxruntime.InferenceSession(model_path, sess_options=sess_options)
tokenizer = AutoTokenizer.from_pretrained("utrobinmv/tts_ru_free_hf_vits_low_multispeaker")

# text
text = """Ночью двадцать третьего июня начал извергаться самый высокий 
действующий вулкан в Евразии - Кл+ючевской. Об этом сообщила руководитель 
Камчатской группы реагирования на вулканические извержения, ведущий 
научный сотрудник Института вулканологии и сейсмологии ДВО РАН Ольга Гирина.
«Зафиксированное ночью не просто свечение, а вершинное эксплозивное 
извержение стромболианского типа. Пока такое извержение никому не опасно: 
ни населению, ни авиации» пояснила ТАСС госпожа Гирина."""

# load accentizer
accentizer = RUAccent()
accentizer.load(omograph_model_size='turbo', use_dictionary=True)

# the placement of accents
text = accentizer.process_all(text)

# inference
inputs = tokenizer(text, return_tensors="np")
sid = np.array([speaker])
sampling_rate = 16000

output = model.run(
            None,
            {
                "input_ids": inputs['input_ids'],
                "attention_mask": inputs['attention_mask'],
                "sid": sid,
            },
        )[0]
        
scipy.io.wavfile.write("tts_audio.wav", rate=sampling_rate,
                       data=output[0])
```



For displayed in a Jupyter Notebook / Google Colab:

```python
from IPython.display import Audio

Audio(output, rate=sampling_rate)
```

##  



## Languages covered

Russian (ru_RU)