Spaces:
Running on Zero
Running on Zero
File size: 3,573 Bytes
cc348e2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | from speechbrain.pretrained import EncoderClassifier
import torch
import torchaudio
from speechbrain.pretrained.interfaces import foreign_class
class LanguageEmbedding:
def __init__(self, device=torch.device("cpu")):
# Use VoxLingua107
#self.language_id = EncoderClassifier.from_hparams(source="speechbrain/lang-id-voxlingua107-ecapa", savedir="./lang-id-voxlingua107-ecapa")
self.language_id = foreign_class(source="TalTechNLP/voxlingua107-xls-r-300m-wav2vec", pymodule_file="encoder_wav2vec_classifier.py", classname="EncoderWav2vecClassifier", hparams_file='inference_wav2vec.yaml', savedir="tmp")
# Use pretrained model:
#print("using standard pretrained model in ./Preprocessing/Language_embedding.py")
# self.language_id = EncoderClassifier.from_hparams(source="speechbrain/lang-id-commonlanguage_ecapa",
# run_opts={
# "device": str(device)},
# savedir="pretrained_models/lang-id-commonlanguage_ecapa")
# Use 45+WASS model:
# print("attention this is only the pretrained model!!!")
# self.language_id = EncoderClassifier.from_hparams(source="/data/vokquant/speechbrain/recipes/CommonLanguage/lang_id/results/ECAPA-TDNN/1986/save/ckpt/",
# run_opts={"device": str(device)},
# savedir="/data/vokquant/IMS-Toucan_lang_emb/Preprocessing/pretrained_models/lang-id-commonlanguage_ecapa")
def get_language_embedding(self, input_waves=None):
#print("attention this is only the pretrained model!!!")
# print(input_waves.size())
# embeddings = self.language_id.encode_batch(input_waves)
# wave,sr = soundfile.read(wav_file)
# wave = torch.from_numpy(wave)
embeddings = self.language_id.encode_batch(wavs=input_waves)
# print text_lab for 1 file of batch
# out_prob, score, index, text_lab = self.language_id.classify_batch(input_waves)
#print(text_lab)
#print((embeddings.shape()))
return embeddings
def get_emb_from_path(self, path_to_wavfile=None):
#print("attention this is only the pretrained model!!!")
audio = self.language_id.load_audio(path_to_wavfile)
out_prob, score, index, text_lab = self.language_id.classify_file(path_to_wavfile)
print(text_lab)
#print(self.language_id.encode_batch(audio))
print(self.language_id.encode_batch(audio).shape)
# get number of dimensions of size
#print(self.language_id.encode_batch(audio).squeeze(0))
#return self.language_id.encode_batch(audio)
#print(len(self.language_id.encode_batch(audio).shape))
if len(self.language_id.encode_batch(audio).shape) == 3:
return self.language_id.encode_batch(audio).squeeze(0)
else:
return self.language_id.encode_batch(audio)
if __name__ == '__main__':
#print('hi')
# load example wav file
path_to_wavfile = "/nas/projects/vokquant/data/aridialect/aridialect_wav16000/hpo_at_berlin_004.wav"
#path_to_wavfile = "/nas/projects/vokquant/data/aridialect/aridialect_wav16000/hoi_goi_goi_004.wav"
# path_to_wavfile = "speechbrain/lang-id-commonlanguage_ecapa/example-fr.wav"
# get emb from path
lang_emb = LanguageEmbedding().get_emb_from_path(path_to_wavfile) |