Files
FunASR/tests_models/run_all_tests.py
T
游雁 106cbb69a3 feat: add ERes2NetV2 speaker model with full AutoModel integration
Integrates ERes2NetV2 from 3D-Speaker into FunASR as a speaker
verification/diarization model. Can be used standalone or as spk_model
combined with VAD + ASR for speaker-attributed transcription.

Usage (standalone speaker embedding):
    model = AutoModel(model="iic/speech_eres2netv2_sv_zh-cn_16k-common")
    res = model.generate(input="audio.wav")
    embedding = res[0]["spk_embedding"]  # shape: [1, 192]

Usage (with ASR + speaker diarization):
    model = AutoModel(
        model="paraformer-zh",
        vad_model="fsmn-vad",
        spk_model="iic/speech_eres2netv2_sv_zh-cn_16k-common",
    )
    res = model.generate(input="audio.wav")

Tested end-to-end: ModelScope download + embedding extraction verified.

New files:
- funasr/models/eres2net/eres2netv2.py (network architecture)
- funasr/models/eres2net/model.py (FunASR wrapper with inference)
- tests_models/test_eres2netv2.py
- examples/industrial_data_pretraining/eres2netv2_sv/demo.py
- examples/industrial_data_pretraining/eres2netv2_sv/demo_sv.py
2026-05-20 05:27:53 +00:00

85 lines
2.2 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Run all model tests and report results"""
import subprocess
import sys
import os
import time
TEST_DIR = os.path.dirname(os.path.abspath(__file__))
PROJECT_DIR = os.path.dirname(TEST_DIR)
tests = [
"test_fsmn_vad.py",
"test_ct_transformer.py",
"test_paraformer.py",
"test_sensevoice.py",
"test_campplus.py",
"test_paraformer_streaming.py",
"test_qwen3_asr.py",
"test_glm_asr.py",
"test_eres2netv2.py",
]
SEP = "-" * 60
DSEP = "=" * 60
def main():
results = {}
total_start = time.time()
env = os.environ.copy()
env["PYTHONPATH"] = PROJECT_DIR + ":" + env.get("PYTHONPATH", "")
print(DSEP)
print("FunASR Model Tests")
print(DSEP)
for test_file in tests:
test_path = os.path.join(TEST_DIR, test_file)
print("\n" + SEP)
print("Running: " + test_file)
print(SEP)
t0 = time.time()
try:
result = subprocess.run(
[sys.executable, test_path],
cwd=PROJECT_DIR,
env=env,
timeout=300,
capture_output=False,
)
elapsed = time.time() - t0
results[test_file] = ("PASSED" if result.returncode == 0 else "FAILED", elapsed)
except subprocess.TimeoutExpired:
elapsed = time.time() - t0
results[test_file] = ("TIMEOUT", elapsed)
print(" TIMEOUT after %.1fs" % elapsed)
except Exception as e:
elapsed = time.time() - t0
results[test_file] = ("ERROR", elapsed)
print(" ERROR: %s" % e)
total_elapsed = time.time() - total_start
print("\n" + DSEP)
print("SUMMARY")
print(DSEP)
passed = 0
failed = 0
for test_file, (status, elapsed) in results.items():
icon = "+" if status == "PASSED" else "x"
print(" %s %-35s %-8s (%.1fs)" % (icon, test_file, status, elapsed))
if status == "PASSED":
passed += 1
else:
failed += 1
print("\n Total: %d passed, %d failed, %.1fs elapsed" % (passed, failed, total_elapsed))
print(DSEP)
return 0 if failed == 0 else 1
if __name__ == "__main__":
sys.exit(main())