txh17 commited on
Commit
522b4a9
·
verified ·
1 Parent(s): 907a89e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -23
app.py CHANGED
@@ -1,5 +1,5 @@
1
  import gradio as gr
2
- from transformers import pipeline
3
  import torch
4
  import numpy as np
5
  import plotly.graph_objects as go
@@ -11,11 +11,11 @@ HF_HOME = os.getenv("HF_HOME", "./hf_cache")
11
  os.makedirs(HF_HOME, exist_ok=True)
12
 
13
  # 定义模型路径和名称
14
- # 模型 A: 文本到语音 (Text-to-Speech)
15
- MODEL_TTS = "facebook/mms-tts-eng"
16
 
17
- # 模型 B: 文本到音效/简单音频 (Text-to-Audio/Sound Generation)
18
- MODEL_AUDIOGEN = "facebook/audiogen-small" # 尽管不加载,但保持路径定义
19
 
20
  # 确定加载模型的设备
21
  device = "cuda" if torch.cuda.is_available() else "cpu"
@@ -26,18 +26,20 @@ tts_pipeline = None
26
  audiogen_pipeline = None # 保持声明,但不会加载
27
 
28
  def load_tts_model():
29
- """加载 MMS-TTS 模型。"""
30
  print(f"正在加载 TTS 模型: {MODEL_TTS} 到 {device}...")
31
  try:
 
 
 
32
  pipe = pipeline("text-to-speech", model=MODEL_TTS, device=device)
33
- print("MMS-TTS 模型加载成功。")
34
  return pipe
35
  except Exception as e:
36
- print(f"加载 MMS-TTS 时出错: {e}")
37
  return None
38
 
39
  # !!! 注意:这个函数仍然存在,但不会在 initialize_all_models 中调用 !!!
40
- # 如果你想在未来使用 AudioGen,可以手动取消注释
41
  def load_audiogen_model():
42
  """加载 AudioGen-small 模型。"""
43
  print(f"正在加载 AudioGen 模型: {MODEL_AUDIOGEN} 到 {device}...")
@@ -58,9 +60,9 @@ def initialize_all_models():
58
  # --- 音频生成推理函数 ---
59
 
60
  def generate_audio_tts(prompt):
61
- """使用 MMS-TTS 生成语音。"""
62
  if tts_pipeline is None:
63
- print("MMS-TTS 模型未加载或加载失败。")
64
  return (16000, np.zeros(0)) # 返回空音频
65
  try:
66
  result = tts_pipeline(prompt)
@@ -68,7 +70,7 @@ def generate_audio_tts(prompt):
68
  sampling_rate = result['sampling_rate']
69
  return (sampling_rate, audio_array)
70
  except Exception as e:
71
- print(f"使用 MMS-TTS 生成音频出错: {e}")
72
  return (16000, np.zeros(0))
73
 
74
  def generate_audio_audiogen(prompt):
@@ -90,7 +92,7 @@ def arena_predict(prompt):
90
  """Arena 选项卡的主预测函数。只加载 TTS 模型时,AudioGen 将返回空。"""
91
  print(f"收到提示词: {prompt}")
92
 
93
- # MMS-TTS 生成
94
  tts_sr, tts_audio = generate_audio_tts(prompt)
95
 
96
  # AudioGen-small 生成 (此处会因为 audiogen_pipeline 为 None 而返回空音频)
@@ -101,7 +103,7 @@ def arena_predict(prompt):
101
  # --- 模型对比/GRACE评估逻辑 ---
102
  # 假设的 GRACE 评估数据
