Как сделать так, чтобы список горячих слов / пробуждающих слов выполнял разные функции в модуле Snowboy Python?

from snowboy import snowboydecoder
import threading

def hello():
    print('Hello')

def greeting():
    print('Im doing good.')

def det_hi():
    detector = snowboydecoder.HotwordDetector('Hi.pmdl', sensitivity=0.5, audio_gain=1)
    detector.start(hello)

def det_greeting():
    d2 = snowboydecoder.HotwordDetector('HowAreYou.pmdl', sensitivity=0.5, audio_gain=1)      
    d2.start(greeting)    

thread1 = threading.Thread(target=det_hi)
thread2 = threading.Thread(target=det_greeting)
thread1.start()
thread2.start()

^^^^ Я пробовал запускать несколько экземпляров Snowboy в разных потоках, которые всегда слушают, и это немного работает, но через некоторое время потоки начинают бороться за доступ к микрофону, и он перестает работать

from snowboy import snowboydecoder
import threading

wake_words = ['Hi.pmdl', 'HowAreYou.pmdl']

def hello():
    print('Hello')

def greeting():
    print('Im doing good.')


detector = snowboydecoder.HotwordDetector(wake_words, sensitivity=0.5, audio_gain=1)
detector.start(hello)

^^^^ Я попытался поместить различные файлы пробуждающих слов в список и затем запустить его. Он работает, но теперь я не могу понять, как заставить его выполнять отдельную функцию для каждого слова пробуждения.

Я также заметил атрибут Detector.num_hotwords, но я не смог найти ни одной ссылки на него в документации или каким-либо способом использовать этот атрибут.

Какие-либо предложения?

1 ответ

Мне только что удалось разобраться, я публикую это на случай, если кому-то это понадобится в будущем.

from snowboy import snowboydecoder
import threading

def hello():
    print('Hello')

def greeting():
    print('Im doing good.')

wake_words = ['Hi.pmdl', 'HowAreYou.pmdl']
callbacks = [hello, greetings]  # For some reason does work if you include the () on the function

detector = snowboydecoder.HotwordDetector(wake_words, sensitivity=0.5, audio_gain=1)
detector.start(detected_callback=callbacks)

Ключевым моментом было создание списка обратных вызовов такой же длины, как и список пробуждающих слов.

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