Compare commits

...

4 Commits

Author SHA1 Message Date
Zone Tome
1bcbbb0683
Merge 855c369a17f04d300f7005708c92d60b8590563d into bf81cdb14a38b674b6e9996dabc97340bc9978d2 2026-06-23 01:07:12 +00:00
zhifu gao
bf81cdb14a
feat: upgrade FunASR + add Fun-ASR-Nano & SenseVoice ASR backends (#2782)
- Upgrade funasr from ==1.0.27 to >=1.3.7
- Add Fun-ASR-Nano (31 languages, Chinese dialects, recommended default)
- Add SenseVoice (ultra-fast 170x realtime, 5 languages)
- Keep original Paraformer as '达摩 ASR (中文经典)' for backward compat
- WebUI shows 3 FunASR options + Faster Whisper

Tested: routing logic verified for all backends (zh/en/ja/ko).
Resolves #2777

Co-authored-by: xiaoyunchong.xyc <xiaoyunchong.xyc@alibaba-inc.com>
2026-06-20 15:44:59 +08:00
zxypro1
855c369a17 update link 2024-05-29 18:02:05 +08:00
zxypro1
32b8cc337d docs: add aliyun fc deployment link 2024-05-23 15:31:24 +08:00
5 changed files with 48 additions and 12 deletions

View File

@ -56,6 +56,8 @@ CPU-Optimized Inference Versionhttps://github.com/baicai-1145/GPT-SoVITS-CPUF
For users in China, you can [click here](https://www.codewithgpu.com/i/RVC-Boss/GPT-SoVITS/GPT-SoVITS-Official) to use AutoDL Cloud Docker to experience the full functionality online.
You can also deploy on [Alibaba Cloud Function Compute](https://www.alibabacloud.com/en/product/function-compute) by [clicking here](https://fcnext.console.aliyun.com/applications/ai/create?template=fc-gpt-sovits).
### Tested Environments
| Python Version | PyTorch Version | Device |

View File

@ -48,6 +48,9 @@
中国地区的用户可[点击此处](https://www.codewithgpu.com/i/RVC-Boss/GPT-SoVITS/GPT-SoVITS-Official)使用 AutoDL 云端镜像进行体验.
还可以通过通过阿里云 [Serverless 应用中心](https://fcnext.console.aliyun.com/applications/ai/create?template=fc-gpt-sovits)
[![Deploy with Severless Devs](https://img.alicdn.com/imgextra/i1/O1CN01w5RFbX1v45s8TIXPz_!!6000000006118-55-tps-95-28.svg)](https://fcnext.console.aliyun.com/applications/ai/create?template=fc-gpt-sovits) 到云端进行体验。
### 测试通过的环境
| Python Version | PyTorch Version | Device |

View File

@ -10,7 +10,7 @@ ffmpeg-python
onnxruntime; platform_machine == "aarch64" or platform_machine == "arm64"
onnxruntime-gpu; platform_machine == "x86_64" or platform_machine == "AMD64"
tqdm
funasr==1.0.27
funasr>=1.3.7
cn2an
pypinyin
pyopenjtalk>=0.4.1

View File

@ -5,15 +5,14 @@ def get_models():
"large-v2",
"large-v3",
"large-v3-turbo",
#"distil-large-v2",
#"distil-large-v3",
#"distil-large-v3.5",
]
return model_size_list
asr_dict = {
"达摩 ASR (中文)": {"lang": ["zh", "yue"], "size": ["large"], "path": "funasr_asr.py", "precision": ["float32"]},
"Fun-ASR-Nano (31语种+方言, 推荐)": {"lang": ["zh", "en", "ja", "ko", "yue", "auto"], "size": ["large"], "path": "funasr_asr.py", "precision": ["float32"]},
"SenseVoice (极速, 5语种)": {"lang": ["zh", "en", "ja", "ko", "yue", "auto"], "size": ["large"], "path": "funasr_asr.py", "precision": ["float32"]},
"达摩 ASR (中文经典)": {"lang": ["zh", "yue"], "size": ["large"], "path": "funasr_asr.py", "precision": ["float32"]},
"Faster Whisper (多语种)": {
"lang": ["auto", "en", "ja", "ko"],
"size": get_models(),

View File

@ -11,9 +11,9 @@ from tqdm import tqdm
funasr_models = {} # 存储模型避免重复加载
def only_asr(input_file, language):
def only_asr(input_file, language, backend="fun-asr-nano"):
try:
model = create_model(language)
model = create_model(language, backend=backend)
text = model.generate(input=input_file)[0]["text"]
except Exception:
text = ""
@ -21,7 +21,39 @@ def only_asr(input_file, language):
return text
def create_model(language="zh"):
def create_model(language="zh", **kwargs):
backend = kwargs.get("backend", "fun-asr-nano")
# For non-classic backends, route to multilingual models regardless of language
if backend in ("fun-asr-nano", "sensevoice") and language != "yue":
import torch
device = "cuda" if torch.cuda.is_available() else "cpu"
cache_key = f"{language}_{backend}"
if cache_key in funasr_models:
return funasr_models[cache_key]
if backend == "fun-asr-nano":
model = AutoModel(
model="FunAudioLLM/Fun-ASR-Nano-2512",
trust_remote_code=True,
hub="hf",
vad_model="fsmn-vad",
device=device,
disable_update=True,
)
print(f"FunASR Fun-ASR-Nano 模型加载完成: {language.upper()}")
else:
model = AutoModel(
model="iic/SenseVoiceSmall",
vad_model="fsmn-vad",
device=device,
disable_update=True,
)
print(f"FunASR SenseVoice 模型加载完成: {language.upper()}")
funasr_models[cache_key] = model
return model
if language == "zh":
path_vad = "tools/asr/models/speech_fsmn_vad_zh-cn-16k-common-pytorch"
path_punc = "tools/asr/models/punc_ct-transformer_zh-cn-common-vocab272727-pytorch"
@ -50,7 +82,7 @@ def create_model(language="zh"):
vad_model_revision = punc_model_revision = ""
model_revision = "master"
else:
raise ValueError(f"{language} is not supported")
raise ValueError(f"{language} is not supported. Supported: zh, yue, ja, en, ko, auto")
if language in funasr_models:
return funasr_models[language]
@ -69,14 +101,14 @@ def create_model(language="zh"):
return model
def execute_asr(input_folder, output_folder, model_size, language):
def execute_asr(input_folder, output_folder, model_size, language, backend="fun-asr-nano"):
input_file_names = os.listdir(input_folder)
input_file_names.sort()
output = []
output_file_name = os.path.basename(input_folder)
model = create_model(language)
model = create_model(language, backend=backend)
for file_name in tqdm(input_file_names):
try:
@ -105,7 +137,7 @@ if __name__ == "__main__":
parser.add_argument("-o", "--output_folder", type=str, required=True, help="Output folder to store transcriptions.")
parser.add_argument("-s", "--model_size", type=str, default="large", help="Model Size of FunASR is Large")
parser.add_argument(
"-l", "--language", type=str, default="zh", choices=["zh", "yue", "auto"], help="Language of the audio files."
"-l", "--language", type=str, default="zh", choices=["zh", "yue", "ja", "en", "ko", "auto"], help="Language of the audio files."
)
parser.add_argument(
"-p", "--precision", type=str, default="float16", choices=["float16", "float32"], help="fp16 or fp32"