johnwang2026 commited on
Commit
4ce7c67
·
verified ·
1 Parent(s): f9dca05

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -25
app.py CHANGED
@@ -1,45 +1,40 @@
1
  import gradio as gr
2
- from transformers import AutoModel, AutoTokenizer # 彻底不用AutoModelForTextToSpeech
3
  import soundfile as sf
4
  import torch
5
  import os
6
 
7
- # 换用超轻量中文TTS模型(体积仅1.2GB,免费Space无压力)
8
- model_name = "yeyupiaoling/PP-TTS-v2"
9
- tokenizer = AutoTokenizer.from_pretrained(model_name)
10
- model = AutoModel.from_pretrained(model_name)
 
 
 
11
 
12
- # 手动分配设备(CPU优先,避免任何依赖冲突)
13
- device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
14
- model = model.to(device)
15
-
16
- # 语音生成函数(简化逻辑,确保稳定)
17
  def generate_speech(text):
18
  if not text.strip():
19
  return None, "错误:请输入有效文本!"
20
 
21
- # 文本编码(适配模型要求)
22
- inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True, max_length=512).to(device)
23
-
24
- # 生成语音(关闭梯度计算,节省内存)
25
- with torch.no_grad():
26
- output = model.generate(**inputs)
27
- audio_output = output["wav"].cpu().numpy()[0] # 提取音频数据
28
 
29
- # 保存音频(采样率24000Hz,适配模型输出)
30
  output_path = "output.wav"
31
  sf.write(output_path, audio_output, samplerate=24000)
32
 
33
- return output_path, "语音生成成功!(超轻量模型,适配免费Space)"
34
 
35
- # 简洁界面(减少资源占用)
36
- with gr.Blocks(title="轻量中文TTS") as demo:
37
- gr.Markdown("# 🎤 免费中文文本转语音")
38
- gr.Markdown("基于PP-TTS-v2模型(体积1.2GB),适配免费Space,生成快速稳定")
39
 
40
  text_input = gr.Textbox(
41
- label="输入中文文本",
42
- placeholder="请输入中文文本(建议≤500字)...",
43
  lines=4
44
  )
45
  audio_output = gr.Audio(label="生成的语音", type="filepath")
 
1
  import gradio as gr
2
+ from transformers import pipeline # 用pipeline简化调用,避免模型加载冲突
3
  import soundfile as sf
4
  import torch
5
  import os
6
 
7
+ # 初始化超轻量中文TTS管道(模型体积<800MB,无依赖冲突)
8
+ device = 0 if torch.cuda.is_available() else -1 # CPU/GPU自动适配
9
+ tts = pipeline(
10
+ "text-to-speech",
11
+ model="suno/bark-small", # 超轻量模型,支持中英文,体积仅700MB
12
+ device=device
13
+ )
14
 
15
+ # 语音生成函数(极简逻辑,稳定无错)
 
 
 
 
16
  def generate_speech(text):
17
  if not text.strip():
18
  return None, "错误:请输入有效文本!"
19
 
20
+ # 生成语音(控制长度,避免内存溢出)
21
+ text = text[:300] # 限制300字内,适配免费配置
22
+ audio_output = tts(text)["audio"]
 
 
 
 
23
 
24
+ # 保存音频(采样率24000Hz,通用格式)
25
  output_path = "output.wav"
26
  sf.write(output_path, audio_output, samplerate=24000)
27
 
28
+ return output_path, "语音生成成功!(无依赖冲突,稳定运行)"
29
 
30
+ # 极简界面(减少资源占用)
31
+ with gr.Blocks(title="无冲突TTS") as demo:
32
+ gr.Markdown("# 🎤 免费中英双语TTS(无冲突版)")
33
+ gr.Markdown("基于suno/bark-small模型(700MB),适配免费Space,无依赖冲突")
34
 
35
  text_input = gr.Textbox(
36
+ label="输入文本(中英双语)",
37
+ placeholder="请输入中文或英文文本(≤300字)...",
38
  lines=4
39
  )
40
  audio_output = gr.Audio(label="生成的语音", type="filepath")