Владелец задачи: lanket, Санкт-Петербург - Россия
Текущий статус:
Отмена выполнения (архив)
GitHub : https://github.com/lanket/VoiceControlSmartHome
Моих мозгов явно не хватает реализовать. Я так понял это самый недорогой способ реализовать голосовое управление Алисой по ключевой фразе. Напихать таких апельсинов по комнатам где требуются слушать голосовые команды и будет нам счастье.
Привлекательность данной идеи заключается в том что недорого, и есть разнообразие готовых корпусов, ну и малые габариты.
Предложение:
Тот кто реализует эту задачу тому закажу на али комплект для реализации у себя дома:
Orange pi zero 256 mb
Плата расширения 2usb, audio & video out, lan
Корпус
Бп
USB микрофон
Не сочтите за наглость но:
Подозреваю что в денежном эквиваленте будет маловато наверное, но подкуплю бесценной благодарностью от нашего сообщества за реализацию и неоценимый вклад в развитие проекта.
Может ещё миценат найдётся желающий такую коробочку поставить себе на стол и не против подарить ещё один комплект умному человеку за реализацию. Глядишь и тогда финансовая составляющая станет аргументом.
А так для коллекции фишек МД полезная и привлекательная галочка будет.
Обсуждение http://majordomo.smartliving.ru/forum/viewtopic.ph...
Скачать рабочий вариант
Скачать образ под Orange Pi Zero 256Mb:
https://cloud.mail.ru/public/we9B/ENZZUorcx
https://drive.google.com/file/d/0B0LuR6qSpw5GTnAtQ...
https://yadi.sk/d/XNTIA4Qi3NummM
Что с ним делать http://majordomo.smartliving.ru/forum/posting.php?...
Теперь и по русски понимает, и отправляет в МД
Собственно event ON_CONVERSATION_TURN_STARTED срабатывает после ключевого слова.
Просим асистента не слушать эфир командой assistant.stop_conversation()
Код:
if event.type == EventType.ON_CONVERSATION_TURN_STARTED:
assistant.stop_conversation()
Но что бы сработала эта команда надо передать объект асситента в подпрограмму которая обрабатывает эвенты:
Код:
# передавал только event
process_event(event)
# Надо передать и объект ассистента
process_event(event,assistant)
# Принимали только event
def process_event(event):
# Соответственно надо принять и объект ассистента тоже
def process_event(event,assistant):
Далее надо самим записывать эфир и распознать.
Самый простой вариант нашел в инете тут http://pythono.ru/speech-recognition-python/
Но чтобы установить pyaudio надо сначала через apt-get установить portaudio
А чтобы заработало надо еще и через apt-get установить flac
И вуаля все работает!!!!!
Реагирует на ключеве слово, распознает дальнейший текст, отправляет в MajorDomo.
В скрипте есть 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=...=
Тут можно получить свой ключ и управлять всем этим
https://console.cloud.google.com/apis/credentials?...
А тут, так называемые Actions можно настроить взаимождействие Google Assistan, API.AI, IFFT
https://console.actions.google.com/u/0/project/sma...
Но все вышеописанные 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-set...
Не забудьте что через штатный микрофон не работает. Надо USB Web камеру с микрофоном или USB микрофон.
Ну и сам имидж. Если это важно то флэшка с которой снят имидж восьмигиговая
GoogleDrive https://drive.google.com/file/d/0B0LuR6qSpw5GdXdXV...
YandexDisk https://yadi.sk/d/fc9DlvVl3NqpPw
MailCloud https://cloud.mail.ru/public/CWnj/4kK9c42mz
Русского НЕТ. Увы нет. Совсем нет. Но это временно думаю.
Вчера проковырялся 3 часа и понял что русского нет. есть немецкий, французский ещё пару языков.
Официальный GitHub https://github.com/googlesamples/assistant-sdk-pyt...
Ответ на GitHub по смене ключевого слова https://github.com/googlesamples/assistant-sdk-pyt...
Ответ на GitHub по другим языкам https://github.com/googlesamples/assistant-sdk-pyt...
Но я так понял что французский, немецкий, итальянский и еще один два языка понимает, но не русский. Надеюсь что ошибаюсь. Вопроса когда будет пока не звучало.
Я его задал https://github.com/googlesamples/assistant-sdk-pyt...
Вот тут https://stackoverflow.com/questions/45899754/how-t... ссылаются на список поддерживаемых языков https://support.google.com/assistant/answer/739451...
Там написанно вот это
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-pyt...
Официальные новости по релизам https://developers.google.com/assistant/sdk/releas...
Получается если настрой не упал, то можно все отладить и когда будет Русский то останеться только радоваться от использования. Ну можно будет прогреметь в мире IoF и Смархомов продвинум MajorDomo в массы.
Заработало!
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
Пошёл ковырять настройки и нашёл как их связать.
Вроде связал выбран Русский а почемуто не понимает. 2 часа ночи голова не соображает буду ковырять завтра.
Приглашаю кто может помочь
Быстрее дело пойдёт, а то пока разберусь в питоне уже не актуально станет.
Подключение микрофона и Питон
Попытка подключения активного микрофона увенчалась провалом.
Во первых активный микрофон выдает линейный сигнал, а у апельсинки нет 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 разве не надо закодировать избавившись от пробелов и русских букв?
Первые эксперементы
Вобщемто попробовал поставить линух на апельсинку и прикрутить ОК ГУГЛ к нему по этой инструкции https://www.cnx-software.com/2...ker-with-google-a...
На удивление прошло все без танцев с бубнами.
Результат такойже как описывает автор статьи, мол что то происходит но ничего не понимает этот гугл. Запросы гугл видит но ни один не понимает. Он, автор статьи, грешит на встроенный микрофон. Автор утверждает что подключив внешний USB микрофон все заработало. Завтра попробую подключить активный микрофон с шумоподавлением.
Краткий курс по sdk
По ходу не так уж и трудно заставить этот Google assistant SDK работать на МД. Надо только в питоне разобраться. Гугл даже примеров накидал для изучения. Вот краткий и понятный миниурок по работе с sdk.
https://developers.google.com/assistant/sdk/develo...
Вы можете помочь в развитии проекта, сообщив об ошибках, поделившись своими идеями или проголосовав за уже добавленные. В случае добавления ошибок, обязательно указывайте детали окружения (ОС, версия ПО и т.п.), сообщения об ошибках без деталей будут игнорироваться.
Дополнение Умная колонка для Мажордомо |