Python で「Hi Siri」、「Ok Google」などのトリガー ワードの検出に取り組んでいます。私のアプローチは、トリガーといくつかの出力ワードを 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で同じジョブを実行できる他の方法はありますか? ありがとう!