如何解决使用 Resemblyzer 进行电话交谈的说话人分类
我有电话交谈的录音,
我使用 Resemblyzer 它基于扬声器对音频进行聚类。输出是labelling
,它基本上是一个字典,说明哪个人在(speaker_label,start_time,end_time)时说话
我需要明智地将音频分段输出。问题是标记时间与原始音频时间不同。我已经为此工作了一个星期,请不要关闭问题。
from resemblyzer import preprocess_wav,VoiceEncoder
from pathlib import Path
import pickle
import scipy.io.wavfile
from spectralcluster import SpectralClusterer
audio_file_path = 'C:/Users/...'
wav_fpath = Path(audio_file_path)
wav = preprocess_wav(wav_fpath)
encoder = VoiceEncoder("cpu")
_,cont_embeds,wav_splits = encoder.embed_utterance(wav,return_partials=True,rate=16)
print(cont_embeds.shape)
clusterer = SpectralClusterer(
min_clusters=2,max_clusters=100,p_percentile=0.90,gaussian_blur_sigma=1)
labels = clusterer.predict(cont_embeds)
def create_labelling(labels,wav_splits):
from resemblyzer.audio import sampling_rate
times = [((s.start + s.stop) / 2) / sampling_rate for s in wav_splits]
labelling = []
start_time = 0
for i,time in enumerate(times):
if i > 0 and labels[i] != labels[i - 1]:
temp = [str(labels[i - 1]),time]
labelling.append(tuple(temp))
start_time = time
if i == len(times) - 1:
temp = [str(labels[i]),time]
labelling.append(tuple(temp))
return labelling
labelling = create_labelling(labels,wav_splits)
解决方法
这段代码很有帮助: 首先添加一个包含时间戳的 time_stamps.txt 文件以修剪音频(time_stamps.txt 文件应以逗号分隔)。 然后添加音频文件名及其格式,它就可以完成工作。我在 github 上找到了这个,https://github.com/raotnameh/Trim_audio
import numpy as np
from pydub import AudioSegment
def trim(start,end,file_name,format_,i):
t1 = start
t2 = end
t1 = t1 * 1000 #Works in milliseconds
t2 = t2 * 1000
newAudio = AudioSegment.from_wav(file_name + "." +format_)
newAudio = newAudio[t1:t2]
newAudio.export(file_name+ "_" + str(i) + '.wav',format=format_) #Exports to a wav file in the current path.
if __name__ == '__main__':
with open("time_stamps.txt","rb") as file:
contents = list(map(float,file.read().decode("utf-8").split(',').strip()))
file_name = "male"
format_ = "wav"
for i in range(len(contents)):
try :trim(contents[i],contents[i+1],i)
except : pass
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。