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

Модератор: immortal

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

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

Сообщение lanket » Пн сен 11, 2017 7:31 pm

lanket писал(а):
skysilver писал(а):Имхо главный недостаток домашних поделок - это плохой аналоговый тракт. В тех же амазон эхо стоит матрица микрофонов, направленных по секторам, и сигналы с них обрабатываются специализированной микросхемой цифровой обработки сигналов. И только после этого очищенная, усиленная, без шумов шумов и с хорошим соотношением сигнал/шум запись отдается в облако на распознавание. ....
Согласен полностью, но то что вы описываете это вопрос наличия микросхемы с обвесом или другими словами шилд, что мешает ее туда воткнуть?

Видимо Вы говорите об таких девайсах: До того как познакомился с данным SDK упел заказать для эксперементов такие штучки думая над альтернативным подходом к данной задачи:
https://ru.aliexpress.com/item/VS1053-V ... 0.0.NB6qUn
СпойлерПоказать
Изображение
https://ru.aliexpress.com/item/UDA1380- ... 0.0.NB6qUn
СпойлерПоказать
Изображение
skysilver писал(а):... То что русского пока нет, это дело десятое.
Согласен 18 год не за горами.
skysilver писал(а): А вот захват и запись звука это та причина, по которой до сих голосовое управление не стало основным. Можно побаловаться с usb-микрофоном, но в массы это не уйдёт, т.к. в реальных условиях эксплуатации (не на стенде) будут постоянные проблемы.


Вполне веские аргументы. Будем пробовать. Делиться опытом.

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

У меня валяется для этих эксперементов валяется такая штука https://ru.aliexpress.com/item/Hot-Sale ... 0.0.79Fi8H
СпойлерПоказать
Изображение

Или попытаться с такой специализированной штукой попробовать, может она как раз решает эти проблемы:
Уважаемый ferrumlogic подкидывал ссылку https://esp32.com/viewtopic.php?t=2771

directman66 писал(а):у чувака красиво получилось
http://www.instructables.com/id/Raspber ... eek-Wood-/...
Ну так если руки из правильного места растут.
directman66 писал(а):...
и кстати это отличный вариант и для малины и для остальной апельсины
https://ru.aliexpress.com/item/Studio-S ... 50816e56cc

заказал микрофончик за 120 руб. Придет, будем разбираться.
Такой микрофон упоминается в описании по которому я настраивал.

Для эксперементов заказал ещё и такой , якобы он с шумоподавлением : Одежда высшего качества Mini USB микрофон Регулируемый Настольный USB микрофон Анти-шум аудио портативный мини USB микрофон для компьютера
http://s.aliexpress.com/nUBFjqIF
(from AliExpress Android)

Отправлено с моего Redmi Note 3 через Tapatalk
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

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

Сообщение directman66 » Пн сен 11, 2017 8:01 pm

а недорогих USB колонок с хорошим звуком че-то не нашел. Вроде есть тут у нас какие-то смартбай за адекватные деньги.

нашел еще инструкцию по настройке от гугла
https://developers.google.com/assistant ... run-sample
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

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

Сообщение lanket » Ср сен 13, 2017 12:25 am

Устал я воевать с этим питоном, спать уже хочу. Споткнулся на закодировать в урл строку:
СпойлерПоказать

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


#!/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 urllib

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()
    if (event.type == EventType.ON_CONVERSATION_TURN_FINISHED and
            event.args and not event.args['with_follow_on_turn']):
        print()

    if event.type == EventType.ON_RECOGNIZING_SPEECH_FINISHED:
        isay = event.args['text']
#        isay = ('qry',event.args['text'])
#        isay = object.__str__(event.args['text'])
        print('I listen: ', isay)
#        current_url = 'http://192.168.1.44/command.php?' % urllib.parse.urlencode(isay)
#        current_url = 'http://192.168.1.44/command.php?qry=' % urllib.parse.urlencode(str(isay))
        current_url = 'http://192.168.1.44/command.php?qry=' % urllib.parse.quote(isay)
        urllib.urlopen(current_url)
        print('Command: ', current_url)


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()
 
В таком исполнении так ругается:
СпойлерПоказать
Traceback (most recent call last):
ON_MUTED_CHANGED:
{'is_muted': False}
ON_START_FINISHED

ON_CONVERSATION_TURN_STARTED
ON_END_OF_UTTERANCE
ON_RECOGNIZING_SPEECH_FINISHED:
{'text': 'hello'}
I listen: hello
Traceback (most recent call last):
File "/home/pi/env/bin/googlesamples-assistant-hotword", line 11, in <module>
sys.exit(main())
File "/home/pi/env/lib/python3.5/site-packages/googlesamples/assistant/library/hotword.py", line 80, in main
process_event(event)
File "/home/pi/env/lib/python3.5/site-packages/googlesamples/assistant/library/hotword.py", line 57, in process_event
current_url = 'http://192.168.1.44/command.php?qry=' % urllib.parse.quote(isay)
TypeError: not all arguments converted during string formatting
Собственно по английски работает супер. Получилось выловить текст команды после ключевого слова. Но вот перекодировать в урл что то туплю.

Помогите пожалуйста, устал я с этим питоном.
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
Аватара пользователя
tarasfrompir
Сообщения: 3216
Зарегистрирован: Ср мар 02, 2016 8:18 pm
Откуда: Украина Пирятин
Благодарил (а): 223 раза
Поблагодарили: 815 раз

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

