fewe32 commited on
Commit
61c3568
·
verified ·
1 Parent(s): afd844d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -54
app.py CHANGED
@@ -1,24 +1,65 @@
1
  import gradio as gr
2
  from infer import inference
 
 
3
 
 
4
  description = '''
5
  Програма може не коректно визначати деякі наголоси і не перетворює цифри, акроніми і різні скорочення в словесну форму.
6
  Якщо наголос не правильний, використовуйте символ + після наголошеного складу.
7
  Також дуже маленькі речення можуть крешати, тому пишіть щось більше а не одне-два слова.
8
  '''
9
 
10
- def synthesise(text, speed, steps, progress=gr.Progress()):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  if text.strip() == "":
12
  raise gr.Error("You must enter some text")
13
  if len(text) > 50000:
14
  raise gr.Error("Text must be <50k characters")
15
 
 
 
 
16
  print("*** saying ***")
17
  print(text)
18
  print("*** end ***")
19
 
20
  return 24000, inference(text, progress, speed=speed, alpha=1.0, diffusion_steps=steps, embedding_scale=1.0)[0]
21
 
 
22
  if __name__ == "__main__":
23
  i = gr.Interface(
24
  fn=synthesise,
@@ -26,7 +67,9 @@ if __name__ == "__main__":
26
  inputs=[
27
  gr.Text(label='Text:', lines=5, max_lines=10),
28
  gr.Slider(label='Швидкість:', maximum=1.3, minimum=0.7, value=1.0),
29
- gr.Slider(label='Кількість кроків дифузії:', minimum=3, maximum=20, step=1, value=3)
 
 
30
  ],
31
  outputs=[
32
  gr.Audio(
@@ -40,59 +83,13 @@ if __name__ == "__main__":
40
  cache_examples=False,
41
  title='StyleTTS2 Ukrainian Demo',
42
  examples=[
 
 
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
- Люде+й і [Бо+га] не прокля+в! ... ...''', 1.0, 6
96
  ]
97
  ],
98
  )
 
1
  import gradio as gr
2
  from infer import inference
3
+ import unicodedata
4
+ import regex
5
 
6
+ # Основное описание
7
  description = '''
8
  Програма може не коректно визначати деякі наголоси і не перетворює цифри, акроніми і різні скорочення в словесну форму.
9
  Якщо наголос не правильний, використовуйте символ + після наголошеного складу.
10
  Також дуже маленькі речення можуть крешати, тому пишіть щось більше а не одне-два слова.
11
  '''
12
 
13
+ # Дополнительные функции для обработки текста
14
+ def normalize_text(text):
15
+ return unicodedata.normalize('NFC', text)
16
+
17
+ def add_pauses(text):
18
+ text = text.replace(':', ':::')
19
+ text = text.replace(',', ',:::')
20
+ text = text.replace(';', ';:::')
21
+ text = text.replace('—', '—:::')
22
+ text = text.replace('–', '–:::')
23
+ text = text.replace('.', '. ... ... ')
24
+ text = text.replace('!', '! ... ...')
25
+ text = text.replace('?', '? ... ...')
26
+ return text
27
+
28
+ def convert_accented_text(text):
29
+ result = ""
30
+ for char in text:
31
+ decomposed = unicodedata.normalize('NFD', char)
32
+ if any('COMBINING ACUTE ACCENT' in unicodedata.name(c, '') for c in decomposed):
33
+ base_char = ''.join([c for c in decomposed if 'COMBINING ACUTE ACCENT' not in unicodedata.name(c, '')])
34
+ result += unicodedata.normalize('NFC', base_char) + "+"
35
+ else:
36
+ result += unicodedata.normalize('NFC', char)
37
+ return result
38
+
39
+ def preprocess_text(text, add_pauses, convert_accent):
40
+ if convert_accent:
41
+ text = convert_accented_text(text)
42
+ if add_pauses:
43
+ text = add_pauses(text)
44
+ return text
45
+
46
+ # Функция синтеза
47
+ def synthesise(text, speed, steps, add_pauses, convert_accent, progress=gr.Progress()):
48
  if text.strip() == "":
49
  raise gr.Error("You must enter some text")
50
  if len(text) > 50000:
51
  raise gr.Error("Text must be <50k characters")
52
 
53
+ # Применяем обработку в зависимости от флагов чекбоксов
54
+ text = preprocess_text(text, add_pauses, convert_accent)
55
+
56
  print("*** saying ***")
57
  print(text)
58
  print("*** end ***")
59
 
60
  return 24000, inference(text, progress, speed=speed, alpha=1.0, diffusion_steps=steps, embedding_scale=1.0)[0]
61
 
62
+ # Запуск интерфейса
63
  if __name__ == "__main__":
64
  i = gr.Interface(
65
  fn=synthesise,
 
67
  inputs=[
68
  gr.Text(label='Text:', lines=5, max_lines=10),
69
  gr.Slider(label='Швидкість:', maximum=1.3, minimum=0.7, value=1.0),
70
+ gr.Slider(label='Кількість кроків дифузії:', minimum=3, maximum=20, step=1, value=3),
71
+ gr.Checkbox(label="Add pauses", value=False),
72
+ gr.Checkbox(label="Convert accented text", value=False)
73
  ],
74
  outputs=[
75
  gr.Audio(
 
83
  cache_examples=False,
84
  title='StyleTTS2 Ukrainian Demo',
85
  examples=[
86
+ ["Решта окупантів звернула на Вокзальну — центральну вулицю Бучі...", 1.0, 6, False, False],
87
+ ["Одна дівчинка стала королевою Франції. Звали її Анна...", 1.0, 6, True, True],
88
  [
89
+ '''Одного разу, в невеликому місті, в якому все йшло за своїм розпорядком,
90
+ з’явився мандрівник з далекої країни. Він розповів жителям про дивовижні землі,
91
+ що знаходяться далеко за горизонтом, і про скарби, що чекають на тих, хто наважиться
92
+ на небезпечну подорож...''', 1.0, 6, True, False
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
  ]
94
  ],
95
  )