как использовать распознанный текст с кодом hotword.py Google Ассистента

Как мне получить озвученный текст из кода hotword.py и выполнить свои собственные действия с распознанным текстом вместо того, чтобы Google ушел и отреагировал на текст?

Я установил GA на Pi3, и после некоторых начальных проблем с настройками USB-микрофона / аналогового звука и отсутствием некоторых файлов Python это заставило меня пойти: При установке Google Assistant возникает ошибка ... googlesamples.assistant 'является пакетом и не может быть запущен напрямую ... Затем я выполнил следующие шаги Google: https://developers.google.com/assistant/sdk/prototype/getting-started-pi-python/run-sample и создал новый проект myga / с файлом hotword.py, который содержит:

def process_event(event):
"""Pretty prints events.

Prints all events that occur with two spaces between each new
conversation and a single space between turns of a conversation.

Args:
    event(event.Event): The current event to process.
"""
if event.type == EventType.ON_CONVERSATION_TURN_STARTED:
    print()
    #GPIO.output(25,True)           see https://stackoverflow.com/questions/44219740/how-can-i-get-an-led-to-light-on-google-assistant-listening

if event.type == EventType.ON_RECOGNIZING_SPEECH_FINISHED:
    print("got some work to do here with the phrase or text spoken!")

print(event)

if (event.type == EventType.ON_CONVERSATION_TURN_FINISHED and
        event.args and not event.args['with_follow_on_turn']):
    print()
    #GPIO.output(25,False)          or also see https://blog.arevindh.com/2017/05/20/voice-activated-google-assistant-on-raspberry-pi-with-visual-feedback/

Я бы хотел, чтобы код реагировал на событие ON_RECOGNIZING_SPEECH_FINISHED, я думаю, и выполняю свое собственное действие, сопоставляя простые запросы, или, если фраза отсутствует в моем списке, позвольте Google обработать это. Как мне это сделать?

В конце концов я спрашивал «Окей, Google, включи BBC1», «Окей, Google, включи мой список воспроизведения» или «Окей, Google, покажи трафик», и hotword.py запускал другие приложения для выполнения этих задач.

Спасибо Стив


person Steve    schedule 09.06.2017    source источник
comment
Из developers.google.com/assistant/sdk/reference/library/python это, вероятно, связано с вызовом stop_conversation () для прекращения дальнейшей обработки.   -  person Steve    schedule 09.06.2017


Ответы (3)


См. Документацию здесь для всех доступных методов - https://developers.google.com/assistant/sdk/reference/library/python/.

Вы можете использовать метод stop_conversation(), чтобы остановить обработку этого запроса Google Assistant и действовать самостоятельно.

Вот что вам нужно сделать на высоком уровне -

  1. Создайте свой собственный словарь команд, которые вы хотели бы обрабатывать - «включить BBC1», «воспроизвести мой список воспроизведения» и т. Д.

  2. При событии EventType.ON_RECOGNIZING_SPEECH_FINISHED проверьте, существует ли распознанная команда в вашем словаре.

  3. Если распознанная команда существует в вашем словаре, вызовите метод assistant.stop_conversation() и обработайте команду самостоятельно. Если ничего не делайте (позвольте Google справиться с этим)

псевдокод -

local_commands  = ['turnBBCOn', 'playLocalPlaylist']

function turnBBCOn() :
#handle locally


function playLocalPlaylist() :
#handle locally


def process_event(event):

    if event.type == EventType.ON_CONVERSATION_TURN_STARTED:
        print()

    if event.type == EventType.ON_RECOGNIZING_SPEECH_FINISHED:
        print(event.args['text'])
        if event.args['text'] in local_commands:
            assistant.stop_conversation()
            if(event.args['text']='turn BBC1 on')
                turnBBCOn()
            elif(event.args['text']='play my playlist')
                playLocalPlaylist()

    if (event.type == EventType.ON_CONVERSATION_TURN_FINISHED and
        event.args and not event.args['with_follow_on_turn']):
        print()
person Gaurav    schedule 09.06.2017
comment
Отлично, спасибо за это. Мне не хватало информации events.args [], с которой можно было начать. - person Steve; 12.06.2017
comment
@Steve - просто любопытно, я делаю нечто подобное, у вас есть где-нибудь в GitHub код? заранее спасибо - person Sahas; 18.07.2017

Я недавно интегрировал SDK помощника Google с Raspberry Pi 3. Я взял ссылку из репозитория git ниже и создал классы action.py и actionbase.py, которые могут обрабатывать мою настраиваемую команду. Я обнаружил, что это очень чистый и гибкий способ создания собственных пользовательских команд.

Вы можете зарегистрировать свою собственную команду в файле action.py, как показано ниже.

actor = actionbase.Actor()

actor.add_keyword(
    _('ip address'), SpeakShellCommandOutput(
        say, "ip -4 route get 1 | head -1 | cut -d' ' -f8",
        _('I do not have an ip address assigned to me.')))

return actor

action.py

Напишите свой собственный код в action.py

"""Speaks out the output of a shell command."""

def __init__(self, say, shell_command, failure_text):
    self.say = say
    self.shell_command = shell_command
    self.failure_text = failure_text

def run(self, voice_command):
    output = subprocess.check_output(self.shell_command, shell=True).strip()
    if output:
        self.say(output.decode('utf-8'))
    elif self.failure_text:
        self.say(self.failure_text)

Вы можете получить полный исходный код здесь. https://github.com/aycgit/google-assistant-hotword

person Bhagwant    schedule 02.08.2017
comment
Пожалуйста, не публикуйте ответы только по ссылкам. Дополнительно к ссылке следует изложить суть и разместить здесь! - person ParkerHalo; 02.08.2017

Текст содержится в аргументах события. Вызывая event.args, вы можете использовать текст. Вот пример.

https://github.com/shivasiddharth/GassistPi/blob/master/src/main.py

person Shiva Siddharth    schedule 15.09.2017