Голосовой терминал для домашней автоматизации, форк mdmPiTerminal.
Возможности
- Запуск распознавания по любым ключевым словам.
- Передача команд на сервер.
- Поддержка MajorDroid API (sayReply, ask etc.).
- Отправка уведомлений на сервер.
- Работа через прокси.
- Модули.
- Плагины.
Интеграция
- MajorDoMo: MDM VoiceAssistant.
- intraHouse: plugin-voiceterminal (WIP).
- Home Assistant: Через плагин для поддержки MQTT.
- Приложение под Android.
- Google Home: Через плагин (частично).
- API документация (WIP).
Используя докер: Dockerfile и готовые образы под x86_64, aarch64, armv7l
-
Проверка работы записи\воспроизведения
Запустите
arecord -d 5 -f S16_LE -r 16000 __.wav && aplay __.wav && rm __.wav
и говорите что-нибудь 5 секунд.
Вы должны услышать запись своего голоса. Если что-то пошло не так аудиосистема требует настройки.
Скопируйте один из файлов из mdmTerminal2/asound
в /etc/asound.conf
. Для OPi zero +2 H5 должен подойти asound_h3.conf
-
Аналоговые кодеки:
Запустите
armbian-config
-> System -> Hardware. Включите analog-codec и перезагрузите апельсинку. -
Встроенный микрофон (проверял на Zero +2 H5 с платой):
alsamixer
-> F4 выбираем Mic1 и жмем space, выходим
Узнайте на каком устройстве находятся микрофон и динамик через команды:
aplay -l
arecord -l
и отредактировать если нужно "hw:X,0"
в /etc/asound.conf
Если запись или воспроизведение все еще не работают, можно поискать решение на форуме
Клонируйте репозиторий и запустите скрипт установки:
cd ~/
git clone https://github.com/Aculeasis/mdmTerminal2
cd mdmTerminal2
./scripts/install.sh
Теперь можно запустить терминал в консоли и проверить его работоспособность:
./run.sh
Если все работает можно добавить сервис в systemd - терминал будет запускаться автоматически:
./scripts/systemd_install.sh
И посмотреть статус сервиса:
sudo systemctl status mdmterminal2.service
Удалить сервис и директорию терминала, все данные и настройки будут также удалены:
cd ~/
./mdmTerminal2/scripts/systemd_remove.sh
rm -rf mdmTerminal2/
Важно! Значительная часть настроек не доступна через MDM VoiceAssistant, их можно изменить отредактировав mdmTerminal2/src/settings.ini
или
установить плагин web-config и настроить все в браузере.
Создание терминала:
- После заходим - в Настройки > Терминалы > Добавить новую запись > Добавляем название и IP адрес терминала.
- Включаем может принимать уведомления от системы.
- Тип TTS: majordroid.
- Включаем может проигрывать медиа-контент.
- Тип плеера: MajorDroid.
- Сохраняем.
Также можно выбрать плеер MPD и порт 6600, тогда MajorDoMo будет управлять mpd напрямую.
MDM VoiceAssistant:
-
Заходим в Панель управления MajorDomo > Система > Маркет дополнений > Оборудование > MDM VoiceAssistant и устанавливаем модуль.
-
Переходим в Устройства > MDM VoiceAssistant.
-
Выбираем ранее созданный терминал.
-
Выбираем Сервис синтеза речи
Если есть API ключ от Яндекса, лучше выбрать Yandex TTS,
если нет то GoogleYandex может работать с пустым ключом (пока). -
Чувствительность реагирования на ключевое слово
Чем больше тем лучше слышит, но будет много ложных срабатываний.
-
Сервис распознавания речи
Можно выбрать wit.ai или Microsoft, но для них нужно получить API ключ. Google работает без ключа.
-
Сохраняем.
Важно! Для компиляции нужно запустить локальный сервис или использовать универсальные модели
-
Переходим в Устройства > MDM VoiceAssistant > Выбираем наш терминал > Запись ключевого слова.
-
В самом верху выбираем какую модель-активатор мы хотим создать. Если модель уже существует, она будет перезаписана. Можно создать до 6 фраз-активаторов.
-
Нажимаем Запись, последовательно записываем 3 образца голоса.
-
(Опционально) Прослушиваем записи.
-
Нажимаем Компиляция. Терминал отправит образцы на сервер snowboy и получит готовую модель.
Если все прошло хорошо, терминал выполнит реинициализацию моделей и начнет активироваться по новой фразе.
Модели хранятся в mdmTerminal2/src/resources/models/
и имеют расширение .pmdl
. Они идентичны моделям в mdmPiTerminal. Если вы хотите убрать фразу из активации вам нужно удалить соответствующую модель.
- Python 3.5+
- Snowboy:
- OS: Linux (рекомендую debian-based)
- Architectures: armv7l, aarch64, x86_64
- Porcupine: Linux, Windows, Raspberry Pi, Armlinux (a9-neon).
- Если после установки возникают ошибки со snowboy - соберите его вручную.
- Если не работает USB микрофон, попробуйте выдернуть и вставить обратно, иногда это помогает.
- Заикание rhvoice* в конце фраз лечится использованием одного из конфигов для
asound.conf
. Или отключением кэша (wav не заикается) - Если голос терминала искажается при активации, нужно настраивать
asound.conf
или попробовать другие конфиги. - Если терминал плохо распознает голос т.к. записывает сам себя,
blocking_listener = 1
может помочь. - Ошибка во время компиляции модели
Hotword is too long
возникает из-за того что в семпл попало слишком много аудиоданных. Прослушайте соответствующие семплы, перепишите их и попробуйте снова.