zsy814's picture
Initial EchoLoc code release
d8bfe4a verified
Raw
History Blame Contribute Delete
2.69 kB
import torch
import argparse
from tqdm import tqdm
from pathlib import Path
import numpy as np
import os
import torch.nn.functional as F
import soundfile as sf
from torchaudio.transforms import Resample
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
from funasr import AutoModel
def load_audio(manifest_path):
import numpy as np
generated_pathes, tgt_pathes, gt_texts= [], [], []
with open(manifest_path, "r") as f:
for ind, line in enumerate(f):
if len(line.strip()) < 2:
continue
generated_path, tgt_path, gt_text = line.strip().split("\t")[:3]
generated_pathes.append(generated_path)
tgt_pathes.append(tgt_path)
gt_texts.append(gt_text)
return generated_pathes, tgt_pathes, gt_texts
def load_tsv(path):
with open(path, "r") as rf:
lines = rf.readlines()
return lines
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Inference')
parser.add_argument('-t', '--tsv', type=str)
parser.add_argument('-o', '--out_home', type=str)
args = parser.parse_args()
if os.path.exists(os.path.join(args.out_home, "emo.log")):
with open(os.path.join(args.out_home, "emo.log"), "r") as rf:
if len(rf.readlines()) > 100:
exit()
model = AutoModel(model="/workspace/echoloc/modelscope/iic/emotion2vec_plus_large/")
generated_pathes, tgt_pathes, gt_texts = load_audio(args.tsv)
simis = []
with torch.no_grad():
with open(os.path.join(args.out_home, "emo.log"), "w") as f:
for index, (est_path, tgt_path, gt_text) in enumerate(tqdm(zip(generated_pathes, tgt_pathes, gt_texts))):
try:
generated_emb = model.generate(est_path, granularity="utterance", extract_embedding=True, disable_pbar=True)[0]["feats"] # 1024
tgt_emb = model.generate(tgt_path, granularity="utterance", extract_embedding=True, disable_pbar=True)[0]["feats"] # 1024
simi = float(F.cosine_similarity(torch.FloatTensor([generated_emb]), torch.FloatTensor([tgt_emb])).item())
except Exception as e:
simi = -1.0
print(e)
simis.append(simi)
print("%s %s %f"%(est_path, tgt_path, simi), file=f)
print("------------------------------------------", file=f)
simis = np.array(simis)
print("with -1: emo2vec large:", np.mean(simis), file=f)
print("without -1: emo2vec large:", np.mean(simis[simis != -1]), " -1 num:", len(simis[simis==-1]), file=f)