Сообщение tarasfrompir » Ср сен 13, 2017 12:49 am

Ну и зачем что то писать вот смотри здесь https://pypi.python.org/pypi/SpeechRecognition/
Та и примеры в том числе... в 3 строки без гемора

*** Сообщение запрещено. Имя похоже на спамерское. ***
Спасибо нам ПОМОЖЕТ..!
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Ср сен 13, 2017 6:06 am

А чо - просто urllib.urlencode() не канает?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

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

Сообщение lanket » Ср сен 13, 2017 8:27 am

nick7zmail писал(а):А чо - просто urllib.urlencode() не канает?
Пишет что неправильный формат или тип данных, из описания я так понял что нужен массив в формате json пар (переменная+значение переменной).
И так понял что сильно зависит от версии питона. Там вроде как 3.5

Отправлено с моего Redmi Note 3 через Tapatalk
Разработка голосового асистента для Мажордомо по любому ключевому слову.
:arrow: Обсужение
:arrow: gitHub 2й версии терминала
:arrow: GitHub модуля для МД
gitHub сырого модуля 2й версии
:arrow: Connect
Rasberry Pi 2, MDM, MySensors. И говорящий апельсин.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Ср сен 13, 2017 8:42 am

аа...тогда надо массив создать, и в json кодировать...я ток на php могу написать, как это сделать...питон давно забыт, как страшный сон =D
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
lanket
Сообщения: 1168
Зарегистрирован: Вт окт 14, 2014 11:27 pm
Откуда: Санкт-Петербург
Благодарил (а): 260 раз
Поблагодарили: 163 раза

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

Сообщение lanket » Ср сен 13, 2017 11:17 pm

Питон это величайшее зло на планете, хуже мелкософта.
2 дня на примитивную задачу Get запрос, это полный пипец. Ни один из примеров в инете не работает.

Хоть кто нибудь шарит в этом гре@#$ом питоне? Прошу прощения за французский.
СпойлерПоказать

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

#!/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 urllib

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

    if event.type == EventType.ON_RECOGNIZING_SPEECH_FINISHED:
#        isay = event.args['text']
#        cmd = str(event.args['text'])
#        cmd = str(event.args['text'])
#        isay = {'qry':cmd}
#        current_url = 'http://192.168.1.44/command.php?' % urllib.parse.urlencode(isay)

#        isay = ('qry',event.args['text'])
#        isay = object.__str__(event.args['text'])
#        print('I listen: ', isay)
#        current_url = 'http://192.168.1.44/command.php?qry=' % urllib.parse.urlencode(str(isay))
#        current_url = 'http://192.168.1.44/command.php?qry=' % urllib.parse.quote(isay)
#        urllib.urlopen(current_url)
#        print('Command: ', current_url)

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()
Хоть кто нибудь помогите в такой простой задаче.
Попытки засунуть команду в JSON

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

isay = {'qry':event.args['text']}
выдает ошибку мол не все аргументы стринг формата.
Добавление str

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

isay = {'qry':str(event.args['text'])}
и даже

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

cmd = str()
isay = {'qry':cmd}
тоже ругается также.

достал этот питон, честное слово. Вогруг да около и не работает.

Не уж то никто не шарит в питоне?
Разработка голосового асистента для Мажордомо по любому ключевому слову.
: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 » Чт сен 14, 2017 12:26 am

directman66 писал(а):а железячный гугл хоум и amazon alexa еще не разобрали по кусочкам? Когда его можно будет запилить? Когда добавят русский язык?
русского нет и не скоро будет
directman66 писал(а): alexa интегрируется же в сторонние сервисы.
немного нет так, это сторонние продукты пишут для Алексы плагины и их можно установить в панели Алексы что даёт возможность управлять этими устройствами. Вот я снимал видео про то как управлять лампочками Сяоми https://www.youtube.com/watch?v=aAWCKUIylh4
directman66 писал(а): предлагаю для начала запилить то, что уже есть на других системах.
Для примера alexa на базе openhab https://github.com/openhab/openhab-alexa
если бы что-то подобное появилось в МЖД, то было бу круто. Но кроме Сергея врядли такое кто-то запилит.
фанат Мажордомо
тематический блог http://blog.gelezako.com
плейлист про Мажордомо на ютубе https://www.youtube.com/playlist?list=P ... EdBGtX084E
directman66
Сообщения: 2801
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 693 раза
Контактная информация:

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

Сообщение directman66 » Чт сен 14, 2017 7:38 am

кстати у alexa есть интересное продолжение, amazon dash wand
https://www.amazon.com/Amazon-Dash-Wand ... B01MQMJFDK

Очень интересное решение плюс еще сканер штрих-кода. И цена всего 20 евро. Но вроде как не является аналогом amazon echo, а лишь дополнение для заказа товаров и услуг.

Все советуют Гугл хоум (у нас около 9000 руб) с его питоном и непонятными командами, а мне кажется что амазон ехо (https://www.amazon.com/Amazon-Echo-Dot- ... ords=alexa стоить сейчас в 2 раза дешевле) с помошью скилов можно научить своим командам на примере скила от домотикса.

https://github.com/madgeni/alexa_domo

даже мне кажется можно и команды по русски произносить.
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Ответить