mirror of
https://github.com/modelscope/FunASR.git
synced 2026-10-12 02:19:18 +00:00
fix: SenseVoice+spk_model crash and torchaudio>=2.11 compatibility
1. auto_model.py: When ASR model (e.g. SenseVoice) doesn't produce timestamps, automatically fall back to vad_segment mode for speaker diarization instead of crashing. Fixes #2945. 2. load_utils.py: Add soundfile as fallback when torchaudio.load fails (torchaudio>=2.11 requires torchcodec). Falls through to ffmpeg only if soundfile also fails.
This commit is contained in:
@@ -819,6 +819,9 @@ class AutoModel:
|
||||
)
|
||||
# del result['spk_embedding']
|
||||
sv_output = postprocess(all_segments, None, labels, spk_embedding.cpu())
|
||||
if self.spk_mode == "punc_segment" and "timestamp" not in result and "timestamps" not in result:
|
||||
logging.warning("No timestamps in ASR result (e.g. SenseVoice), falling back to vad_segment mode for speaker diarization.")
|
||||
self.spk_mode = "vad_segment"
|
||||
if self.spk_mode == "vad_segment": # recover sentence_list
|
||||
sentence_list = []
|
||||
for rest, vadsegment in zip(restored_data, vadsegments):
|
||||
|
||||
@@ -113,10 +113,17 @@ def load_audio_text_image_video(
|
||||
if kwargs.get("reduce_channels", True):
|
||||
data_or_path_or_list = data_or_path_or_list.mean(0)
|
||||
except:
|
||||
data_or_path_or_list = _load_audio_ffmpeg(data_or_path_or_list, sr=fs)
|
||||
data_or_path_or_list = torch.from_numpy(
|
||||
data_or_path_or_list
|
||||
).squeeze() # [n_samples,]
|
||||
try:
|
||||
import soundfile as sf
|
||||
data_np, audio_fs = sf.read(data_or_path_or_list, dtype="float32")
|
||||
data_or_path_or_list = torch.from_numpy(data_np).squeeze()
|
||||
if data_or_path_or_list.ndim > 1 and kwargs.get("reduce_channels", True):
|
||||
data_or_path_or_list = data_or_path_or_list.mean(-1)
|
||||
except:
|
||||
data_or_path_or_list = _load_audio_ffmpeg(data_or_path_or_list, sr=fs)
|
||||
data_or_path_or_list = torch.from_numpy(
|
||||
data_or_path_or_list
|
||||
).squeeze() # [n_samples,]
|
||||
elif data_type == "text" and tokenizer is not None:
|
||||
with open(data_or_path_or_list, "r") as f:
|
||||
data_or_path_or_list = tokenizer.encode(f.read().strip())
|
||||
|
||||
Reference in New Issue
Block a user