Inial commited on
Commit
d2e7f48
·
verified ·
1 Parent(s): 58f11fc

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +32 -32
app.py CHANGED
@@ -2,61 +2,61 @@ import gradio as gr
2
  from transformers import pipeline
3
  from huggingface_hub import list_models
4
  import langcodes
5
- import re
6
 
7
- # Tạo mapping tên ngôn ngữ → mã ISO
8
  lang_map = {}
 
9
 
10
- print("🔄 Fetching available models...")
11
- all_models = list_models(filter="facebook/mms-tts", full=True)
12
-
13
- for model in all_models:
14
- repo = model.modelId
15
- code = repo.split("-")[-1].lower()
16
-
17
- name = ""
18
  if model.cardData and "language" in model.cardData:
19
- name = model.cardData["language"]
20
  else:
21
  try:
22
- name = langcodes.Language.make(language=code).display_name()
23
  except:
24
- name = code
25
 
26
- name_clean = re.sub(r"\s+", " ", name.strip().lower())
27
- lang_map[name_clean] = code
28
 
29
- print(f"✅ Total languages found: {len(lang_map)}")
30
- print("📋 Sample languages:")
31
- for i, (k, v) in enumerate(lang_map.items()):
32
- if i >= 30:
33
- break
34
- print(f" - {k} → {v}")
35
 
36
- def tts_fn(text, language):
37
- lang_input = re.sub(r"\s+", " ", language.strip().lower())
38
- code = lang_map.get(lang_input)
39
  if not code:
40
- return f"❌ Unsupported language name: '{language}'", None
 
 
 
 
 
 
41
  model_id = f"facebook/mms-tts-{code}"
42
  try:
43
  tts = pipeline("text-to-speech", model=model_id)
44
  out = tts(text)
45
  return f"✅ Model: {model_id}", (out["audio"], "output.wav")
46
  except Exception as e:
47
- return f"❌ Error: {str(e)}", None
48
 
49
  with gr.Blocks() as demo:
50
- gr.Markdown("# 🌐 MMS-TTS: 1100+ Languages (Flexible Name Input)")
 
51
  with gr.Row():
52
- language = gr.Textbox(label="Enter language name (e.g., English, Meadow Mari)")
53
- text = gr.Textbox(label="Enter your text")
 
54
  with gr.Row():
55
- btn = gr.Button("Speak")
 
56
  with gr.Row():
57
- out_text = gr.Textbox(label="Info")
58
  out_audio = gr.Audio(label="Audio", type="filepath")
59
 
60
- btn.click(fn=tts_fn, inputs=[text, language], outputs=[out_text, out_audio])
61
 
62
  demo.launch()
 
2
  from transformers import pipeline
3
  from huggingface_hub import list_models
4
  import langcodes
5
+ import difflib
6
 
7
+ # Tạo bản đồ ngôn ngữ → mã ISO
8
  lang_map = {}
9
+ models = list_models(filter="facebook/mms-tts", full=True)
10
 
11
+ for model in models:
12
+ repo_id = model.modelId # ví dụ: facebook/mms-tts-tur
13
+ code = repo_id.split("-")[-1].lower()
14
+
15
+ # Ưu tiên lấy tên từ metadata
 
 
 
16
  if model.cardData and "language" in model.cardData:
17
+ lang_name = model.cardData["language"]
18
  else:
19
  try:
20
+ lang_name = langcodes.Language.make(code).display_name()
21
  except:
22
+ lang_name = code
23
 
24
+ lang_map[lang_name.strip().lower()] = code
 
25
 
26
+ def tts_fn(text, lang_input):
27
+ lang_key = lang_input.strip().lower()
28
+ code = lang_map.get(lang_key)
 
 
 
29
 
 
 
 
30
  if not code:
31
+ # Gợi ý
32
+ suggestions = difflib.get_close_matches(lang_key, lang_map.keys(), n=5)
33
+ msg = f"❌ Unsupported language name: '{lang_input}'"
34
+ if suggestions:
35
+ msg += f"\n🔍 Did you mean: {', '.join(suggestions)}?"
36
+ return msg, None
37
+
38
  model_id = f"facebook/mms-tts-{code}"
39
  try:
40
  tts = pipeline("text-to-speech", model=model_id)
41
  out = tts(text)
42
  return f"✅ Model: {model_id}", (out["audio"], "output.wav")
43
  except Exception as e:
44
+ return f"❌ Pipeline error: {str(e)}", None
45
 
46
  with gr.Blocks() as demo:
47
+ gr.Markdown("## 🌍 MMS-TTS: Speak over 1100 Languages\n(Just type the name, no ISO code needed!)")
48
+
49
  with gr.Row():
50
+ lang_box = gr.Textbox(label="Language (e.g., English, Meadow Mari)")
51
+ text_box = gr.Textbox(label="Text")
52
+
53
  with gr.Row():
54
+ btn = gr.Button("🔊 Speak")
55
+
56
  with gr.Row():
57
+ out_msg = gr.Textbox(label="Output Message")
58
  out_audio = gr.Audio(label="Audio", type="filepath")
59
 
60
+ btn.click(fn=tts_fn, inputs=[text_box, lang_box], outputs=[out_msg, out_audio])
61
 
62
  demo.launch()