Как начать запись, когда что-то говорит Python? - PullRequest
0 голосов
/ 09 декабря 2018

Я пытаюсь создать программу, которая использует распознавание речи.Теперь у меня есть проблема, с которой я сталкиваюсь, это то, что вы должны нажать кнопку или Enter, чтобы начать распознавание речи.Есть ли способ, которым вы произносите фразу (вроде «Эй, Google»), что она начинает распознавать речь в Python 3?
Это мой код:

Запись аудиокода:

r = sr.Recognizer()

with sr.Microphone() as source:
    audio = r.listen(source)
x = r.recognize_google(audio)

print("I'm listening!")

try:
    print("You said: " + r.recognize_google(audio))
except speech_recognition.UnknownValueError:
    print("I am sorry but I couldn't understand you, try again.")
except speech_recognition.RequestError as e:
    print("Could not request results from Google Speech Recognition service; {0}".format(e))

Заранее спасибо!

1 Ответ

0 голосов
/ 09 декабря 2018

Да, по сути, вам нужно разбить распознавание на две части: распознавание ключевых слов (исключительно прослушивание ключевого слова) и основное распознавание (распознавание того, что пользователь сказал после ключевого слова).Знайте, что это означает, что ваша программа всегда будет прослушивать.

Для распознавания ключевых слов вы можете использовать метод 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

...