Управление Умным домом по технологии OK Google на базе orange pi zero и Google assistant SDK и API.A

Task owner: lanket, Санкт-Петербург - Россия
Current state: New Development

GitHub : https://github.com/lanket/VoiceControlSmartHome

Моих мозгов явно не хватает реализовать. Я так понял это самый недорогой способ реализовать голосовое управление Алисой по ключевой фразе. Напихать таких апельсинов по комнатам где требуются слушать голосовые команды и будет нам счастье.

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

Предложение:
Тот кто реализует эту задачу тому закажу на али комплект для реализации у себя дома:
Orange pi zero 256 mb
Плата расширения 2usb, audio & video out, lan
Корпус
Бп
USB микрофон

Не сочтите за наглость но:
Подозреваю что в денежном эквиваленте будет маловато наверное, но подкуплю бесценной благодарностью от нашего сообщества за реализацию и неоценимый вклад в развитие проекта.
Может ещё миценат найдётся желающий такую коробочку поставить себе на стол и не против подарить ещё один комплект умному человеку за реализацию. Глядишь и тогда финансовая составляющая станет аргументом.

А так для коллекции фишек МД полезная и привлекательная галочка будет.

Обсуждение http://majordomo.smartliving.ru/forum/viewtopic.php?t=2634

Tags: google home,ok google,голосовое управление

18.10.2017

Реагирует на ключеве слово, распознает дальнейший текст, отправляет в MajorDomo.

(lanket)

В скрипте есть event "EventType.ON_CONVERSATION_TURN_STARTED" он срабатывает когда произнесено ключевое слово. Если потом асситенту как то приказать в питоне прекратить слушать команду. А самим начать записывать эфир и по окончанию отправлять на распознование гуглу или яндексу, То получиться как раз то что надо и на Русском.

Собственно все эксперементы были в этом питоновском скрипте (путь из имиджа)
/home/pi/env/lib/python3.5/site-packages/googlesamples/assistant/library/hotword.py

Для удобного запуска из консоли сделал 2 bash:
Поболтать с ассистентом
bash /home/pi/assistant.sh

Поболтать с Алисой/MajorDomo
bash /home/pi/hw.sh

SSH:

root
JLbYnJwH3L
ruslan
pAWUr48hdK
pi
D8iSmNw6Z8

Выкладываю вместе с со своими ключами к api ассистента. Что бы хоть как то побаловаться пока не разберетись с гугловскими этими всякими сервисами.

Тут видно что происходит со стороны гугла
https://myactivity.google.com/myactivity?restrict=vaa&hl=ru&utm_source=udc&utm_medium=r&utm_campaign=

Тут можно получить свой ключ и управлять всем этим
https://console.cloud.google.com/apis/credentials?project=smartspacker

А тут, так называемые Actions можно настроить взаимождействие Google Assistan, API.AI, IFFT
https://console.actions.google.com/u/0/project/smartspacker/overview

Но все вышеописанные 3 ссылки будут работать когда подсуните свой API ключ

Да и кстати если я правильно понял то по сути саму Google Assistan можно задать в этих Actions следующее ключевое слово по которому то что распознается отправиться в API.AI а там уже обработанное можно отправить хоть в Viber хоть в SkuPe хоть в MD через модуль API.AI. Там для этого надо создать Aplication

Собственно работает: говоришь "OkGoogle, hello" и "hello" прилетает в чат MajorDomo

Делал все по этой инструкции
https://www.cnx-software.com/2017/07/30/how-to-setup-an-orange-pi-zero-diy-smart-speaker-with-google-assistant-sdk/

Не забудьте что через штатный микрофон не работает. Надо USB Web камеру с микрофоном или USB микрофон.

Ну и сам имидж. Если это важно то флэшка с которой снят имидж восьмигиговая
GoogleDrive https://drive.google.com/file/d/0B0LuR6qSpw5GdXdXVGNlTkYtQTQ/view?usp=sharing
YandexDisk https://yadi.sk/d/fc9DlvVl3NqpPw
MailCloud https://cloud.mail.ru/public/CWnj/4kK9c42mz

