- Умная колонка на основе Raspberry Pi и Google Assistant
- Необходимые компоненты
- Проверка микрофона веб-камеры на совместимость с Raspberry Pi
- Голосовой ассистент на Raspberry Pi.
- Предисловие
- Начинаем
- Нам понадобиться:
- Шаг 1.Подготовим систему,установим софт
- Шаг 2.Скриптовая часть
- Шаг 3.Запускалка запускалки
- Шаг3.А вы верите в скрипты?
- Благодарности
- Фото устройства в собранном виде
- Комментариев: 15
- Умный Дом — голосовое управление в три шага. Raspberry + HomeKit
Умная колонка на основе Raspberry Pi и Google Assistant
Наверняка многие из вас задумывались об умной колонке (смарт-динамике), которой можно было бы управлять с помощью голоса. Одним из самых популярных подобных устройств является Amazon Echo, а у нас в России среди подобных устройств наиболее популярна домашняя станция с голосовым помощником (умная колонка) от Яндекса. Однако не последнее место в этом списке занимает и сервис Google Home, который также предоставляет расширенные функции голосового управления.
Различные голосовые помощники становятся все более популярными по мере того, как человечество все больше движется в сторону технологий интернета вещей (Internet of Things, IoT) и искусственного интеллекта (AI). Наверняка вы все слышали о таких голосовых помощниках как Google Assistant, Apple Siri и Amazon Alexa. Каждый из них основан на технологии искусственного интеллекта и имеет свою экосистему. В данной статье мы познакомимся с подобной экосистемой от Google. Компания Google уже выпускает свои умные колонки (smart speakers). Но в этой статье мы рассмотрим создание подобной умной колонки своими руками на основе платы Raspberry Pi и голосового помощника (ассистента) от Google (Google Assistant). Фактически, мы получим устройство, похожее на Google Home Speaker. Подобные умные колонки также еще называют смарт-колонками или смарт-динамиками.
Google обеспечивает нам API (программный интерфейс приложения), который можно использовать для создания «продвинутых» голосовых служб. Данный API имеет открытый исходный код и его можно скачать на Github. Используя голосовые сервисы Google, мы можем с помощью голоса проигрывать интересующую нас музыку, узнавать погоду, заказывать билеты и многое другое.
Необходимые компоненты
- Плата Raspberry Pi (купить на AliExpress).
- Внешний динамик с разъемом 3.5mm.
- Любая веб-камера или микрофон с поддержкой USB 2.0.
Мы в этом проекте использовали веб-камеру – она имеет в своем составе встроенный микрофон.
Проверка микрофона веб-камеры на совместимость с Raspberry Pi
1. Откройте терминал Raspberry Pi и введите в нем команду arecord -l . В результате выполнения этой команды вы увидите все устройства, подключенные к плате Raspberry Pi, как показано на следующем рисунке.
Card 1 в данном случае – это и есть микрофон веб-камеры, который мы собираемся использовать. Если данная надпись не отображается на экране, значит что то не так:
- веб-камера неисправна;
- проблемы с соединением (физическим) между веб-камерой и платой Raspberry Pi;
- веб-камера и плата Raspberry Pi несовместимы.
2. Теперь проверим работает ли микрофон, введя команду на воспроизведение аудио файла:
Источник
Голосовой ассистент на Raspberry Pi.
В этой статье я хочу рассказать о своем опыте изготовления голосового ассистента на RasPI.Всем кому интересно,прошу под кат.
Предисловие
В не столь далеком детстве во время просмотра фильма «Железный человек» у меня появилась маленькая мечта,сделать свой Джарвис с блекджеком и скриптами.И вот спустя 4 года я снова загорелся желанием,а наличие дома RasPI 3 выигранной в майском конкурсе только подстегнуло интерес и желание.
Начинаем
Дисклеймер.Все что вы делаете,делается вами на ваш страх и риск.Я лишь описываю вам свой опыт и впечатления.
Нам понадобиться:
- Звуковая карта с чипом от C-Media
- Колонка
- Микрофон
- Raspberry Pi
- Интернет соединение
и много,очень много свободного времени.
Шаг 1.Подготовим систему,установим софт
Подключаем звуковую карту со всей периферией
Логинимся в систему
У меня не получилось по хорошему заставить работать звуковую карту как нужно(Может я криворукий,может гайды в интернете старые) потому я наглым способом вырубил встроенный аудиочип
и добавляем строку
После этих махинаций запускаем команду
На экране должны увидит,что-то похожее на то,что на скрине с моей системы
Также можно через GUI убедиться,что звуковая карта назначена по умолчанию
Для регулировки звука можно воспользоваться
Установим синтезатор речи
Перейдем в домашнюю директорию
Создадим конфиг Festival
и внесем в него эти строки
А теперь попробуем что нибудь сказать
От ввода команды до произношения обычно проходит от 5 до 30 секунд.Медленно,но довольно качественно.
Если услышали мужской голос из динамика,значит у нас все получилось
И модули для него
Шаг 2.Скриптовая часть
Для начала проверим,а работает ли у нас микрофон то вообще?
Говорим что нибудь 4 секунды.
Слышим себя?Если да,то все прекрасно.
Рекомендую создать отдельную директорию под проект.Я использовал имя ‘0’ (ноль)
Запишем основной и самый главный скрипт
Далее используя аудиозапись из прошлых шагов попробуем что либо распознать
Если на выводе уводили тот текст,что содержится в записи,то все успешно распозналось(У меня распознает все точно в 99% случаев)
и запускалку для этого скрипта
Прервать адский круг можно долгим зажатием CTRL+C
Шаг 3.Запускалка запускалки
Для удобства я сделал запускалку запускалки
Как можно понять из скриптов,то запускать основной наш скрипт будут только после «hi».Но вот беда,распознает оффлайн утилита очень-очень плохо.Я частично исправил положение наглым выпиливанием половины словаря программы.
А теперь нам придется попотеть.Удалим из словаря все не нужное.Кому лень это делать,может написать мне в лс,я скину файлик.
И вот после всего этого запускалка начала более менее по божески работать
В конец файла добавим
Шаг3.А вы верите в скрипты?
в директории 0 создадим еще одну
и создадим скриптик для того,чтобы нам по запросу говорили,какова погода на улице
Содержимое строки URL меняем на нужное вам местоположение с этого же сайта
Сделаем говорилку для этого скрипта
и наконец в скрипт 0.py добавим еще одно ветвление для IF
Вооот собственно и все пожалуй.Вопросы и пожелания можете написать в комментарии или личные сообщения,а также в вк(указано в профиле).Если напишите какой либо скриптик для этого управления,то тоже пишите,добавлю в статью с подписью вашего авторства.
Благодарности
Спасибо администрации Raspberrypi.ru
За помощь в создании проекта
Фото устройства в собранном виде
В дырочке спрятался микрофон 🙂
Статья будет обновляться,обязательно будет,так как я не считаю это проект завершеным.
Автор:
Комментариев: 15
raspiman
Корпус зачётный! Копите на 3D-принтер, полезная в творчестве штука 🙂 P.S — а можете проверить, есть ли звук с этой звуковой карты при проигрывании видео через VLC, который собирался в этой статье — raspberrypi.ru/blog/632.html
Canabalt
Проверил, работает.Проверял .flac аудиозаписью. Корпус — это шедевр!)
Аудио понятное дело, что будет работать. Интересует именно момент с видео.
Аудио понятное дело, что будет работать. Меня тоже интересует именно момент воспроизведения звука в видео.
Canabalt
Разве есть разница? Аудио то он похоже через Alsa выводит. Буду снова собирать себе vlc и проверять.Отпишусь после проверки
Canabalt
sonoleo
Доброго времени суток. У меня проблемы с созданием файла .WAV через микрофон. Микрофон подключается через внешнюю ауди карту (специально для Raspberry). По команде arecord -l выдает pi@raspberrypi
$ arecord -l **** List of CAPTURE Hardware Devices **** card 0: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0 А по команде: #arecord -B —buffer-time=1000000 -f dat -r 16000 -d 4 -D plughw:1,0 test.wav или #arecord -B —buffer-time=1000000 -f dat -r 16000 -d 4 -D plug:default test.wav Выдает ошибку: arecord: main:682: audio open error: No such file or directory. Файл test.wav создан заранее пустой. Была попытка указать имя не существующего файла — результат такой же. Предварительно я перешел в каталог: cd /home/pi/Voice тут сидят мои файлы. В чем может быть проблема?
Accente
Так. А вот эту канитель надо испробовать на Cubieboard.
Всем привет. У меня такой вопрос. Может Raspberry, при загрузке необходимых программ, работая автономно без компьютера, интернета, wi-fi, работать как голосовое общение с Raspberry еще и подключить какие нибудь выходные устройства, да и чтобы общение было на русском языке.
cccp812
Здравствуйте, у меня возникла вот такая проблема:pi@raspberrypi:
/0 $ ./launcherarecord: main:722: audio open error: Нет такого файла или каталога184044Traceback (most recent call last): File «/usr/local/lib/python3.4/dist-packages/speech_recognition/__init__.py», line 651, in recognize_sphinx from pocketsphinx import pocketsphinxImportError: No module named ‘pocketsphinx’During handling of the above exception, another exception occurred:Traceback (most recent call last): File «z.py», line 17, in t = r.recognize_sphinx(audio) File «/usr/local/lib/python3.4/dist-packages/speech_recognition/__init__.py», line 653, in recognize_sphinx raise RequestError(«missing PocketSphinx module: ensure that PocketSphinx is set up correctly.»)speech_recognition.RequestError: missing PocketSphinx module: ensure that PocketSphinx is set up correctly.completedarecord: main:722: audio open error: Нет такого файла или каталогаstat: не удалось выполнить stat для «voice.wav»: Нет такого файла или каталогаподскажите пожалуйста, как решить?Спасибо.
cccp812
Здравствуйте, у меня возникла вот такая проблема:pi@raspberrypi:
/0 $ ./launcherarecord: main:722: audio open error: Нет такого файла или каталога184044Traceback (most recent call last): File «/usr/local/lib/python3.4/dist-packages/speech_recognition/__init__.py», line 651, in recognize_sphinx from pocketsphinx import pocketsphinxImportError: No module named ‘pocketsphinx’During handling of the above exception, another exception occurred:Traceback (most recent call last): File «z.py», line 17, in t = r.recognize_sphinx(audio) File «/usr/local/lib/python3.4/dist-packages/speech_recognition/__init__.py», line 653, in recognize_sphinx raise RequestError(«missing PocketSphinx module: ensure that PocketSphinx is set up correctly.»)speech_recognition.RequestError: missing PocketSphinx module: ensure that PocketSphinx is set up correctly.completedarecord: main:722: audio open error: Нет такого файла или каталогаstat: не удалось выполнить stat для «voice.wav»: Нет такого файла или каталогаподскажите пожалуйста, как решить?Спасибо.
valway
Попробуйте так: arecord -B —buffer-time=1000000 -f dat -r 16000 -d 4 -D plughw:0,0 voice.wav поиграйте с plughw:1,0
Добрый день. У меня Raspberry Pi 2, внешней звуковой карты нет. Установил festival, пробую тестовую команду echo «test» | festival —tts , получаю ошибку pipe_open: fork failed. После перезагрузки все-таки команда сработала, слово «test» я услышал). Но при попытке выполнить команду снова — та же ошибка ((. Что это может значить? Поверхностно «погуглив» толкового ответа не нашел. ps подскажите, почему такая пауза большая между вводом команды и произношением? Спасибо
Всем привет. Можете сказать сколько времени уходит после произношения команды до ее выполнения.
Источник
Умный Дом — голосовое управление в три шага. Raspberry + HomeKit
Мы решили поделиться с Вами бюджетным готовым решением, надеемся Вы оцените наши старания. Решение проверенное, рабочее. Во вложении можно скачать все файлы программ и настройки. Отдаем все бесплатно.
Умный дом для заказчика в основном «игрушка» которым можно похвастаться перед друзьями, но эти игры стоят не малых усилий интеграторам!
Речь пойдет о некоторых проблемах и решениях, связанных именно с освещением в доме, как о неотъемлемом блоке «умного дома».
Проблема 1: Если система централизованная, то в случае сбоя центрального контроллера программа не может управлять реле включения света.
Решение: Использовать распределенные модули управления с внутренней логикой, по нашему опыту одним из самых зарекомендовавших себя устройств в этом — программируемое реле ПР200 производства компании ОВЕН. Советуем использовать версию 220в, т.к. бытовые выключатели рассчитаны именно на это напряжение и будет меньше проблем с логической «единицей» на дискретном входе.
Это устройство имеет 8 каналов (реле) которые можно запрограммировать с использованием внутренней логики (как распределенную систему), дополнительно подключаются еще модули расширения 2шт. по 8 каналов, но тут есть риск остаться без большего количество управляемых светильников при выходе из строя самого ПР200 (8 каналов против 24), если соберетесь экономить, подумайте!
Несмотря на то, что программу выглядит просто, к ней мы шли несколько лет не по своей вине, компания Овен относительно недавно (после появления ПР200) добавила возможность управлять сетевой переменной как с наружи, так и изнутри.
Подробнее о программе:
I8 – это дискретный вход с 8 выключателя в доме или комнате
RTRIG – детектор переднего, необходим для формирования единичного (на один цикл программы) импульса
TO INT – преобразования Bool в INT можно было бы и обойтись, но Slave сетевая переменная в Owen Logic не поддерживает bool.
XOR – исключающее или, если на одном входе 1, то и выход 1, если на оба входа подать 1 выход обнулится, основной элемент программы, который решает по нажатию на выключатель включить или выключить свет.
Реле8 – входная и выходная сетевая переменная, как я и говорил выше с недавнего времени можно использовать эти две переменные с одним регистром (адресом) Modbus, это нам дает возможность сохранить в нее необходимое нам состояние как снаружи, так и внутри без использования различных триггеров. Эти сетевые переменные имеют энергонезависимую память, поэтому при скачке напряжения освещение вернется в последнее состояние.
TO BOOL – конвертируем INT в BOOL значение, потому как реле на выходе имеет состояние False/True.
Шаг 1: программу для 8 каналов можно скачать по ссылке в конце статьи и залить в программируемое реле, не забудьте сменить целевую платформу для своей версии ПР200/110 иначе прошить устройство не удастся!
Проблема 2: стандартные бытовые выключатели имеют состояния включен либо выключен, что в корне противоречит логике управления освещением в умном доме, нам нужны кнопки без фиксации (с пружинками).
Решение 1: Использовать готовые кнопки без фиксации, которые есть у большинства производителей выключателей таких как Shneider, Biticino, ABB и др. (рекомендованное решение, хоть кнопки в одном положении и включенных и выключенных ламп это выглядит эстетически красиво)
Решение 2: Отлавливать в ПР200/110 изменение состояния входа при использование типичного бытового выключателя с фиксацией и дальше посылать импульс программе которую скачали выше, если свет был включен то он погаснет и наоборот (не рекомендуется, т.к. через некоторое время все кнопки будут перепутаны верх и низ)
Проблема 3: верхний уровень у большинства производителей систем умного дома не дотягивает до эстетического и функционального совершенства.
Решение: используем HomeKit от Apple, которое: функционально, удобно и есть голосовое управление.
Шаг 2: стыкуем ПР200/110 с HomeKit
Для этого необходимы следующие инструменты:
Решение рекомендованное для демонстраций:
Raspberry Pi 2/3/4 и к нему usb конвертер rs485 (например с Alliexpress)
Решение рекомендованное для инсталляций на базе модуля Raspberry CM3+ в промышленном исполнении c 2 двумя встроенными RS485 портами:
Подключите Ваше устройство на базе Raspberry к питанию и домашней сети желательно патчкордом, а не по wifi.
Соедините RS485 порт Вашего устройства и ПР200/110.
Далее определите IP адрес который выдал Ваш роутер и подключитесь по SSh например через программу PUTTY (по умолчанию логин pi пароль raspberry)
Установите программный продукт node-red для стыковки протокола HomeKit на верхнем уровне и Modbus Rtu на нижнем, смотри инструкцию по установке тут.
Не забудьте сделать Ваш node-red сервисом для автозагрузки.
Установите пакет HomeKit и modbus для node-red
Ждем перезагрузки и переходим в браузер «ВАШ IP»:1880 (например 192.168.1.110:1880)
Копируем следующий поток (код в конце статьи) и вставляем в веб интерфейс «движка» правил node-red
Заходим в Menu -> import -> вставляем код потока
Необходимо применить поток нажав на кнопку Deploy
В случае неудачи советуем правильно указать RS485 порт в настройках Modbus плагина «Запрос модбас» и «Write Reset FC6» (пример /dev/ttyUSB0).
Для достоверности перезагрузите Ваше устройство SSH à sudo reboot
Шаг 3. Настройка приложения на Вашем Apple устройстве довольно простая.
Даем имя нашему дому по желанию, в нашем примере ПР200
Добавляем и соглашаемся использовать несертифицированный аксессуар
Вводим код доступа, в нашем случае 111 11 111, его можно заменить в настройках Node-red в каждом из аксессуаров HomeKit
Добавляем все наши лампы в комнаты, это можно сделать позже.
Желаем Вам приятного использования такой недорогой, но очень удобной системы.
Мы не агитируем к коммерческому использованию протокол HomeKit, любые действия противоречащие лицензионному соглашению APPLE по использованию протокола HomeKit разработчик берет на себя!
Программу для ОВЕН ПР200 и скрипт для NodeRed можно бесплатно скачать тут.
Источник