Иными словами в помещении стоит коробочка или спрятана которая постоянно слушает комнату и реагируе на ключевое слово Ok Google или Hey Google.
Реагирование на ключевое слово сделано на Google Assistant SDK.
В случае если прозвучало ключевое слово, асситент слушает и распознает дальнейшую команду на Русском языке.
А также оффлайн можно сделать языки Казахский, Хинди, Греческий, Немецкий, Индийский, Французский, Итальянский, Испанский, Мексиканский, Америкосовский на библиотеке Sphinx.
Распознанный текст команды следующий за ключевым словом отправляется в Majordomo для обработки Шаблонами поведения или модулем API.AI
Требуемое железо, на день написания 20.10.2017 стоимость комплекта на Aliexpress 1520 руб.
Микрофон 91 руб
Записать имидж на флэшкарту размером не менее 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
И у Вас все работатет.
Код: Выделить всё
/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
Тут можно получить свой ключ и управлять всем этим
А тут, так называемые Actions можно настроить взаимождействие Google Assistan, API.AI, IFFT....
Описание sdk, actions
Гитхаб этого SDK
Инструкция по установке sdk на Orange Pi Zero
Тем кто хочет попробовать на Raspberry Pi 3 по русски с видео и ссылкой на оригинал.
Распознование реализовано на библиотеке SpeechRecognition на основе статьи библиотеке SpeechRecognition на основе статьи
Если надо распознование русской, казахской и кучи других неславянских языков речи можно задействовать библиотеку Sphinx
Инструкция по получению своего ключа и регистрации в асситенте Исполнить инструкцию начиная с "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 Оформление рабочего решения