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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +26 -23
app.py CHANGED
@@ -4,59 +4,62 @@ 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()
 
4
  import langcodes
5
  import difflib
6
 
7
+ # Map tên ngôn ngữ (không phân biệt hoa/thường) → mã ISO
8
  lang_map = {}
9
+
10
  models = list_models(filter="facebook/mms-tts", full=True)
11
 
12
  for model in models:
13
+ model_id = model.modelId # ví dụ: facebook/mms-tts-kaz
14
+ code = model_id.split("-")[-1].lower()
15
 
16
+ # Lấy tên ngôn ngữ từ metadata hoặc từ mã ISO
17
  if model.cardData and "language" in model.cardData:
18
+ name = model.cardData["language"]
19
  else:
20
  try:
21
+ name = langcodes.Language.make(code).display_name()
22
  except:
23
+ name = code.upper()
24
 
25
+ # Đưa vào bản đồ, key là lowercase để không phân biệt hoa/thường
26
+ lang_map[name.strip().lower()] = code
27
 
28
+ def tts_fn(text, language):
29
+ key = language.strip().lower()
30
+ code = lang_map.get(key)
31
 
32
  if not code:
33
+ # Nếu không tìm thấy → gợi ý tên gần giống
34
+ suggestions = difflib.get_close_matches(key, lang_map.keys(), n=5)
35
+ msg = f"❌ Unsupported language name: '{language}'"
36
  if suggestions:
37
+ msg += f"\nDid you mean: {', '.join(suggestions)}?"
38
  return msg, None
39
 
40
  model_id = f"facebook/mms-tts-{code}"
41
+
42
  try:
43
  tts = pipeline("text-to-speech", model=model_id)
44
  out = tts(text)
45
+ return f"✅ Success with model {model_id}", (out["audio"], "output.wav")
46
  except Exception as e:
47
  return f"❌ Pipeline error: {str(e)}", None
48
 
49
  with gr.Blocks() as demo:
50
+ gr.Markdown("## 🌍 MMS-TTS (1100+ Languages)\nJust type the language name, no ISO needed!")
51
 
52
  with gr.Row():
53
+ lang_input = gr.Textbox(label="Language name (e.g. English, Meadow Mari)")
54
+ text_input = gr.Textbox(label="Text")
55
 
56
  with gr.Row():
57
+ speak_button = gr.Button("🔊 Speak")
58
 
59
  with gr.Row():
60
+ result_text = gr.Textbox(label="Info")
61
+ result_audio = gr.Audio(label="Audio", type="filepath")
62
 
63
+ speak_button.click(fn=tts_fn, inputs=[text_input, lang_input], outputs=[result_text, result_audio])
64
 
65
  demo.launch()