Да, по сути, вам нужно разбить распознавание на две части: распознавание ключевых слов (исключительно прослушивание ключевого слова) и основное распознавание (распознавание того, что пользователь сказал после ключевого слова).Знайте, что это означает, что ваша программа всегда будет прослушивать.
Для распознавания ключевых слов вы можете использовать метод Recognizer()
listen_in_background
и сканировать ключевое слово в любом обратном вызове, который вы ему дадите.Если ключевое слово найдено, вы звоните Recognizer().listen(source)
.
Поскольку прослушивание ключевых слов потребует от вашей программы постоянного прослушивания и распознавания, вы не хотите использовать какие-либо API-интерфейсы распознавания речи, для которых требуется интернет.соединение (Bing, Google, Watson, Houndify и т. д.).Это потому, что все они имеют месячные лимиты API, которые вы легко сможете прожить.Вы хотите сохранить эти API для фактического распознавания.Я полагаю, что ваши единственные автономные варианты - использовать recognize_sphinx
или обнаружение горячих слов снежного человека.Я никогда не использовал Snowboy (хотя я слышал, что он довольно хорош), потому что он не работает в Windows (или, по крайней мере, не работал, когда я писал свою программу), но Sphinx имеет своего рода инструмент для определения ключевых слов.
По сути, вы передаете ключевые слова sphinx_recognizer и то, насколько чувствительным должен быть выбор этих ключевых слов с помощью кортежа, и он попытается сосредоточиться на поиске этих слов в речи.Помните, что чем более чувствительным вы делаете ключевое слово, тем больше ложных срабатываний вы получите.
Вот пример:
import speech_recognition as sr
import time
r = sr.Recognizer()
# Words that sphinx should listen closely for. 0-1 is the sensitivity
# of the wake word.
keywords = [("google", 1), ("hey google", 1), ]
source = sr.Microphone()
def callback(recognizer, audio): # this is called from the background thread
try:
speech_as_text = recognizer.recognize_sphinx(audio, keyword_entries=keywords)
print(speech_as_text)
# Look for your "Ok Google" keyword in speech_as_text
if "google" in speech_as_text or "hey google":
recognize_main()
except sr.UnknownValueError:
print("Oops! Didn't catch that")
def recognize_main():
print("Recognizing Main...")
audio_data = r.listen(source)
# interpret the user's words however you normally interpret them
def start_recognizer():
r.listen_in_background(source, callback)
time.sleep(1000000)
start_recognizer()
Эта ссылка действительно полезна при работе с библиотекой speech_recognition:
https://github.com/Uberi/speech_recognition/blob/master/reference/library-reference.rst