Discuss (0)

11.09.2017

Русского НЕТ. Увы нет. Совсем нет. Но это временно думаю.

(lanket)

Вчера проковырялся 3 часа и понял что русского нет. есть немецкий, французский ещё пару языков.

Официальный GitHub https://github.com/googlesamples/assistant-sdk-python
Ответ на GitHub по смене ключевого слова https://github.com/googlesamples/assistant-sdk-python/issues/81
Ответ на GitHub по другим языкам https://github.com/googlesamples/assistant-sdk-python/issues/79

Но я так понял что французский, немецкий, итальянский и еще один два языка понимает, но не русский. Надеюсь что ошибаюсь. Вопроса когда будет пока не звучало.

Я его задал https://github.com/googlesamples/assistant-sdk-python/issues/112

Вот тут https://stackoverflow.com/questions/45899754/how-to-set-up-french-language-for-google-assistant-sdk-on-a-raspberry-pi ссылаются на список поддерживаемых языков https://support.google.com/assistant/answer/7394513?co=GENIE.Platform%3DAndroid&hl=en

Там написанно вот это
The Google Assistant is available in U.S. English. Over time, it’ll become available in other English forms (U.K., CA, IN, and AU), German, French, Japanese, and Portuguese.

Ответ на GitHub по смене ключевого слова https://github.com/googlesamples/assistant-sdk-python/issues/81

Официальные новости по релизам https://developers.google.com/assistant/sdk/release-notes

Получается если настрой не упал, то можно все отладить и когда будет Русский то останеться только радоваться от использования. Ну можно будет прогреметь в мире IoF и Смархомов продвинум MajorDomo в массы.

Discuss (0)

10.09.2017

Заработало!

(lanket)

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

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

  1. Так как переменная 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

  2. По Русски скатина не хочет понимать. Но эта проблема вывела на интересный путь:
    Оказывается этот SDK связан с API.AI . Узнал это пытаясь найти как заставить его понимать на отличном от Английского языка и наткнулся на такую штуку: https://stackoverflow.com/questions/44192475/does-google-assistant-sdk-support-for-other-languages

Пошёл ковырять настройки и нашёл как их связать.
Вроде связал выбран Русский а почемуто не понимает. 2 часа ночи голова не соображает буду ковырять завтра.

Discuss (1)

09.09.2017

Приглашаю кто может помочь

(lanket)

Быстрее дело пойдёт, а то пока разберусь в питоне уже не актуально станет.

GitHub
https://github.com/lanket/VoiceControlSmartHome

Discuss (0)

07.09.2017

Подключение микрофона и Питон

(lanket)

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

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

#!/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()

Питоноводы поправте пожалуйста если неправильно.
И есть сомнения по поводу передачи переменной в URL разве не надо закодировать избавившись от пробелов и русских букв?

Discuss (1)

07.09.2017

Первые эксперементы

(lanket)

Вобщемто попробовал поставить линух на апельсинку и прикрутить ОК ГУГЛ к нему по этой инструкции https://www.cnx-software.com/2...ker-with-google-assistant-sdk/

На удивление прошло все без танцев с бубнами.

Результат такойже как описывает автор статьи, мол что то происходит но ничего не понимает этот гугл. Запросы гугл видит но ни один не понимает. Он, автор статьи, грешит на встроенный микрофон. Автор утверждает что подключив внешний USB микрофон все заработало. Завтра попробую подключить активный микрофон с шумоподавлением.

Discuss (0)

07.09.2017

Краткий курс по sdk

(lanket)

По ходу не так уж и трудно заставить этот Google assistant SDK работать на МД. Надо только в питоне разобраться. Гугл даже примеров накидал для изучения. Вот краткий и понятный миниурок по работе с sdk.
https://developers.google.com/assistant/sdk/develop/python/run-sample

Discuss (3)

 
Task budget: 0.00 SM
 
Subscribe to updates (13)