Голосовое управление на основе SDK ОК Гугл (OK Google)

Модератор: immortal

Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Реализация голосового управления по типу ОК Гугл (OK Goo

Сообщение lanket » Чт сен 07, 2017 5:57 pm

https://developers.google.com/assistant ... run-sample

Отправлено с моего Redmi Note 3 через Tapatalk
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Реализация голосового управления по типу ОК Гугл (OK Goo

Сообщение lanket » Чт сен 07, 2017 6:12 pm

Судя по вышеприведенной статье. С этой штукой как раз таки то что надо и получится. Она реагирует только на одно ключевое слово Ok Google или Хей Google. Дальнейшие слова распознаёт с помощью Google и передаёт в питоновский скрипт. Дальше что хочешь то и делай.

Отправлено с моего Redmi Note 3 через Tapatalk
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Реализация голосового управления по типу ОК Гугл (OK Goo

Сообщение lanket » Чт сен 07, 2017 7:29 pm

Пока еду домой вспомнил свежую тему на форуме о переходе данных из питона в МД.
Спасибо skysilver за наводку:


import urllib
current_url = 'http://192.168.1.10/objects/?script=jso ... %s&rssi=%s' % (list_beacon[0],list_beacon[1])
urllib.urlopen(current_url)

Получается надо склонировать с гитхаба пример от гугла для IoT, в этом питоновском скрипте найти место где гугл отдает текст в питоне для обработки, и просто кодом от skysilver отправить в МД.

Пока кажется всё просто.

Кто-нибудь поправьте строчку от уважаемого skysilver на отправку текстовой переменной в api МД обработчик голосовых команд.

Как мои улягуся спать, буду экспрементировать с микрофоном и скриптом

Отправлено с моего Redmi Note 3 через Tapatalk
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1754 раза
Контактная информация:

Re: Реализация голосового управления по типу ОК Гугл (OK Goo

Сообщение skysilver » Чт сен 07, 2017 7:44 pm

lanket писал(а):на отправку текстовой переменной в api МД обработчик голосовых команд
Не уверен и сам не проверял, но возможно об этом речь:

Код: Выделить всё

import urllib
current_url = 'http://192.168.1.10/command.php?qry=%s' % (переменная_с_текстом)
urllib.urlopen(current_url)
За это сообщение автора skysilver поблагодарил:
lanket (Чт сен 07, 2017 7:48 pm)
Рейтинг: 1.16%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Реализация голосового управления по типу ОК Гугл (OK Goo

Сообщение lanket » Чт сен 07, 2017 8:49 pm

skysilver писал(а):
lanket писал(а):на отправку текстовой переменной в api МД обработчик голосовых команд
Не уверен и сам не проверял, но возможно об этом речь:

Код: Выделить всё

import urllib
current_url = 'http://192.168.1.10/command.php?qry=%s' % (переменная_с_текстом)
urllib.urlopen(current_url) 
А ее, эту переменную, не надо както конвертнуть предварительно по аналогии ПХП urlencode ради избавления от пробелов и русских букв?
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Реализация голосового управления по типу ОК Гугл (OK Goo

Сообщение lanket » Чт сен 07, 2017 11:13 pm

2й день эксперементов.

Попытка подключения активного микрофона увенчалась провалом.
Во первых активный микрофон выдает линейный сигнал, а у апельсинки нет LineIn. Все равно попытавшись подключить на вход микрофона результатов не дало.
Во вторых для того чтобы подключить микрофон снял шилд, и в надежде услышать ответ асистента подключил динамики на LineOut.
Шумы в динамиках дали понять что с проводными микрофонами фокус не удасться из за наводок.
К сожалению статью я увидел только недавно, в которой говориться что через USB микрофон получается фокус, кстати и гугл рекомендует такой микрофон, и поэтому микрофон заказал на али только сегодня. В городе окажусь только в воскресенье, и если не получиться найти у знакомых до воскресенья придется наверно купить.

Вот пример от гугла питоновского скрипта который, как я понял, просто реагирует на "ОК гугл" и выводит распознанный текст после ключевого слова:

Код: Выделить всё

#!/usr/bin/env python

# Copyright (C) 2017 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


from __future__ import print_function

import argparse
import os.path
import json

import google.oauth2.credentials

from google.assistant.library import Assistant
from google.assistant.library.event import EventType
from google.assistant.library.file_helpers import existing_file


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()

    print(event)

    if (event.type == EventType.ON_CONVERSATION_TURN_FINISHED and
            event.args and not event.args['with_follow_on_turn']):
        print()


def main():
    parser = argparse.ArgumentParser(
        formatter_class=argparse.RawTextHelpFormatter)
    parser.add_argument('--credentials', type=existing_file,
                        metavar='OAUTH2_CREDENTIALS_FILE',
                        default=os.path.join(
                            os.path.expanduser('~/.config'),
                            'google-oauthlib-tool',
                            'credentials.json'
                        ),
                        help='Path to store and read OAuth2 credentials')
    args = parser.parse_args()
    with open(args.credentials, 'r') as f:
        credentials = google.oauth2.credentials.Credentials(token=None,
                                                            **json.load(f))

    with Assistant(credentials) as assistant:
        for event in assistant.start():
            process_event(event)


if __name__ == '__main__':
    main()
 
Не зная питона, смею догадываться что строчку от многоуважаемого skysilver надо засунуть после print(event)

и выглядить тогда должно вот так:

Код: Выделить всё

#!/usr/bin/env python

# Copyright (C) 2017 Google Inc and MajorDomo Group
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


from __future__ import print_function

import argparse
import os.path
import json

import google.oauth2.credentials

from google.assistant.library import Assistant
from google.assistant.library.event import EventType
from google.assistant.library.file_helpers import existing_file


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()

    print(event)
    import urllib
    current_url = 'http://ip_majordomo/command.php?qry=%s' % event
    urllib.urlopen(current_url) 

    if (event.type == EventType.ON_CONVERSATION_TURN_FINISHED and
            event.args and not event.args['with_follow_on_turn']):
        print()


def main():
    parser = argparse.ArgumentParser(
        formatter_class=argparse.RawTextHelpFormatter)
    parser.add_argument('--credentials', type=existing_file,
                        metavar='OAUTH2_CREDENTIALS_FILE',
                        default=os.path.join(
                            os.path.expanduser('~/.config'),
                            'google-oauthlib-tool',
                            'credentials.json'
                        ),
                        help='Path to store and read OAuth2 credentials')
    args = parser.parse_args()
    with open(args.credentials, 'r') as f:
        credentials = google.oauth2.credentials.Credentials(token=None,
                                                            **json.load(f))

    with Assistant(credentials) as assistant:
        for event in assistant.start():
            process_event(event)


if __name__ == '__main__':
    main()
 
К сожалению нет возможности проверить из за отсутствия USB микрофона.
За это сообщение автора lanket поблагодарил:
skysilver (Чт сен 07, 2017 11:25 pm)
Рейтинг: 1.16%
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
Аватара пользователя
Gelezako
Сообщения: 963
Зарегистрирован: Чт июн 02, 2016 9:33 pm
Благодарил (а): 205 раз
Поблагодарили: 106 раз
Контактная информация:

Re: Реализация голосового управления по типу ОК Гугл (OK Goo

Сообщение Gelezako » Сб сен 09, 2017 6:00 pm

А ее, эту переменную, не надо както конвертнуть предварительно по аналогии ПХП urlencode ради избавления от пробелов и русских букв?
ну если вы боитесь что в эту переменную могут попасть такие символа, то да стоит, надо понимать как формируется значение переменной

---

Попробовал заставить работать скрипт питоновский, после танцев с бубмон, закачкой всех пакетов выяснилось что нужно иметь акаунт в гугл клауде, для этого необходимо прикрепить банковскую карту, они снимают 1 бакс в качестве подтверждения, создать приложение в клауде, включить использование гугл асистент апи и настроить пользователя. Тут я забуксовал т.к. хел гугла не отвечал реалиям интерфейса в клауде :(
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Реализация голосового управления по типу ОК Гугл (OK Goo

Сообщение lanket » Сб сен 09, 2017 10:07 pm

Gelezako писал(а):...
Попробовал заставить работать скрипт питоновский, после танцев с бубмон, закачкой всех пакетов выяснилось что нужно иметь акаунт в гугл клауде, для этого необходимо прикрепить банковскую карту, они снимают 1 бакс в качестве подтверждения, создать приложение в клауде, включить использование гугл асистент апи и настроить пользователя. Тут я забуксовал т.к. хел гугла не отвечал реалиям интерфейса в клауде :(
Я делал буквально по инструкции https://www.cnx-software.com/2017/07/30 ... stant-sdk/

Установка и запуск прошла как по маслу.

Аккаунт в гугл клауде у меня давно, сейчас уже и не помню как заводил. Поэтому с этим проблем не было.

USB микрофон даже в магазинах не нашлось. Друг подкинул идею подключить веб камеру с микрофоном. Там же микрофон как отдельный девайс. Спать лягут у меня, буду пробовать.

Отправлено с моего Redmi Note 3 через Tapatalk
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Реализация голосового управления по типу ОК Гугл (OK Goo

Сообщение lanket » Сб сен 09, 2017 10:22 pm

https://github.com/lanket/VoiceControlSmartHome

Отправлено с моего Redmi Note 3 через Tapatalk
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

Re: Реализация голосового управления по типу ОК Гугл (OK Goo

Сообщение lanket » Вс сен 10, 2017 2:10 am

USB микрофона не нашёл. по совету друга воткнул вебкамеру с микрофоном.

Заработало. Но цель не достигнута, под водой спрятались 2 камня:

Так как переменная event оказалась не текстовой. И просто конвертнув ее не получается:
File "/usr/lib/python3.5/urllib/parse.py", line 778, in urlencode
if len(query) and not isinstance(query[0], tuple):
TypeError: not a valid non-string sequence or mapping object
По Русски скатина не хочет понимать. Но эта проблема вывела на интересный путь:
Оказывается этот SDK связан с API.AI . Узнал это пытаясь найти как заставить его понимать на отличном от Английского языка и наткнулся на такую штуку: https://stackoverflow.com/questions/441 ... -languages

Пошёл ковырять настройки и нашёл как их связать.
Вроде связал выбран Русский а почемуто не понимает. 2 часа ночи голова не соображает буду ковырять завтра.
СпойлерПоказать
2017-09-10_01-35-24.png
Вот так ассистент связывается с API.AI
2017-09-10_01-35-24.png (16.71 КБ) 6441 просмотр
2017-09-10_01-36-05.png
Так выглядит лог действий ассистента
2017-09-10_01-36-05.png (19.84 КБ) 6441 просмотр
2017-09-10_01-36-36.png
Статистика
2017-09-10_01-36-36.png (30.41 КБ) 6441 просмотр
2017-09-10_01-40-35.png
Вот так работает
2017-09-10_01-40-35.png (28.92 КБ) 6441 просмотр
Кстати работает достаточно шустро. загрузка процессора при слушании эфира всего 18%. Ответы от гугла в косоль прилетаю очень бстро. Одно лишь не устраивает так обращение к Алисе OK Google

UDT P.S.

Получатся сам диалог можно отработать в API.AI и полученный результат логики API.AI это команда Maordomo передать ему ....

Прикольно.

Надо разобраться с русским.
За это сообщение автора lanket поблагодарили (всего 2):
skysilver (Вс сен 10, 2017 2:07 pm) • directman66 (Вс сен 10, 2017 7:50 pm)
Рейтинг: 2.33%
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
Ответить