как найти слово в речи на питоне

Я работаю над обнаружением таких триггерных слов, как "Привет, 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. Спасибо!

0 ответов

Другие вопросы по тегам