103
  grace_data = {
104
- "MMS-TTS-Eng": {
105
  "Generalization": 2.5,
106
  "Relevance": 4.5,
107
  "Artistry": 4.0,
@@ -162,23 +164,23 @@ report_content = """
162
 
163
  ### 1.1 所选模型的类型及背景说明
164
  本次实验聚焦于**文本到音频(Text-to-Audio)生成模型**,具体选择了两个在功能上有所侧重且模型尺寸相对较小的模型进行对比:
165
- 1. **`facebook/mms-tts-eng` (MMS-TTS-Eng)**:这是一个由 Meta AI (Facebook) 开发的**文本到语音(Text-to-Speech, TTS)**模型。它属Massively Multilingual Speech (MMS) 项目一部分旨在支持大量语言语音成。我们选择是英语版本 (`eng`),它以其高效、轻量级和清晰的语音输出而闻名
166
  2. **`facebook/audiogen-small` (AudioGen-small)**:这款模型是 Meta AI AudioCraft 框架下的一个较小版本,专注于**文本到音效或简单音频片段**的生成。它能够根据文本描述创建环境音、乐器声或短小的声音事件。
167
 
168
  ### 1.2 模型用途对比简述
169
- * **MMS-TTS-Eng** 的主要用途是将书面文本转换为自然发音的**人类语音**,适用于有声读物、语音助手、导航系统等场景。
170
  * **AudioGen-small** 的主要用途是根据文本描述生成各种**非语音的音效或短音乐片段**,例如“雨声”、“鸟鸣”或“简单的吉他旋律”,适用于游戏音效、视频配乐或环境音模拟。
171
 
172
  ### 1.3 两个模型异同点分析
173
  **相同点:**
174
  * 都属于文本到音频生成领域,将文本作为输入。
175
- * 都由 Meta AI 开发,并在 Hugging Face Hub 上提供
176
- * 都相对轻量级,相比大型文生音/乐模型(如 Stable Audio 或 MusicGen-large)对资源要求更低。
177
 
178
  **不同点:**
179
- * **核心功能:** MMS-TTS 专注于**语音合成**,目标是还原人类语音的自然度;AudioGen 专注于**非语音音频生成**,目标是模拟真实世界的音效或创作音乐片段。
180
- * **输出类型:** MMS-TTS 输出的是人类语言的声音;AudioGen 输出的是环境音、乐器音、抽象音效等。
181
- * **内部机制:** 尽管都基于 Transformer 架构,但它们的内部训练数据、任务目标和具体架构优化不同,以适应各自的生成任务。
182
 
183
  ---
184
 
@@ -193,9 +195,9 @@ report_content = """
193
  ```mermaid
194
  graph TD
195
  A[用户输入文本提示词] --> B{Gradio UI};
196
- B --> C1[MMS-TTS 模型];
197
  B --> C2[AudioGen-small 模型];
198
- C1 -- 生成语音 --> D1[MMS-TTS 音频输出];
199
  C2 -- 生成音效 --> D2[AudioGen-small 音频输出];
200
  D1 --> E[Arena 选项卡展示];
201
  D2 --> E;
 
1
  import gradio as gr
2
+ from transformers import pipeline # 保持使用 transformers pipeline
3
  import torch
4
  import numpy as np
5
  import plotly.graph_objects as go
 
11
  os.makedirs(HF_HOME, exist_ok=True)
12
 
13
  # 定义模型路径和名称
14
+ # 模型 A: 文本到语音 (Text-to-Speech) - 更换为 SpeechBrain 的轻量级模型
15
+ MODEL_TTS = "speechbrain/tts-tacotron2-ljspeech"
16
 
17
+ # 模型 B: 文本到音效/简单音频 (Text-to-Audio/Sound Generation) - 仍然不加载
18
+ MODEL_AUDIOGEN = "facebook/audiogen-small"
19
 
20
  # 确定加载模型的设备
21
  device = "cuda" if torch.cuda.is_available() else "cpu"
 
26
  audiogen_pipeline = None # 保持声明,但不会加载
27
 
28
  def load_tts_model():
29
+ """加载 MMS-TTS 模型。现在尝试 SpeechBrain 的 Tacotron2。"""
30
  print(f"正在加载 TTS 模型: {MODEL_TTS} 到 {device}...")
31
  try:
32
+ # 对于 SpeechBrain 的模型,直接使用 pipeline 可能更简单
33
+ # 注意:SpeechBrain 的 pipeline 可能需要安装 speechbrain 库
34
+ # 确保你的 requirements.txt 包含 speechbrain
35
  pipe = pipeline("text-to-speech", model=MODEL_TTS, device=device)
36
+ print("TTS 模型加载成功。")
37
  return pipe
38
  except Exception as e:
39
+ print(f"加载 TTS (SpeechBrain) 时出错: {e}")
40
  return None
41
 
42
  # !!! 注意:这个函数仍然存在,但不会在 initialize_all_models 中调用 !!!
 
43
  def load_audiogen_model():
44
  """加载 AudioGen-small 模型。"""
45
  print(f"正在加载 AudioGen 模型: {MODEL_AUDIOGEN} 到 {device}...")
 
60
  # --- 音频生成推理函数 ---
61
 
62
  def generate_audio_tts(prompt):
63
+ """使用 TTS 模型生成语音。"""
64
  if tts_pipeline is None:
65
+ print("TTS 模型未加载或加载失败。")
66
  return (16000, np.zeros(0)) # 返回空音频
67
  try:
68
  result = tts_pipeline(prompt)
 
70
  sampling_rate = result['sampling_rate']
71
  return (sampling_rate, audio_array)
72
  except Exception as e:
73
+ print(f"使用 TTS 生成音频出错: {e}")
74
  return (16000, np.zeros(0))
75
 
76
  def generate_audio_audiogen(prompt):
 
92
  """Arena 选项卡的主预测函数。只加载 TTS 模型时,AudioGen 将返回空。"""
93
  print(f"收到提示词: {prompt}")
94
 
95
+ # TTS 生成
96
  tts_sr, tts_audio = generate_audio_tts(prompt)
97
 
98
  # AudioGen-small 生成 (此处会因为 audiogen_pipeline 为 None 而返回空音频)
 
103
  # --- 模型对比/GRACE评估逻辑 ---
104
  # 假设的 GRACE 评估数据
105
  grace_data = {
106
+ "MMS-TTS-Eng": { # 虽然现在用 SpeechBrain,但报表里仍沿用原名
107
  "Generalization": 2.5,
108
  "Relevance": 4.5,
109
  "Artistry": 4.0,
 
164
 
165
  ### 1.1 所选模型的类型及背景说明
166
  本次实验聚焦于**文本到音频(Text-to-Audio)生成模型**,具体选择了两个在功能上有所侧重且模型尺寸相对较小的模型进行对比:
167
+ 1. **`speechbrain/tts-tacotron2-ljspeech` (新的 TTS 模型)**:这是一个由 SpeechBrain 开发的**文本到语音(Text-to-Speech, TTS)**模型,基Tacotron2 架构。相比之前尝试模型它通常更小巧,对计算资源需求可能更低,因此更适在有限CPU 环境下运行
168
  2. **`facebook/audiogen-small` (AudioGen-small)**:这款模型是 Meta AI AudioCraft 框架下的一个较小版本,专注于**文本到音效或简单音频片段**的生成。它能够根据文本描述创建环境音、乐器声或短小的声音事件。
169
 
170
  ### 1.2 模型用途对比简述
171
+ * **TTS 模型 (Tacotron2)** 的主要用途是将书面文本转换为自然发音的**人类语音**,适用于有声读物、语音助手、导航系统等场景。
172
  * **AudioGen-small** 的主要用途是根据文本描述生成各种**非语音的音效或短音乐片段**,例如“雨声”、“鸟鸣”或“简单的吉他旋律”,适用于游戏音效、视频配乐或环境音模拟。
173
 
174
  ### 1.3 两个模型异同点分析
175
  **相同点:**
176
  * 都属于文本到音频生成领域,将文本作为输入。
177
+ * 都在 Hugging Face Hub 上找到
178
+ * 都相对轻量级,相比大型文生音/乐模型对资源要求更低。
179
 
180
  **不同点:**
181
+ * **核心功能:** TTS 模型专注于**语音合成**,目标是还原人类语音的自然度;AudioGen 专注于**非语音音频生成**,目标是模拟真实世界的音效或创作音乐片段。
182
+ * **输出类型:** TTS 模型输出的是人类语言的声音;AudioGen 输出的是环境音、乐器音、抽象音效等。
183
+ * **内部机制:** 尽管都基于 Transformer 架构(Tacotron2 包含编码器和解码器),但它们的内部训练数据、任务目标和具体架构优化不同,以适应各自的生成任务。
184
 
185
  ---
186
 
 
195
  ```mermaid
196
  graph TD
197
  A[用户输入文本提示词] --> B{Gradio UI};
198
+ B --> C1[TTS 模型];
199
  B --> C2[AudioGen-small 模型];
200
+ C1 -- 生成语音 --> D1[TTS 音频输出];
201
  C2 -- 生成音效 --> D2[AudioGen-small 音频输出];
202
  D1 --> E[Arena 选项卡展示];
203
  D2 --> E;