Превью-релиз Google Assistant SDK , работающего с Raspberry Pi 3 и другими платами ARMv7, был выпущен в мае. Вскоре после этого AIY Projects Voice Kit предлагался бесплатно с журналом Raspberry Pi Magazine как готовый комплект умной колонки для RPi 3. Решено было протестировать решение на платах FriendlyELEC или Shenzhen Xunlong с процессорами Allwinner, поскольку требовались лишь аудиовход, аудиовыход и интернет-соединение. В начале месяца был обнаружен Orange Pi Zero Set 6 Kit , содержащий всё необходимое: плату Orange Pi Zero на ARM Linux, плату расширения со встроенным микрофоном и аудиовыходом, а также компактный корпус для сборки.
Распаковка и сборка комплекта Orange Pi Zero Set 6 Kit
Комплект был предоставлен Shenzhen Xunlong для тестирования.
В поставку входят две упаковки Orange Pi, пластиковый корпус, пакет с винтами и резиновыми прокладками.
Одна упаковка содержит плату Orange Pi Zero на четырёхъядерном процессоре Allwinner H2+ с 512 МБ ОЗУ, разъёмом micro USB для питания, 10/100M Ethernet, USB-портом, антенной Wi-Fi и разъёмами расширения на верхней стороне…

… и слотом для карты micro SD на нижней стороне, который будет использоваться для загрузки ОС.
Вторая упаковка включает плату расширения Orange Pi Zero Interface v1.1 с двумя дополнительными USB-портами, ИК-приёмником, разъёмом 3.5 мм для аудио и встроенным микрофоном (справа вверху).
Следующий шаг — подключение платы расширения к Orange Pi Zero, сгибая антенну Wi-Fi между платами…
… после чего плата устанавливается снизу корпуса, крышка фиксируется 4 винтами, а снизу добавляются 4 резиновые ножки.
Установка Ubuntu на Orange Pi Zero и настройка сети, аудиовхода и аудиовыхода
Google Assistant SDK требует ОС Ubuntu или Debian, поэтому была загружена legacy-версия серверной Ubuntu с сайта Armbian , поскольку основная версия не поддерживает модуль Wi-Fi XR819. Затем Armbian_5.30_Orangepizero_Ubuntu_xenial_default_3.4.113.7z был распакован, а образ Armbian_5.30_Orangepizero_Ubuntu_xenial_default_3.4.113.img записан на карту micro SD с помощью Etcher на основном компьютере.
После завершения загрузки карта microSD была установлена в плату Orange Pi Zero, колонки подключены к аудиоразъему 3.5 мм, а для питания использовано USB-зарядное устройство 5В/2A.
На фото выше виден дополнительный USB-адаптер, но о нём поговорим позже.Для тестирования Google Assistant будет использоваться Wi-Fi, но для упрощения первичной настройки подключен Ethernet-кабель. При отсутствии Ethernet можно подключить плату через USB-TTL адаптер для доступа к последовательной консоли.
После определения IP-адреса платы через роутер выполнено подключение по SSH с использованием root (пароль: 1234):
ssh root@192.168.0.113
root@192.168.0.113's password:
You are required to change your password immediately (root enforced)
___ ____ _ _____
/ _ \ _ __ __ _ _ __ __ _ ___ | _ \(_) |__ /___ _ __ ___
| | | | '__/ _` | '_ \ / _` |/ _ \ | |_) | | / // _ \ '__/ _ \
| |_| | | | (_| | | | | (_| | __/ | __/| | / /| __/ | | (_) |
\___/|_| \__,_|_| |_|\__, |\___| |_| |_| /____\___|_| \___/
|___/
Welcome to ARMBIAN 5.30 stable Ubuntu 16.04.2 LTS 3.4.113-sun8i
System load: 0.21 0.06 0.06 Up time: 1:08 hour
Memory usage: 5 % of 494MB IP: 192.168.0.113
CPU temp: 79°C
Usage of /: 81% of 1.4G
[ General system configuration: armbian-config ]
Last login: Sat Jul 29 04:56:32 2017 from 192.168.0.104
Changing password for root.
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
Thank you for choosing Armbian! Support: www.armbian.com
Creating a new user account. Press <Ctrl-C> to abort
Please provide a username (eg. your forename):
...
При первой загрузке потребуется изменить пароль root и создать нового пользователя. На этом этапе рекомендуется создать пользователя «pi». После этого станет доступна командная строка, где следует выполнить команду для настройки платы Orange Pi Zero:
armbian-config
Сначала изменена временная зона.
Затем выбрано Wi-Fi – Подключение к беспроводной точке доступа для соединения с Wi-Fi роутером.
Можно выйти из armbian-config, при необходимости отключить Ethernet-кабель и переподключиться по SSH через Wi-Fi, что и было сделано.
В командной строке проверена запись и воспроизведение звука через встроенный микрофон и колонки с использованием команд из руководства ReSpeaker :
arecord -M -f S16_LE -r 16000 -c 1 --buffer-size=204800 -v /tmp/sample.wav
aplay -M /tmp/sample.wav --buffer-size=204800 -v
Первая команда записала голос, после чего нажато Ctrl+C для остановки, а вторая команда воспроизвела запись. Функциональность подтверждена. При необходимости громкость воспроизведения и записи регулируется командами:
alsamixer
Для работы Google Assistant с ALSA потребуется создать файл .asoundrc. Необходимо зафиксировать номер карты и устройства микрофона (0,0):
root@orangepizero:~# arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: audiocodec [audiocodec], device 0: SUNXI-CODEC sndcodec-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: sndhdmi [sndhdmi], device 0: SUNXI-HDMIAUDIO sndhdmi-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
а также номер карты и устройства колонок (0,0):
aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: audiocodec [audiocodec], device 0: SUNXI-CODEC sndcodec-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: sndhdmi [sndhdmi], device 0: SUNXI-HDMIAUDIO sndhdmi-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
При использовании телевизора в качестве колонок следует выбрать Карту 1, устройство: 0.
Если пользователь pi или другой ещё не создан, необходимо добавить его в группы sudoers и audio, затем перейти в домашний каталог:
adduser pi
adduser pi sudo
adduser pi audio
su pi
cd ~
Создайте ~/.asoundrc со следующим содержимым, соответствующим карте и устройству микрофона/колонок:
pcm.!default {
type asym
capture.pcm "mic"
playback.pcm "speaker"
}
pcm.mic {
type plug
slave {
pcm "hw:0,0"
}
}
pcm.speaker {
type plug
slave {
pcm "hw:0,0"
}
}
[Обновление: Как будет показано ниже, это не работает со встроенным микрофоном, но в комментариях указано решение через замену раздела pcm.mic на:
pcm.mic {
type plug
slave {
pcm "hw:0,0"
format S16_LE
}
}
Остальная часть статьи не изменена, но встроенный микрофон Orange Pi Zero теперь функционирует]
Настройка Google Assistant на Orange Pi Zero
Error, Ad (12) is not available at this time due to schedule/budgeting/geolocation/mobile restrictions!
Теперь, когда аудио и сетевое подключение настроены, можно перейти к инструкциям по установке Google Assistant SDK и демо. Они идентичны для всех плат и подробно описаны ниже.
Требуется настроить проект Google Developer Project.
Перейдите на Страница проекта в Google Platform Console, нажмите Create Project.
Назовите проект Orange Pi Zero Smart Speaker и нажмите Create.
Далее необходимо включить Google Assistant API для проекта. Просто нажмите Enable на этой странице. В данном случае проект «Orange Pi Zero Smart Speaker» уже был выбран.
Затем потребуется создать OAuth Client ID . Достаточно указать email-адрес и название продукта перед нажатием Save.
Выберите Other на следующей странице, укажите название (например, «Linux Thingy») и нажмите Create.
Появится всплывающее окно OAuth-клиента с ID и секретом. Можно просто нажать OK, сохранять данные не требуется.
Вместо этого на следующей странице скачайте файл client_secret_[your_client_id].json , нажав на стрелку, обведенную красным.
Скопируйте файл на плату Orange Pi Zero с помощью scp (замените [your_client_id] на фактический ID клиента):
scp client_secret_[your_client_id].json pi@192.168.0.114:~
После настройки основных параметров в Google Cloud установите Python 3 и зависимости:
sudo apt-get update
sudo apt-get install python3-dev python3-venv
python3 -m venv env
env/bin/python -m pip install --upgrade pip setuptools
source env/bin/activate
На этом этапе убедитесь, что в Activity Controls page активированы: «Web & App Activity» с отмеченным пунктом «Include Chrome browsing history…», «Device Information» и «Voice & Audio Activity». Все опции уже были включены по умолчанию.
Теперь можно установить пакет Google Assistant SDK, включая библиотеки и примеры кода:
python -m pip install --upgrade google-assistant-library
и инструмент авторизации:
python -m pip install --upgrade google-auth-oauthlib[tool]
Запустите инструмент авторизации:
google-oauthlib-tool --client-secrets ~/client_secret_xxxx.apps.googleusercontent.com.json --scope https://www.googleapis.com/auth/assistant-sdk-prototype --save --headless
Отобразится текст «Please visit this URL…». Скопируйте URL, откройте его в браузере, затем вставьте полученный код авторизации в терминал.
Теперь можно запустить демо
google-assistant-demo
Это начальный вывод
ON_MUTED_CHANGED:
{'is_muted': False}
ON_START_FINISHED
После фраз «OK Google» и «Hey Google» реакции не последовало – ни ответа, ни информации в терминале. После нескольких попыток были проверены настройки:
export ASSISTANT_MIC_SENSITIVITY=-6
как указано в разделе диагностики документации Google Assistant. Значение постепенно увеличивалось до -60, но результат остался негативным. Проверка через Google Translate на телефоне также не дала эффекта. В Google Cloud Console отображались ошибки 100%.
При поиске решения обнаружились рекомендации по изменению файла .asoundrc (не сработало из-за ошибок воспроизведения) и замене микрофона. Был подключен дешевый USB-микрофон с eBay за $1.45 (дополнительный адаптер на фото выше). Проверьте номер карты и устройства:
arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: audiocodec [audiocodec], device 0: SUNXI-CODEC sndcodec-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: sndhdmi [sndhdmi], device 0: SUNXI-HDMIAUDIO sndhdmi-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
Для USB-карты 2, устройства 0 обновите соответствующую строку в разделе pcm.mic файла .asoundrc:
pcm "hw:2,0"
После повторного запуска демо – успех! Устройство отвечало на запросы: называло время, имя, прогноз погоды, выполняло расчеты и т.д.
Пример рабочего вывода:
google-assistant-demo
ON_MUTED_CHANGED:
{'is_muted': False}
ON_START_FINISHED
ON_CONVERSATION_TURN_STARTED
ON_END_OF_UTTERANCE
ON_RECOGNIZING_SPEECH_FINISHED:
{'text': 'what do you want'}
ON_RESPONDING_STARTED:
{'is_error_response': False}
ON_RESPONDING_FINISHED
ON_CONVERSATION_TURN_FINISHED:
{'with_follow_on_turn': False}
ON_CONVERSATION_TURN_STARTED
ON_END_OF_UTTERANCE
ON_RECOGNIZING_SPEECH_FINISHED:
{'text': 'I will be back'}
ON_RESPONDING_STARTED:
{'is_error_response': False}
ON_RESPONDING_FINISHED
ON_CONVERSATION_TURN_FINISHED:
{'with_follow_on_turn': False}
Учтите, что Google Assistant SDK находится в стадии предварительного доступа и ориентирован на разработчиков. Пока недоступны автоматизация задач или воспроизведение музыки как в Google Home, но возможны кастомные реализации, например интеграция AIY Project Voice Kit с Google Music для любых плат. Штатный Google Home использует микрофонную решетку для надежного распознавания в шуме, но связка Orange Pi Zero + USB-микрофон показала хороший результат на дистанции 5+ метров.
Ошибка, реклама (12) недоступна из-за ограничений расписания/бюджета/геолокации/мобильных устройств!
При последующих загрузках платы войдите под пользователем pi и выполните команды для запуска демо:
source env/bin/activate
google-assistant-demo
Для автозапуска используйте systemd, адаптировав инструкции из Nordic Semi’s Google Assistant Wiki .
Создайте файл /etc/systemd/system/google-assistant-demo.service со следующим содержимым:
[Unit]
Description=google assistant service
After=network.target ntpdate.service
[Service]
Type = idle
Environment=VIRTUAL_ENV=/home/pi/env/
Environment=PATH=/home/pi/env/bin:/usr/local/sbin:/usr/local
ExecStart=/home/pi/env/bin/google-assistant-demo
WorkingDirectory=/home/pi
StandardOutput=inherit
StandardError=inherit
Restart=always
User=pi
[Install]
WantedBy=multi-user.target
Alias=google-assistant.service
Добавлен параметр «Type = idle» для корректной работы после инициализации аудиосистемы. Других сервисов аудио в systemd не обнаружено.
Активируйте и запустите службу:
sudo systemctl enable google-assistant-demo.service
sudo systemctl start google-assistant-demo.service
Демо будет запускаться автоматически при каждой загрузке. В ходе многочасового тестирования система показала стабильность. При возникновении проблем с Wi-Fi на Orange Pi Zero рекомендуется перейти на Ethernet, использовать USB-WiFi адаптер или выбрать плату с проверенным модулем Wi-Fi.
Благодарим Shenzhen Xunlong Software за предоставленный комплект. Приобрести его можно за $12.95 + доставка .
Выражаем свою благодарность источнику, с которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.