Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
|
@@ -25,42 +25,23 @@ except ImportError:
|
|
| 25 |
inference_func = None
|
| 26 |
if hasattr(core, "get_tts_model"):
|
| 27 |
inference_func = core.get_tts_model
|
| 28 |
-
print("👉 使用新版函数: get_tts_model")
|
| 29 |
elif hasattr(core, "get_tts_wav"):
|
| 30 |
inference_func = core.get_tts_wav
|
| 31 |
-
print("👉 使用旧版函数: get_tts_wav")
|
| 32 |
|
| 33 |
-
# --- 3. 自动寻找模型
|
| 34 |
def find_real_model(pattern, search_path="."):
|
| 35 |
-
print(f"🔍 开始搜索 {pattern} ...")
|
| 36 |
candidates = []
|
| 37 |
-
|
| 38 |
for root, dirs, files in os.walk(search_path):
|
| 39 |
for file in files:
|
| 40 |
-
|
| 41 |
-
if pattern in file:
|
| 42 |
path = os.path.join(root, file)
|
| 43 |
-
|
| 44 |
-
# 排除垃圾文件
|
| 45 |
-
if file.endswith(".lock"): continue
|
| 46 |
-
if file.endswith(".metadata"): continue
|
| 47 |
-
|
| 48 |
-
# 关键:检查文件大小 (小于 10MB 的肯定是假模型)
|
| 49 |
size_mb = os.path.getsize(path) / (1024 * 1024)
|
| 50 |
-
if size_mb
|
| 51 |
-
|
| 52 |
-
continue
|
| 53 |
-
|
| 54 |
-
candidates.append((path, size_mb))
|
| 55 |
-
|
| 56 |
if candidates:
|
| 57 |
-
# 按大小降序排序,选最大的那个,绝对没错
|
| 58 |
candidates.sort(key=lambda x: x[1], reverse=True)
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
return best_path
|
| 62 |
-
|
| 63 |
-
print(f"❌ 未找到任何匹配 {pattern} 的大文件")
|
| 64 |
return None
|
| 65 |
|
| 66 |
gpt_path = find_real_model("s1v3.ckpt")
|
|
@@ -77,8 +58,6 @@ try:
|
|
| 77 |
if hasattr(core, "change_sovits_weights"):
|
| 78 |
core.change_sovits_weights(sovits_path=sovits_path)
|
| 79 |
print("🎉 模型加载完成!")
|
| 80 |
-
else:
|
| 81 |
-
print("❌ 依然没找到模型,请检查 Files 里的文件下载情况。")
|
| 82 |
except Exception as e:
|
| 83 |
print(f"⚠️ 模型加载报错: {e}")
|
| 84 |
|
|
@@ -88,6 +67,8 @@ import gradio as gr
|
|
| 88 |
|
| 89 |
REF_AUDIO = "ref.wav"
|
| 90 |
REF_TEXT = "你好"
|
|
|
|
|
|
|
| 91 |
|
| 92 |
def run_predict(text):
|
| 93 |
if not os.path.exists(REF_AUDIO):
|
|
@@ -95,12 +76,15 @@ def run_predict(text):
|
|
| 95 |
|
| 96 |
print(f"📥 任务: {text}")
|
| 97 |
try:
|
|
|
|
|
|
|
|
|
|
| 98 |
generator = inference_func(
|
| 99 |
ref_wav_path=REF_AUDIO,
|
| 100 |
prompt_text=REF_TEXT,
|
| 101 |
-
prompt_language=
|
| 102 |
text=text,
|
| 103 |
-
text_language="
|
| 104 |
how_to_cut="凑四句一切",
|
| 105 |
top_k=5, top_p=1, temperature=1, ref_free=False
|
| 106 |
)
|
|
@@ -119,9 +103,7 @@ def run_predict(text):
|
|
| 119 |
|
| 120 |
# --- 6. 界面 ---
|
| 121 |
with gr.Blocks() as app:
|
| 122 |
-
gr.Markdown(f"### GPT-SoVITS V2 CPU Worker")
|
| 123 |
-
gr.Markdown(f"GPT: `{os.path.basename(gpt_path) if gpt_path else 'Missing'}`")
|
| 124 |
-
gr.Markdown(f"SoVITS: `{os.path.basename(sovits_path) if sovits_path else 'Missing'}`")
|
| 125 |
|
| 126 |
with gr.Row():
|
| 127 |
inp = gr.Textbox(label="文本", value="终于成功了,这真是不容易啊。")
|
|
|
|
| 25 |
inference_func = None
|
| 26 |
if hasattr(core, "get_tts_model"):
|
| 27 |
inference_func = core.get_tts_model
|
|
|
|
| 28 |
elif hasattr(core, "get_tts_wav"):
|
| 29 |
inference_func = core.get_tts_wav
|
|
|
|
| 30 |
|
| 31 |
+
# --- 3. 自动寻找模型 ---
|
| 32 |
def find_real_model(pattern, search_path="."):
|
|
|
|
| 33 |
candidates = []
|
|
|
|
| 34 |
for root, dirs, files in os.walk(search_path):
|
| 35 |
for file in files:
|
| 36 |
+
if pattern in file and not file.endswith(".lock") and not file.endswith(".metadata"):
|
|
|
|
| 37 |
path = os.path.join(root, file)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
size_mb = os.path.getsize(path) / (1024 * 1024)
|
| 39 |
+
if size_mb > 10:
|
| 40 |
+
candidates.append((path, size_mb))
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
if candidates:
|
|
|
|
| 42 |
candidates.sort(key=lambda x: x[1], reverse=True)
|
| 43 |
+
print(f"✅ 选中模型: {candidates[0][0]}")
|
| 44 |
+
return candidates[0][0]
|
|
|
|
|
|
|
|
|
|
| 45 |
return None
|
| 46 |
|
| 47 |
gpt_path = find_real_model("s1v3.ckpt")
|
|
|
|
| 58 |
if hasattr(core, "change_sovits_weights"):
|
| 59 |
core.change_sovits_weights(sovits_path=sovits_path)
|
| 60 |
print("🎉 模型加载完成!")
|
|
|
|
|
|
|
| 61 |
except Exception as e:
|
| 62 |
print(f"⚠️ 模型加载报错: {e}")
|
| 63 |
|
|
|
|
| 67 |
|
| 68 |
REF_AUDIO = "ref.wav"
|
| 69 |
REF_TEXT = "你好"
|
| 70 |
+
# 关键修改:必须用中文名称,不能用 zh
|
| 71 |
+
REF_LANG = "中文"
|
| 72 |
|
| 73 |
def run_predict(text):
|
| 74 |
if not os.path.exists(REF_AUDIO):
|
|
|
|
| 76 |
|
| 77 |
print(f"📥 任务: {text}")
|
| 78 |
try:
|
| 79 |
+
# 这里的参数名根据不同版本可能略有不同
|
| 80 |
+
# 我们按照最常见的旧版逻辑传递
|
| 81 |
+
# 注意:text_language 也改成了 "中文"
|
| 82 |
generator = inference_func(
|
| 83 |
ref_wav_path=REF_AUDIO,
|
| 84 |
prompt_text=REF_TEXT,
|
| 85 |
+
prompt_language=REF_LANG,
|
| 86 |
text=text,
|
| 87 |
+
text_language="中文",
|
| 88 |
how_to_cut="凑四句一切",
|
| 89 |
top_k=5, top_p=1, temperature=1, ref_free=False
|
| 90 |
)
|
|
|
|
| 103 |
|
| 104 |
# --- 6. 界面 ---
|
| 105 |
with gr.Blocks() as app:
|
| 106 |
+
gr.Markdown(f"### GPT-SoVITS V2 (CPU Worker)")
|
|
|
|
|
|
|
| 107 |
|
| 108 |
with gr.Row():
|
| 109 |
inp = gr.Textbox(label="文本", value="终于成功了,这真是不容易啊。")
|