как найти слово в речи на питоне
Я работаю над обнаружением таких триггерных слов, как "Привет, Siri", "Окей, Google" и т. Д. В Python. Мой подход заключается в записи триггера и некоторых выходных слов в файлы wav. Затем прочтите их и извлеките функции с помощью pyAudioAnalysis. Наконец, я сравниваю косинусное сходство признаков триггерного слова с признаками, извлеченными для скользящего окна на выходе. Проблема в том, что для тех же слов код приведен ниже:
def match_transcription(tar,out):
"returns list of correlations where both audio transcriptions match"
print(tar.shape) # trigger word's features (34,num of frames)
print(out.shape) # output sound's features (34,num of frames)
sims=[] # will have similarities for all features, for all chunks
for i in range(tar.shape[0]): # loop over all features
chunk_tar=tar[i] # pick one feature from target
chunk_out=out[i] # pick same feature from output
sims1=[]
chunk_outs=window(chunk_out,tar.shape[1]) # generate sliding window for ouput features
for chunk in chunk_outs: # loop over all output features
sim = 1 - spatial.distance.cosine(chunk, chunk_tar) # calculate cosine similarity between target and output features
sims1.append(sim) # add similarities to list
sims.append(np.array(sims1))
sims=np.array(sims)
means=np.mean(sims,axis=0) # take mean of all frames features
print(sims)
print(means)
вывод такой:
Mean Similarity: [0.25522565 0.25120983 0.25925772 0.27925796 0.28873657 0.289228
0.3081794 0.3477496 0.33269364 0.34055122 0.34868945 0.33925324
0.34162649 0.32976345 0.32332807 0.33668049 0.34458411 0.36058285
0.37208687 0.37574359 0.400042 0.40289759 0.3872925 0.35079805
0.36320806 0.36803756 0.35871608 0.35921478 0.36508046 0.39065785
0.40899824 0.43283008 0.43767465 0.42003872 0.41108351 0.41531505
0.39725584 0.38569253 0.35555717 0.36983754 0.37081652 0.39188315]
Вывод показывает, что все скользящие окна вывода очень мало похожи на слово-триггер, в котором были произнесены те же слова.
Для триггерных слов извлечение функций такое же, как и для выходных звуков:
def get_features(f_name):
"returns short term features from the audio"
[Fs, x] = audioBasicIO.readAudioFile(f_name)
F, f_names = stFeatureExtraction(x, Fs, 0.050*Fs, 0.025*Fs)
return F,f_names
F1,f1_names=get_features('trigger_word.wav') # done for all output sounds as well
Мой вопрос в том, какая из 34 функций актуальна для проверки сходства между триггерными словами и выходными звуками? Или есть другой способ, с помощью которого можно выполнить ту же работу в python. Спасибо!