Голосовое управление на основе SDK ОК Гугл (OK Google)
Добавлено: Вт дек 01, 2015 1:02 pm
Недорогая реализация голосового управления системой умного дома на базе Majordomo по принципу Ok Google (ОК Гуугл).
Иными словами в помещении стоит коробочка или спрятана которая постоянно слушает комнату и реагируе на ключевое слово Ok Google или Hey Google.
Реагирование на ключевое слово сделано на Google Assistant SDK.
В случае если прозвучало ключевое слово, асситент слушает и распознает дальнейшую команду на Русском языке.
А также оффлайн можно сделать языки Казахский, Хинди, Греческий, Немецкий, Индийский, Французский, Итальянский, Испанский, Мексиканский, Америкосовский на библиотеке Sphinx.
Распознанный текст команды следующий за ключевым словом отправляется в Majordomo для обработки Шаблонами поведения или модулем API.AI
Требуемое железо, на день написания 20.10.2017 стоимость комплекта на Aliexpress 1520 руб.
Инструкция по настройке ассистента для начала работаты с вашим Majordomo:
Дополительная информация если хочется внести изменения:
Полезные ссылки в использовании:
Статьи использованные в реализации:
ВАЖНО, обязательно к прочтению перед использованием. Рекомендации и требования для нормальной работы ассистента:
Планы и задачи:
Текущая рабочая версия питоновского скрипта, комментарии преветствуются.
Скачать образ под Orange Pi Zero 256Mb:
Mail.ru cloud
Google drive
Яндекс диск
UPD: 20.10.2017 Оформление рабочего решения
Иными словами в помещении стоит коробочка или спрятана которая постоянно слушает комнату и реагируе на ключевое слово Ok Google или Hey Google.
Реагирование на ключевое слово сделано на Google Assistant SDK.
В случае если прозвучало ключевое слово, асситент слушает и распознает дальнейшую команду на Русском языке.
А также оффлайн можно сделать языки Казахский, Хинди, Греческий, Немецкий, Индийский, Французский, Итальянский, Испанский, Мексиканский, Америкосовский на библиотеке Sphinx.
Распознанный текст команды следующий за ключевым словом отправляется в Majordomo для обработки Шаблонами поведения или модулем API.AI
Требуемое железо, на день написания 20.10.2017 стоимость комплекта на Aliexpress 1520 руб.
СпойлерПоказать
Orange Pi Zero 256Мб + Sheild IR, 2 USB, Auidio Out + Корпус 938 руб
Блок питания Xiaomi (для надежности) 5В 2А 491 руб Можно и подешевле поставить, непринципиально.
Микрофон 91 руб
Микрофон 91 руб
СпойлерПоказать
Скачать, ссылки в конце этого поста, и распаковать имидж.
Записать имидж на флэшкарту размером не менее 8Gb с помощью Win32DiskImager в Windows или в линуксе:
Воткнуть флэшкарту, подсоединить к домашней сети по ethernet, подключить USB микрофон или вебкамеру с микрофоном, подать питание.
Подключиться по ssh с помощью putty или любым другим терминалом. IP адрес можно узнать у своего роутера, порт стандартный. Логин: pi Пароль:
D8iSmNw6Z8
Чтобы настроить часовой пояс и если Вы хотите чтобы всё работало по WiFi то настраиваем в этой программе:
Указываем IP адрес Majordomo: меняем 192.168.1.255 на ip адрес majordomo, нажинаем Ctrl+O, соглашаемся, нажинаем Ctrl+X
Перегружаем демона пароль D8iSmNw6Z8
И у Вас все работатет.
Записать имидж на флэшкарту размером не менее 8Gb с помощью Win32DiskImager в Windows или в линуксе:
Код: Выделить всё
dd if=/dev/sda bs=8M conv=sync,noerror | gzip -c > /path/to/image.img
Подключиться по ssh с помощью putty или любым другим терминалом. IP адрес можно узнать у своего роутера, порт стандартный. Логин: pi Пароль:
D8iSmNw6Z8
Чтобы настроить часовой пояс и если Вы хотите чтобы всё работало по WiFi то настраиваем в этой программе:
Код: Выделить всё
armbian-config
Указываем IP адрес Majordomo:
Код: Выделить всё
nano /home/pi/env/lib/python3.5/site-packages/googlesamples/assistant/library/hotword.py
Перегружаем демона
Код: Выделить всё
sudo systemctl restart majordomo-assistant.service
И у Вас все работатет.
СпойлерПоказать
Питоновский скрипт ассистента для Majordomo в имидже:
Для удобного запуска из консоли сделал 2 bash:
Поболтать с Google assistant
Запустить Ассистента Majordomo
Но сначала надо остановить демона ассистента Majordomo:
пароль D8iSmNw6Z8
Ну и конечно потом чтобы запустить в качестве сервиса: пароль D8iSmNw6Z8
Пароли пользователей в системе:
root
JLbYnJwH3L
ruslan
pAWUr48hdK
pi
D8iSmNw6Z8
Код: Выделить всё
/home/pi/env/lib/python3.5/site-packages/googlesamples/assistant/library/hotword.py
Поболтать с Google assistant
Код: Выделить всё
bash /home/pi/assistant.sh
Код: Выделить всё
bash /home/pi/hw.sh
Код: Выделить всё
sudo systemctl stop majordomo-assistant.service
Ну и конечно потом чтобы запустить в качестве сервиса:
Код: Выделить всё
sudo systemctl start majordomo-assistant.service
Пароли пользователей в системе:
root
JLbYnJwH3L
ruslan
pAWUr48hdK
pi
D8iSmNw6Z8
СпойлерПоказать
Тут видно что происходит со стороны гугла но если поменяете на свой ключ api, в противном случае если оставите имидж как есть без замены ключа буду видеть я и смогу услышать аудио записи
Тут можно получить свой ключ и управлять всем этим
А тут, так называемые Actions можно настроить взаимождействие Google Assistan, API.AI, IFFT....
Тут можно получить свой ключ и управлять всем этим
А тут, так называемые Actions можно настроить взаимождействие Google Assistan, API.AI, IFFT....
СпойлерПоказать
Примеры работы с sdk используя все возможности
Описание sdk, actions
Гитхаб этого SDK
Инструкция по установке sdk на Orange Pi Zero
Тем кто хочет попробовать на Raspberry Pi 3 по русски с видео и ссылкой на оригинал.
Распознование реализовано на библиотеке SpeechRecognition на основе статьи библиотеке SpeechRecognition на основе статьи
Если надо распознование русской, казахской и кучи других неславянских языков речи можно задействовать библиотеку Sphinx
Описание sdk, actions
Гитхаб этого SDK
Инструкция по установке sdk на Orange Pi Zero
Тем кто хочет попробовать на Raspberry Pi 3 по русски с видео и ссылкой на оригинал.
Распознование реализовано на библиотеке SpeechRecognition на основе статьи библиотеке SpeechRecognition на основе статьи
Если надо распознование русской, казахской и кучи других неславянских языков речи можно задействовать библиотеку Sphinx
СпойлерПоказать
Если будете использовать с ключом от api из имиджа у меня будет доступ в Google console к аудиозаписям команд и их текстам. Если вы не хотите чтобы у меня был доступ получите и установите свой ключ.
Инструкция по получению своего ключа и регистрации в асситенте Исполнить инструкцию начиная с "Setting Up Google Assistant on Orange Pi Zero" заканчивая поручением "I then copied that file to Orange Pi Zero board using scp (change [your_client_id] with your actual client ID)" и выполнить:
Штатный микрофон в Orange Pi Zero никак не подходит для общения с ассистентом, надо подключать внешний USB микрофон или usb web камеру со встроенным микрофоном.
Рекомендую очень хороший микрофон. С пяти метров можно разговаривать с ассистентом не напрягаясь. Микрофон из статьи которая воодушивила
Инструкция по получению своего ключа и регистрации в асситенте Исполнить инструкцию начиная с "Setting Up Google Assistant on Orange Pi Zero" заканчивая поручением "I then copied that file to Orange Pi Zero board using scp (change [your_client_id] with your actual client ID)" и выполнить:
Код: Выделить всё
google-oauthlib-tool --client-secrets ~/client_secret_xxxx.apps.googleusercontent.com.json --scope https://www.googleapis.com/auth/assistant-sdk-prototype --save --headless
Рекомендую очень хороший микрофон. С пяти метров можно разговаривать с ассистентом не напрягаясь. Микрофон из статьи которая воодушивила
СпойлерПоказать
- Воиспроизведение потокового аудио, IP радио, музыки
- Воспроизведение звука после реагирования на ключевое слово
- При первом запуске, проговаривание полученного ip, и спрашивать голосом ip majordomo, перевод WiFi модуля в режим wps если такое возможно
- Воспроизведение голосовых уведомлений Majordomo
- Сырая мысль. Так как есть 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 urllib
import requests
import google.oauth2.credentials
# 1
import speech_recognition as sr
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,assistant):
"""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:
assistant.stop_conversation()
print()
r = sr.Recognizer()
with sr.Microphone() as source:
print("Скажите что-нибудь")
audio = r.listen(source)
try:
text = r.recognize_google(audio, language="ru-RU")
print(text)
isay = {"qry":text}
res = requests.get("http://192.168.1.255/command.php", params=isay)
print(res.text)
except sr.UnknownValueError:
print("Робот не расслышал фразу")
except sr.RequestError as e:
print("Ошибка сервиса; {0}".format(e))
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,assistant)
if __name__ == '__main__':
main()
Mail.ru cloud
Google drive
Яндекс диск
UPD: 20.10.2017 Оформление рабочего решения