Python Pocketsphinx: ключевое слово не распознается при использовании класса Decoder

Я пытаюсь определить ключевое слово из файла .wav с помощью Pocketsphinx, в частности, с классом декодера. Когда я даю ему этот файл .wav и печатаю то, что он обнаруживает, он даже близко не стоит. Вот код:

import pocketsphinx as ps
import requests
import json
import sys, os
import subprocess

model_path = ps.get_model_path()
data_path = ps.get_data_path()

print("start")
print(os.getcwd())
subprocess.call("sox -V4 /home/miro/client_audio.wav -r 16000 -c 1 client_audio.wav", shell=True)

config = ps.Decoder.default_config()
config.set_string('-kws', 'keyphrase.list')
config.set_string('-hmm', os.path.join(model_path, 'en-us'))
config.set_string('-lm', os.path.join(model_path, 'en-us.lm.bin'))
config.set_string('-dict', os.path.join(model_path, 'cmudict-en-us.dict'))

stream = open("client_audio.wav", "rb")

decoder = ps.Decoder(config)
decoder.start_utt()
while True:
    buf = stream.read(1024)
    if buf:
         decoder.process_raw(buf, False, False)
    else:
         break
    if decoder.hyp() != None:
        # print ([(seg.word, seg.prob, seg.start_frame, seg.end_frame) for seg in decoder.seg()])
        words=[]
        [words.append(seg.word) for seg in decoder.seg()]
        print(words)
        decoder.end_utt()
        decoder.start_utt()

Он печатает это:

['<s>', "it's"]

Кто-нибудь знает, почему это так?


person Jack Johns    schedule 25.06.2020    source источник
comment
Вы уже задавали тот же вопрос в stackoverflow.com/questions/62024433/   -  person Nikolay Shmyrev    schedule 25.06.2020
comment
В этом конкретном коде вы не должны устанавливать config.set_string('-lm', os.path.join(model_path, 'en-us.lm.bin')), он будет использоваться вместо kws.   -  person Nikolay Shmyrev    schedule 25.06.2020
comment
Да это работает! Большое спасибо! Отправьте в качестве ответа, чтобы вы могли получить кредит!   -  person Jack Johns    schedule 26.06.2020


Ответы (1)


Заслуга Николая Шмырева!

Правильный код:

import pocketsphinx as ps
import requests
import json
import sys, os
import subprocess

model_path = ps.get_model_path()
data_path = ps.get_data_path()

print("start")
print(os.getcwd())
subprocess.call("sox -V4 /home/miro/client_audio.wav -r 16000 -c 1 client_audio.wav", shell=True)

config = ps.Decoder.default_config()
config.set_string('-kws', 'keyphrase.list')
config.set_string('-hmm', os.path.join(model_path, 'en-us'))
config.set_string('-dict', os.path.join(model_path, 'cmudict-en-us.dict'))

stream = open("client_audio.wav", "rb")

decoder = ps.Decoder(config)
decoder.start_utt()
while True:
    buf = stream.read(1024)
    if buf:
         decoder.process_raw(buf, False, False)
    else:
         break
    if decoder.hyp() != None:
        # print ([(seg.word, seg.prob, seg.start_frame, seg.end_frame) for seg in decoder.seg()])
        words=[]
        [words.append(seg.word) for seg in decoder.seg()]
        print(words)
        decoder.end_utt()
        decoder.start_utt()
person Jack Johns    schedule 06.07.2020