From e30a17cf4e715b3d139fa1e0ba01cda1bcf0f884 Mon Sep 17 00:00:00 2001
From: shixian.shi <shixian.shi@alibaba-inc.com>
Date: 星期三, 10 一月 2024 11:23:41 +0800
Subject: [PATCH] update funasr-onnx

---
 funasr/utils/load_utils.py |   45 +++++++++++++++++++++------------------------
 1 files changed, 21 insertions(+), 24 deletions(-)

diff --git a/funasr/utils/load_utils.py b/funasr/utils/load_utils.py
index 4fb27c0..c82987f 100644
--- a/funasr/utils/load_utils.py
+++ b/funasr/utils/load_utils.py
@@ -9,25 +9,14 @@
 import time
 import logging
 from torch.nn.utils.rnn import pad_sequence
-
-# def load_audio(data_or_path_or_list, fs: int=16000, audio_fs: int=16000):
-#
-# 	if isinstance(data_or_path_or_list, (list, tuple)):
-# 		return [load_audio(audio, fs=fs, audio_fs=audio_fs) for audio in data_or_path_or_list]
-#
-# 	if isinstance(data_or_path_or_list, str) and os.path.exists(data_or_path_or_list):
-# 		data_or_path_or_list, audio_fs = torchaudio.load(data_or_path_or_list)
-# 		data_or_path_or_list = data_or_path_or_list[0, :]
-# 	elif isinstance(data_or_path_or_list, np.ndarray): # audio sample point
-# 		data_or_path_or_list = np.squeeze(data_or_path_or_list) #[n_samples,]
-#
-# 	if audio_fs != fs:
-# 		resampler = torchaudio.transforms.Resample(audio_fs, fs)
-# 		data_or_path_or_list = resampler(data_or_path_or_list[None, :])[0, :]
-# 	return data_or_path_or_list
+try:
+	from funasr.download.file import download_from_url
+except:
+	print("urllib is not installed, if you infer from url, please install it first.")
 
 
-def load_audio_text_image_video(data_or_path_or_list, fs: int = 16000, audio_fs: int = 16000, data_type=None, tokenizer=None):
+
+def load_audio_text_image_video(data_or_path_or_list, fs: int = 16000, audio_fs: int = 16000, data_type="sound", tokenizer=None):
 	if isinstance(data_or_path_or_list, (list, tuple)):
 		if data_type is not None and isinstance(data_type, (list, tuple)):
 
@@ -42,15 +31,22 @@
 
 			return data_or_path_or_list_ret
 		else:
-			return [load_audio_text_image_video(audio, fs=fs, audio_fs=audio_fs) for audio in data_or_path_or_list]
-	
+			return [load_audio_text_image_video(audio, fs=fs, audio_fs=audio_fs, data_type=data_type) for audio in data_or_path_or_list]
+	if isinstance(data_or_path_or_list, str) and data_or_path_or_list.startswith('http'):
+		data_or_path_or_list = download_from_url(data_or_path_or_list)
 	if isinstance(data_or_path_or_list, str) and os.path.exists(data_or_path_or_list):
-		data_or_path_or_list, audio_fs = torchaudio.load(data_or_path_or_list)
-		data_or_path_or_list = data_or_path_or_list[0, :]
+		if data_type is None or data_type == "sound":
+			data_or_path_or_list, audio_fs = torchaudio.load(data_or_path_or_list)
+			data_or_path_or_list = data_or_path_or_list[0, :]
+		# elif data_type == "text" and tokenizer is not None:
+		# 	data_or_path_or_list = tokenizer.encode(data_or_path_or_list)
+	elif isinstance(data_or_path_or_list, str) and data_type == "text" and tokenizer is not None:
+		data_or_path_or_list = tokenizer.encode(data_or_path_or_list)
 	elif isinstance(data_or_path_or_list, np.ndarray):  # audio sample point
 		data_or_path_or_list = np.squeeze(data_or_path_or_list)  # [n_samples,]
-	elif isinstance(data_or_path_or_list, str) and data_type is not None and data_type == "text" and tokenizer is not None:
-		data_or_path_or_list = tokenizer.encode(data_or_path_or_list)
+	else:
+		pass
+		# print(f"unsupport data type: {data_or_path_or_list}, return raw data")
 		
 	if audio_fs != fs and data_type != "text":
 		resampler = torchaudio.transforms.Resample(audio_fs, fs)
@@ -99,4 +95,5 @@
 	
 	if isinstance(data_len, (list, tuple)):
 		data_len = torch.tensor([data_len])
-	return data.to(torch.float32), data_len.to(torch.int32)
\ No newline at end of file
+	return data.to(torch.float32), data_len.to(torch.int32)
+

--
Gitblit v1.9.1