modelscope / 3D-Speaker

A Repository for Single- and Multi-modal Speaker Verification, Speaker Recognition and Speaker Diarization
Apache License 2.0
1.07k stars 93 forks source link

案例写的是比较两个人音频是否为同一个人,那如果与很多人的音频库比较怎么操作呢 #37

Closed lonngxiang closed 10 months ago

lonngxiang commented 10 months ago
from modelscope.pipelines import pipeline
sv_pipeline = pipeline(
    task='speaker-verification',
    model='damo/speech_campplus_sv_zh-cn_16k-common',
    model_revision='v1.0.0'
)
speaker1_a_wav = 'https://modelscope.cn/api/v1/models/damo/speech_campplus_sv_zh-cn_16k-common/repo?Revision=master&FilePath=examples/speaker1_a_cn_16k.wav'
speaker1_b_wav = 'https://modelscope.cn/api/v1/models/damo/speech_campplus_sv_zh-cn_16k-common/repo?Revision=master&FilePath=examples/speaker1_b_cn_16k.wav'
speaker2_a_wav = 'https://modelscope.cn/api/v1/models/damo/speech_campplus_sv_zh-cn_16k-common/repo?Revision=master&FilePath=examples/speaker2_a_cn_16k.wav'
# 相同说话人语音
result = sv_pipeline([speaker1_a_wav, speaker1_b_wav])
print(result)
# 不同说话人语音
result = sv_pipeline([speaker1_a_wav, speaker2_a_wav])
print(result)
# 可以自定义得分阈值来进行识别,阈值越高,判定为同一人的条件越严格
result = sv_pipeline([speaker1_a_wav, speaker2_a_wav], thr=0.31)
print(result)
lonngxiang commented 10 months ago

另外在windows运行

cd 3D-Speaker
# 配置模型名称并指定wav路径,wav路径可以是单个wav,也可以包含多条wav路径的list文件
model_id=damo/speech_campplus_sv_zh-cn_16k-common
# 提取embedding
python speakerlab/bin/infer_sv.py --model_id $model_id --wavs $wav_path

报错: self._accessor.symlink(target, self, target_is_directory) OSError: [WinError 1314] 客户端没有所需的特权

lonngxiang commented 10 months ago

RuntimeError: torchaudio.sox_effects.sox_effects.apply_effects_tensor requires sox extension, which is not supported on Windows.

wanghuii1 commented 10 months ago

1、多条音频的话也是每次取一条进行比较。2、建议检查目录下有没有相应的操作权限,例如创建文件。3、需要安装sox命令工具

lonngxiang commented 10 months ago

1、多条音频的话也是每次取一条进行比较。2、建议检查目录下有没有相应的操作权限,例如创建文件。3、需要安装sox命令工具

多条比较不是向量比较吗,每条分别比较对用户比较多肯定不现实

lonngxiang commented 10 months ago

1、多条音频的话也是每次取一条进行比较。2、建议检查目录下有没有相应的操作权限,例如创建文件。3、需要安装sox命令工具

另外这个脚本支持windows吗?sox windows安装后依然不行 RuntimeError: torchaudio.sox_effects.sox_effects.apply_effects_tensor requires sox extension, which is not supported on Windows.

lonngxiang commented 10 months ago

image

wanghuii1 commented 10 months ago

1、每条音频可以提取一个代表说话人的向量。音频库可以提前将每条的向量提取存储,后续只需要提取输入测试音频的向量,然后和存储的每条向量计算cosine相似度即可。2、初步推断“torchaudio.sox_effects.sox_effects.apply_effects_tensor”可能无法在windows下使用,后续我们将考虑更新使用其他可替代的函数。

lonngxiang commented 10 months ago

1、每条音频可以提取一个代表说话人的向量。音频库可以提前将每条的向量提取存储,后续只需要提取输入测试音频的向量,然后和存储的每条向量计算cosine相似度即可。2、初步推断“torchaudio.sox_effects.sox_effects.apply_effects_tensor”可能无法在windows下使用,后续我们将考虑更新使用其他可替代的函数。

嗯,另外对输入音频的长度有什么限制吗,如果是实时音频怎么处理呢

wanghuii1 commented 10 months ago

长度没有限制,如果输入一条很长的音频,可以每几秒提取一个特征,然后平均所有特征得到唯一特征。实时也是同理,每2s或者3s或者其他长度提取一次特征即可

a897456 commented 2 months ago

1、多条音频的话也是每次取一条进行比较。2、建议检查目录下有没有相应的操作权限,例如创建文件。3、需要安装sox命令工具

另外这个脚本支持windows吗?sox windows安装后依然不行 RuntimeError: torchaudio.sox_effects.sox_effects.apply_effects_tensor requires sox extension, which is not supported on Windows.

RuntimeError: torchaudio.sox_effects.sox_effects.apply_effects_tensor requires sox extension, which is not supported on Windows. 这个问题解决了吗?是怎么解决的?

yfchenlucky commented 2 months ago

修改 data, fs = torchaudio.sox_effects.apply_effects_tensor( data, fs, effects=[[ 'rate', str(self.model_config['sample_rate']) ]]) 变为 resampler = torchaudio.transforms.Resample(orig_freq=fs, new_freq=self.model_config['sample_rate'])

应用重采样

                data = resampler(data)