Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -336,7 +336,7 @@ def FRCRN_De_Noise(noise_wav, noisemic_wav):
|
|
| 336 |
|
| 337 |
ans = pipeline(
|
| 338 |
Tasks.acoustic_noise_suppression,
|
| 339 |
-
model='/home/
|
| 340 |
|
| 341 |
# 生成文件名
|
| 342 |
now = datetime.datetime.now()
|
|
@@ -346,8 +346,40 @@ def FRCRN_De_Noise(noise_wav, noisemic_wav):
|
|
| 346 |
|
| 347 |
result = ans(
|
| 348 |
noise_audio,
|
| 349 |
-
output_path= filename + "
|
| 350 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 351 |
return filename + "denoise.wav"
|
| 352 |
|
| 353 |
|
|
@@ -382,6 +414,19 @@ with app:
|
|
| 382 |
btn2.click(train, inp2, out2)
|
| 383 |
btn3.click(infer, inp3, out3)
|
| 384 |
btn4.click(save_model, out1, out4) # 保存模型到 trained_model 文件夹
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 385 |
|
| 386 |
with gr.TabItem("声音合成"):
|
| 387 |
with gr.Row():
|
|
@@ -398,6 +443,16 @@ with app:
|
|
| 398 |
|
| 399 |
btn21.click(update_model_dropdown, inp21, inp21)
|
| 400 |
btn22.click(infer_custom, [inp21, inp23, inp22], out21) # 根据选择的模型和输入的文本进行推理
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 401 |
|
| 402 |
with gr.TabItem("模型修改"):
|
| 403 |
with gr.Row():
|
|
@@ -412,18 +467,42 @@ with app:
|
|
| 412 |
btn32 = gr.Button("重命名", variant="primary") # 重命名模型
|
| 413 |
|
| 414 |
btn31.click(update_model_dropdown, inp31, inp31)
|
| 415 |
-
btn32.click(rename_model, [inp31, inp32], out31)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 416 |
|
| 417 |
with gr.TabItem("AI降噪"):
|
| 418 |
with gr.Row():
|
| 419 |
with gr.Column():
|
| 420 |
inp41 = gr.Audio(type="filepath", sources="upload", label="方案一:请从本地上传一段语音")
|
| 421 |
-
|
| 422 |
with gr.Column():
|
| 423 |
-
out41 = gr.Audio(type="filepath", label="
|
| 424 |
-
|
|
|
|
|
|
|
| 425 |
|
| 426 |
-
btn41.click(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 427 |
|
| 428 |
with gr.TabItem("缓存清理"): # 创建一个 gr.Blocks() 组件,命名为 "加载和推理"
|
| 429 |
with gr.Row():
|
|
@@ -444,13 +523,15 @@ with app:
|
|
| 444 |
|
| 445 |
|
| 446 |
|
| 447 |
-
with gr.Accordion("📒 使用指南", open=
|
| 448 |
_ = f""" 如何使用此程序:
|
| 449 |
-
*
|
| 450 |
-
*
|
| 451 |
-
*
|
|
|
|
|
|
|
| 452 |
* !!注意!! 不要生成会对个人以及组织造成侵害的内容
|
| 453 |
-
* 如果您需要
|
| 454 |
|
| 455 |
记得春天的时候,小草就转出地面,树上的叶子也抽出来了,大地一片绿色,就像穿上了一件绿衣裳。我就与小孩子一起到田野去捉蜻蜓,玩游戏,比如老鹰合作小鸡或是捉迷藏,又或是跳格子。到了夏天,天气热了,我就会与小孩子到水库里面游泳,那时候水库的安全系数还不是很高,几乎每年都会有事故发生,所以父母都不会让我去游泳的,被发现之后当然就是处罚或是责骂了。可是那时候自己真的很叛逆,也不知道什么是危险,被处罚之后下一次还是回去的。到了秋天,田野一片金黄,山上的野果也成熟了,我就会与自己的伙伴拿着篮子到上山去采,采回来了还要跟自己的好朋友一起分享。
|
| 456 |
|
|
@@ -466,4 +547,5 @@ with app:
|
|
| 466 |
</div>
|
| 467 |
''')
|
| 468 |
|
|
|
|
| 469 |
app.launch(show_error=True, share=False)
|
|
|
|
| 336 |
|
| 337 |
ans = pipeline(
|
| 338 |
Tasks.acoustic_noise_suppression,
|
| 339 |
+
model='/home/yiho/Personal-TTS-v3/damo/speech_frcrn_ans_cirm_16k')
|
| 340 |
|
| 341 |
# 生成文件名
|
| 342 |
now = datetime.datetime.now()
|
|
|
|
| 346 |
|
| 347 |
result = ans(
|
| 348 |
noise_audio,
|
| 349 |
+
output_path= filename + "AIdenoise.wav" )
|
| 350 |
|
| 351 |
+
return filename + "AIdenoise.wav"
|
| 352 |
+
|
| 353 |
+
#使用傅里叶变换降噪
|
| 354 |
+
def Normal_De_Noise(noise_wav, noisemic_wav, noise_level):
|
| 355 |
+
if noisemic_wav is not None:
|
| 356 |
+
noise_audio = noisemic_wav
|
| 357 |
+
else:
|
| 358 |
+
noise_audio = noise_wav
|
| 359 |
+
|
| 360 |
+
# 生成文件名
|
| 361 |
+
now = datetime.datetime.now()
|
| 362 |
+
date_str = now.strftime("%Y%m%d%H%M%S")
|
| 363 |
+
rand_num = random.randint(1000, 9999)
|
| 364 |
+
filename = date_str + str(rand_num)
|
| 365 |
+
|
| 366 |
+
# 读取音频文件
|
| 367 |
+
y, sr = librosa.load(noise_audio)
|
| 368 |
+
# 计算短时傅里叶变换
|
| 369 |
+
S = librosa.stft(y)
|
| 370 |
+
# 计算噪声的均值和标准差
|
| 371 |
+
noise = S[np.abs(S) < np.percentile(S, 95)]
|
| 372 |
+
noise_mean, noise_std = np.mean(noise), np.std(noise)
|
| 373 |
+
# 创建滤波器
|
| 374 |
+
filter_ = np.ones_like(S)
|
| 375 |
+
filter_[np.abs(S) < noise_mean + noise_level * noise_std] = 0
|
| 376 |
+
# 应用滤波器
|
| 377 |
+
filtered_S = filter_ * S
|
| 378 |
+
# 反转傅里叶变换
|
| 379 |
+
filtered_y = librosa.istft(filtered_S)
|
| 380 |
+
# 保存降噪后的音频文件
|
| 381 |
+
sf.write(filename + "denoise.wav", filtered_y, sr)
|
| 382 |
+
|
| 383 |
return filename + "denoise.wav"
|
| 384 |
|
| 385 |
|
|
|
|
| 414 |
btn2.click(train, inp2, out2)
|
| 415 |
btn3.click(infer, inp3, out3)
|
| 416 |
btn4.click(save_model, out1, out4) # 保存模型到 trained_model 文件夹
|
| 417 |
+
with gr.Accordion("📒 训练教程", open=True):
|
| 418 |
+
_ = f""" 如何开始训练:
|
| 419 |
+
* 第一步,选择 [方案一] 或 [方案二] 上传一分钟左右的音频,注意要吐字清晰、感情饱满、音色纯净不含杂音
|
| 420 |
+
* 第二步,点击“标注数据”,等到提示标注成功后,选择合适的训练步数,点击“开始训练”等待训练完成
|
| 421 |
+
* 第三步,耐心等待训练成功后,在文本框内输入想要生成的文字,点击“一键生成”按钮,生成克隆后的语音
|
| 422 |
+
* !!注意!! 不要生成会对个人以及组织造成侵害的内容
|
| 423 |
+
* 如果您的训练素材比较嘈杂,您可以在[AI降噪]选项卡上传或录制训练音频,降噪后再上传到训练界面
|
| 424 |
+
* 如果您需要用方案二录制您的声音,以下是一段长度合适的文本,供您朗读并录制:
|
| 425 |
+
|
| 426 |
+
记得春天的时候,小草就转出地面,树上的叶子也抽出来了,大地一片绿色,就像穿上了一件绿衣裳。我就与小孩子一起到田野去捉蜻蜓,玩游戏,比如老鹰合作小鸡或是捉迷藏,又或是跳格子。到了夏天,天气热了,我就会与小孩子到水库里面游泳,那时候水库的安全系数还不是很高,几乎每年都会有事故发生,所以父母都不会让我去游泳的,被发现之后当然就是处罚或是责骂了。可是那时候自己真的很叛逆,也不知道什么是危险,被处罚之后下一次还是回去的。到了秋天,田野一片金黄,山上的野果也成熟了,我就会与自己的伙伴拿着篮子到上山去采,采回来了还要跟自己的好朋友一起分享。
|
| 427 |
+
|
| 428 |
+
"""
|
| 429 |
+
gr.Markdown(dedent(_))
|
| 430 |
|
| 431 |
with gr.TabItem("声音合成"):
|
| 432 |
with gr.Row():
|
|
|
|
| 443 |
|
| 444 |
btn21.click(update_model_dropdown, inp21, inp21)
|
| 445 |
btn22.click(infer_custom, [inp21, inp23, inp22], out21) # 根据选择的模型和输入的文本进行推理
|
| 446 |
+
with gr.Accordion("📒 推理教程", open=True):
|
| 447 |
+
_ = f""" 如何推理声音:
|
| 448 |
+
* 第一步,选择一个你想要使用的模型,如果训练后保存的模型无法找到请点击“刷新模型列表”
|
| 449 |
+
* 第二步,在文本框处输入你想要生成的文本,选择降噪强度,如果无需降噪请将强度设为0
|
| 450 |
+
* 第三步,点击“一键生成”按钮,生成克隆后的语音
|
| 451 |
+
* !!注意!! 不要生成会对个人以及组织造成侵害的内容
|
| 452 |
+
* 此处使用的降噪算法为机械降噪,非AI降噪,如需AI降噪可以将生成的音频下载后转到“AI降噪”选项卡进行AI降噪
|
| 453 |
+
|
| 454 |
+
"""
|
| 455 |
+
gr.Markdown(dedent(_))
|
| 456 |
|
| 457 |
with gr.TabItem("模型修改"):
|
| 458 |
with gr.Row():
|
|
|
|
| 467 |
btn32 = gr.Button("重命名", variant="primary") # 重命名模型
|
| 468 |
|
| 469 |
btn31.click(update_model_dropdown, inp31, inp31)
|
| 470 |
+
btn32.click(rename_model, [inp31, inp32], out31)
|
| 471 |
+
with gr.Accordion("📒 推理教程", open=True):
|
| 472 |
+
_ = f""" 如何修改模型名称:
|
| 473 |
+
* 第一步,选择一个你想要修改的模型,如果训练后保存的模型无法找到请点击“刷新模型列表”
|
| 474 |
+
* 第二步,在文本框处输入你想要修改的模型名称,推荐以“[训练步数]时间-名称”来命名
|
| 475 |
+
* 第三步,点击“重命名”按钮对模型重命名
|
| 476 |
+
|
| 477 |
+
"""
|
| 478 |
+
gr.Markdown(dedent(_))
|
| 479 |
|
| 480 |
with gr.TabItem("AI降噪"):
|
| 481 |
with gr.Row():
|
| 482 |
with gr.Column():
|
| 483 |
inp41 = gr.Audio(type="filepath", sources="upload", label="方案一:请从本地上传一段语音")
|
| 484 |
+
inp_micro42 = gr.Audio(type="filepath", sources="microphone", label="方案二:请用麦克风录制您的声音")
|
| 485 |
with gr.Column():
|
| 486 |
+
out41 = gr.Audio(type="filepath", label="降噪后的音频", interactive=False)
|
| 487 |
+
inp43 = gr.Slider(label="机械降噪强度(非AI降噪)", minimum=0, maximum=3, value=2)
|
| 488 |
+
btn41 = gr.Button("机械降噪")
|
| 489 |
+
btn42 = gr.Button("一键AI降噪", variant="primary")
|
| 490 |
|
| 491 |
+
btn41.click(Normal_De_Noise, [inp41, inp_micro42, inp43], out41)
|
| 492 |
+
btn42.click(FRCRN_De_Noise, [inp41, inp_micro42], out41)
|
| 493 |
+
with gr.Accordion("📒 AI降噪", open=True):
|
| 494 |
+
_ = f""" 如何使用AI降噪:
|
| 495 |
+
* 第一步,在[方案一]上传你想要降噪的音频,或者在[方案二]录制音频
|
| 496 |
+
* 第二步,点击“一键AI降噪”进行降噪
|
| 497 |
+
* 第三步,下载降噪后的音频
|
| 498 |
+
* 如果您的训练素材比较嘈杂,您可以在此处上传或录制训练音频,降噪后再上传到训练界面
|
| 499 |
+
* 如果您需要用方案二录制您的声音,以下是一段长度合适的文本,供您朗读并录制:
|
| 500 |
+
|
| 501 |
+
记得春天的时候,小草就转出地面,树上的叶子也抽出来了,大地一片绿色,就像穿上了一件绿衣裳。我就与小孩子一起到田野去捉蜻蜓,玩游戏,比如老鹰合作小鸡或是捉迷藏,又或是跳格子。到了夏天,天气热了,我就会与小孩子到水库里面游泳,那时候水库的安全系数还不是很高,几乎每年都会有事故发生,所以父母都不会让我去游泳的,被发现之后当然就是处罚或是责骂了。可是那时候自己真的很叛逆,也不知道什么是危险,被处罚之后下一次还是回去的。到了秋天,田野一片金黄,山上的野果也成熟了,我就会与自己的伙伴拿着篮子到上山去采,采回来了还要跟自己的好朋友一起分享。
|
| 502 |
+
|
| 503 |
+
* AI降噪与机械降噪的不同:机械降噪主要是移除声音的激波,会对人声造成一定的破坏,而AI降噪主要是移除声音中的非人声部分,可以处理复杂的背景音频环境,但是对人声本身质量问题处理的效果一般
|
| 504 |
+
"""
|
| 505 |
+
gr.Markdown(dedent(_))
|
| 506 |
|
| 507 |
with gr.TabItem("缓存清理"): # 创建一个 gr.Blocks() 组件,命名为 "加载和推理"
|
| 508 |
with gr.Row():
|
|
|
|
| 523 |
|
| 524 |
|
| 525 |
|
| 526 |
+
with gr.Accordion("📒 使用指南", open=False):
|
| 527 |
_ = f""" 如何使用此程序:
|
| 528 |
+
* [一键训练] : 上传或录制音频,程序会自动标注音频,一键训练模型,支持训练后推理试听,支持模型保存
|
| 529 |
+
* [声音合成] : 在这里可以选择已保存的模型进行推理,自带可调机械降噪,可以任意选择已训练的音频进行推理
|
| 530 |
+
* [模型修改] : 在这里可以选择已保存的模型进行重命名,方便日后推理使用
|
| 531 |
+
* [ AI降噪 ] : 在这里可以上传音频进行AI降噪,一键去除噪音杂声
|
| 532 |
+
* [缓存清理] : 如果训��时出现报错可以尝试缓存清理,每次保存模型会自动清理缓存,如果未保存就重新开始训练需要清理缓存
|
| 533 |
* !!注意!! 不要生成会对个人以及组织造成侵害的内容
|
| 534 |
+
* 如果您需要录制您的声音,以下是一段长度合适的文本,供您朗读并录制:
|
| 535 |
|
| 536 |
记得春天的时候,小草就转出地面,树上的叶子也抽出来了,大地一片绿色,就像穿上了一件绿衣裳。我就与小孩子一起到田野去捉蜻蜓,玩游戏,比如老鹰合作小鸡或是捉迷藏,又或是跳格子。到了夏天,天气热了,我就会与小孩子到水库里面游泳,那时候水库的安全系数还不是很高,几乎每年都会有事故发生,所以父母都不会让我去游泳的,被发现之后当然就是处罚或是责骂了。可是那时候自己真的很叛逆,也不知道什么是危险,被处罚之后下一次还是回去的。到了秋天,田野一片金黄,山上的野果也成熟了,我就会与自己的伙伴拿着篮子到上山去采,采回来了还要跟自己的好朋友一起分享。
|
| 537 |
|
|
|
|
| 547 |
</div>
|
| 548 |
''')
|
| 549 |
|
| 550 |
+
|
| 551 |
app.launch(show_error=True, share=False)
|