Комментарии 88
Завернул бы кто-нибудь это чудо в аддон для HomeAssistant
Доделывать придется немало.
Как я понял, в текущей реализации помощник заточен под ноутбук: например, по команде "запусти радио" открывается веб-страница Яндекс Музыки.
Под HA надо всё в headless переделывать
Есть такой с RHVoice: https://github.com/definitio/ha-rhvoice
Вообще можно дописать свой TTS-плагин, если охота прикрутить. Я буду только рад :)
Звук, это конечно вкусовщина. Вполне четкий, я запись(на 5 слов) с RHVoice скармливал Vosk с минимальной моделью и получалось 1 к 1.
Спасибо, но делаю своё... хоть и проще. Проблемы есть, не смог запустить vosk на 32 битнойт системе (у меня тонкий клиент для этого).
Ну, или своё. REST сервис у Ирины появился, может, будет полезен.
Я когда-то давно тоже делал ассистента, основанного на нем, делал свой словарь, а самое главное: распознавание основывалось на правилах JSGF. В таком варианте довольно неплохо справляется. Пример можно посмотреть на моем варианте: SARA. Реагирует на фразу: Ок Сара =)
реализовал различные расширения, о всех реализованных функциях можно прочитать тут: SARA Home page
там есть и ссылка на справку по доступным командам. Правда токен на API погоды протух, но в настройках его можно заменить на свой.
Тоже страдал таким года 4-5 назад но на шарпе, а тогда голосовые помощники были ну вообще так себе(И мысль была больше не о безопасности, а о в принципе чтоб оно нормально понимало что я хочу). Но понял что мне вообще не нужен голосовой помошник в итоге XD Потом попробовал голосовой ввод текста, тоже не зашло) Настолько привык к горячим клавишам и клавиатуре, и просить, ждать обработки и т.п. невыносимо (А вдруг я буду уставшим, а оно ещё и не поймет меня, этож как нажимать на букву "е" а оно будет писать "а")
Ну и для детей — голосовое управление на первых порах, а не клава/мышь.
По личным ощущениям — распознает хорошо, постоянно пользуемся.
когда заняты руки и неохота прикасаться к клавиатуре/мыши
Спасибо! Наверное, от "когда заняты руки" и надо плясать с этими помошниками. Без этоо было совершенно непонятно, зачем они нужны.
Но понял что мне вообще не нужен голосовой помошник в итоге
На самом деле интересно, а если ли какая-то статистика по реальному использование голосовых помощников? Я вот тоже не могу себе представить, что буду разговаривать, скажем, с Siri, чтобы попросить ее что-то сделать, если я могу сам натыкать нужные кнопки, и возможно это окажется быстрее, чем словами описывать, что я хочу.
Из бегло нагугленного и без проверки источников на данных америки за 2021 год (из числа владельцев, включая помощники в телефоне):
85% музыка
74% проверяют погоду
65% ставят будильник
62% проверяют текущее время
42% ставят напоминания
32% телефонный звонок
Про статистику не знаю, но мы вот умеренно активно используем Алису (и я всё надеюсь перейти на что-нибудь открытое и оффлайновое). Основные кейсы на текущий момент:
включение/выключение света и изменение яркости (в квартире заменены все выключатели, а в лампах, которые включаются в розетки, стоят умные лампочки) — удобно давать команды, например, когда лежишь ещё не проснувшись в кровати и даже глаза открыть не можешь, или выключать всё перед выходом из дома; но при этом управление голосом не должно заменять ручное
информация о погоде — неожиданное очень частый юзкейс
прослушивание музыки — тут всё понятно, модный мультирум у нас не зашёл совсем
общие вопросы (с ответами из Гугла и Википедии) — к сожалению, работает не очень, часто заканчивает читать сниппет буквально перед нужной информацией; наверно каждый третий раз приходится либо переспрашивать, либо искать самостоятельно
Из того, что уже назрело и хочется сделать:
управление роботом-пылесосом (наш уже старый и не умеет в удалённое управление), хотя тут в более далёкой перспективе лучше привязывать к отслеживанию наличия людей дома
открытие/закрытие штор (управление голосом тут скорее бонус)
В общем, если вы покупаете исключительно голосового ассистента, то от него не так много чего можно получить: собственно, управление музыкой (и видео, если у вас есть телевизор) и голосовой поисковик. Но если делать умный дом, то управлением голосом будет добавлять немного дополнительной ценности к каждой функции.
Использую "Google Ассистент" ровно в двух случаях:
Поставить таймер
Узнать номер квартиры знакомого, к кому иду в гости (команда "<имя в телефонной книге> адрес", при условии, что поле адреса заполнено, естесственно)
Эти сценарии оказываются более быстрыси/удобными с использованием голоса, остальные - нет.
В основном в авто пользуюсь через CarPlay. Звоню с помощью голосового помощника (отвечать на текстовые сообщения получается криво - все время что-то идет не так). Прошу строить маршруты (в основном из записанных). Еще очень удобно в поездках между городами получать инфу о погоде на маршруте не отвлекаясь от вождения, два раза это оказалось особенно полезно:
Как-то попал в сильный снегопад (ночью) и регулярный мониторинг погоды на маршруте помог принять решение о своевременной остановке в гостинице (М4 в тот раз знатно завалило, мне повезло, что не поехал дальше).
Ехал еще на летней резине в межсезонье, дорога была мокрая (после дождя) а температура вертелась в районе +2 градусов (тоже ночь была). Постоянно интересовался а что там дальше в городах, через которые проходил маршрут. В случае дальнейшего понижения температуры тоже остановился бы до улучшения погодных условий.
Еще вспомнилось. Один раз (так же в авто) тщетно пытался воспользоваться поиском, дабы определить что за тварь (большой паук) вылезла на переднюю панель моего авто, а потом не дав себя убить резво умчалась куда-то в ее недра. Ехал с юга, были некоторые подозрения, что это не совсем безобидное насекомое. Но поиск с помощью Siri из CarPlay, как оказалось, практически не работает - и остаток пути я провел в абсолютном неведении относительно того, может ли меня "сожрать" мой попутчик, или он не из таких. Морально помогали периодические обстукивания панели в непосредственной близости от себя, в надежде что тварь спрячется куда подальше. Не знаю, кто придумал ограничить поиск в CarPlay и Android Auto - иногда он мог бы спасти клиентам жизнь, мне кажется.
может ли меня "сожрать" мой попутчик, или он не из таких
не дав себя убить резво умчалась куда-то в ее недра
Пытаться давить их (и ос тоже) не стоит, они довольно крепкие. Запросто могут выжить и в ответ напасть.
В России смертельно опасный (причем далеко не на 100%) только один, каракурт, не узнать его сложно - черный с красными пятнами.
Есть еще несколько ядовитых видов, которые могут вызывать отеки, нарывы, недомогание, некроз тканей. Одного такого видел и близко рассматривал, это был сумочный паук (мешочник). В гостинице поздно вечером прямо на двери номера сидел со стороны улицы (у каждого номера свой вход). Прогонять или что-то с ним делать не было смысла, наверняка где-то рядом еще десяток таких же. Вообще не парился. Правда, я тогда не знал что они могут быстро бегать и резко прыгать. Если бы знал, то может быть не стал бы фотографировать бы его с расстояния 5-10 см. Он вообще не шевелился, со вспышкой хорошо получился.
MQTT есть из коробки, или надо свой плагин шаманить?
1. Кроме зависимостей из requirements.txt потребовалось еще 2 библиотеки в саму систему:
apt install portaudio19-dev espeak
2. Не взлетел русский язык в TTS, Ирина отвечает на клингонском :) Ну т.е. вообще какие-то странные звуки издает. Видимо надо копать в русификацию espeak.
Но сам факт, что оно вообще завелось и меня понимает — несказанно радует.
По-видимому, не заработал TTS. Дефолтный TTS использует pyttsx, должен завестись под Убунту. Очень вероятно, что надо поставить корректный sysId в options/plugin_tts_pyttsx.json — под Виндой он 0, у вас не знаю какой. Надо глянуть pyttsx док, наверное.
Еще, как вариант, переставить TTS на Silero — но тогда туда тоже надо копать.
UPD: Глянул, pyttsx опирается на espeak вроде, да.
Услышал «И тьебье прьивьет» :)
Но на espeak хороший русский и не обещают, он там в зачаточном состоянии.
Думаю, будет чуть времени — на апельсинке попробую. Или на роутере. Или попробую прикрутить другой синтезатор, говорят что rhvoice лучше говорит.
В общем, да, спасибо за проект! Давно хотелось чего-то такого детерминированного, чтобы могло выполнять ограниченный набор команд.
Только что залил свежий апдейт — TTS плагин для RHVoice, можно попробовать, может, будет лучше.
А вот rhvoice-wrapper-bin удалось побороть, хотя и не сразу, а после гугления выдаваемых ошибок. Нужны обязательно
apt install libspeechd-dev
pip3 install scons lxml
В общем, заработало с RHvoice, еще раз спасибо!
Espeak звучит очень плохо, вполне возможно, что он у вас всё-таки работает... Как может. Лучше правда RHVoice попробовать.
Установилось без проблем. ?
Первое впечатление - с гарнитуры распознает хорошо.
Мне более важно, чтобы в небольшой комнате со спикерфона работало. Завтра/послезавтра надеюсь прикрутить для управления переговоркой в офисе и погонять.
MQTT сервер уже есть, может получится что интересное...
ТС, спасибо! Будем пробовать ✌
Эх, сделал бы кто саму колонку, чтоб туда установить свой помощник. А то с микрофоном, колонками беда
Где можно почитать про расстановку ударений в словах в TTS?
Думаю, зависит от движка. У RHVoice есть словарь с довольно-таки удобным синтаксисом:
https://github.com/RHVoice/RHVoice/blob/master/config/dicts/Russian/example.txt
Для Ubuntu 20.04 пришлось установить:
sudo apt-get install libportaudio2 espeak
Так же не обрабатывался requirements.txt
и пришлось каждый пакет устанавливать отдельно.
При выполнении команд мужской голос говорит какую-то абракадабру :) Я совсем не питонист, но очень интересно :) Так же заинтересовало и ввело в недоумение мою жену Ирину, поскольку я до этого никогда не просил ее включить таймер :)
По поводу голоса — гляньте апдейт по Линукс установке: github.com/janvarev/Irene-Voice-Assistant/blob/master/LINUX_INSTALL.md
Я порекомендую 2 вариант, установить RHVoice — там качество правда сильно лучше.
Да, спасибо. Возникла проблема с RHVoice (ошибка с libRHVoice_core.so.5), установил из внешнего репозитория: https://github.com/RHVoice/RHVoice/blob/master/doc/en/Packaging-status.md
Теперь другая ошибка, с libRHVoice_core.so.6:
OSError: libRHVoice_core.so.6: cannot open shared object file: No such file or directory
Но я согласен с nebularia, нужно делать плагин для speech-dispatcher, через него любой движок в линуксе можно выбрать. Модуль в питоне есть, import speechd.
По-хорошему, работать именно с RHVoice это не очень хороший вариант. Как на Windows есть SAPI, так на Linux есть speech-dispatcher. Если работать именно с ним, то привязки к конкретному TTS не будет - будет использоваться системный. Кроме всяких Silero, которые законченным продуктом по сути не являются.
У меня просто винда, проверять вообще неудобно.
Тот же RHVoice интеграция у меня заняла 45 строчек — так что должно быть несложно, просто надо место для тестирования.
Только сделайте, наверное, своим Github-проектом, не надо мне в реквесты. Я не планирую поддерживать, т.к. не могу тестировать. А ссылку я размещу (или можно самому запостить в github.com/janvarev/Irene-Voice-Assistant/issues/1 )
На гитхабе можно иметь публично редактируемую вики. Может, лучше там страничку с плагинами сделать?
В Issues, если проект будет иметь активное коммьюнити, со временем будет всё сложнее ориентироваться.
@janvarev Круто, спасибо! Я тоже после статьи EnjiRouz на хабре захотел себе такого ассистента сделать. А что делаете если команда распознается неправильно? Есть ли коррекция или попытка угадать что хотел сделать пользователь? Я пробовал vosk, он хорошо работает, но иногда проглатывает некоторые буквы. Для синтеза голоса брал silerio.
Не, угадать не пытаюсь. Там довольно простой командный алгоритм — если не нашли слово, то на выход.
Правда, например, тех же имен Ирины по умолчанию несколько: «voiceAssNames»: «ирина|ирины|ирину» — потому что vosk может да, немного по-разному распознавать.
Вариант с «угадыванием» не хочу брать, потому что сложно прогнозировать поведение плагинов в таких условиях — та команда, не та, порог уверенности… По моему видению всё должно строиться на добавлении новых плагинов.
Кстати по синтезу — silero у меня подтормаживал как-то (несколько секунд на генерацию). Хотя TTS-плагин для него в Ирине есть, мне больше понравился pyttsx.
Интересно, поковырял. Для себя доделал реакцию на одиночное произнесённое имя, чтобы ассистент сказал вообще что жив и работает, вместо "не поняла" на имя реагирует "да я слушаю". Мелочь, а приятнее стало. И заметил маленькую особенность - в plugin_mediacmds.py в команде пауза используется "space", что по-моему не очень верно. Там лучше "playpause". Так работает даже если свернуть проигрыватель.
Думаю, автору был бы приятен такой pull request
Если брать ребенка, то мне бы хотелось, чтобы он учился командовать компьютером, а не болтать с ним;
Золотые слова.
Попробую запустить на Raspberry pi (4 или 0?).
Итак, не без танцев с бубнами, заключающимися в установке пакетов, запускаем на Raspberry pi zero w и обнаруживаем, что не хватило памяти (ОЗУ 512 МБ, но у меня есть только ~390МБ, т.к. 128МБ выделено на видеопамять).
JAA PLUGIN ERROR: plugin_mediacmds error on load: [Errno 12] Cannot allocate memory
Прейдётся попробовать на Raspberry pi 4.
А файл подкачки?
mediacmds тянет pyautogui, может, он тяжелый?
Если вы в первом приближении разделяете часть моих мотиваций...
Руками и ногами за! Хотел плюс в карму загнать, но оказалось что уже когда-то это делал) В данном случае у меня лапки, но хоть могу стать постоянным пользователем. Желаю проекту очень больших успехов и неспешного, но качественного развития.
С одним помещением всё понятно. А если в каждой комнате разместить USB радиомикрофоны? Работать с «многомикрофонностью» как будет?
Насчет многомикрофонности — неожиданно прямо сегодня ночью (версия 3.x) сделал возможность мультимашинной инсталляции. Центральный сервер с Ириной (FastAPI — REST/JSON), и клиенты, на которых идет только распознавание звука.
Не знаю, как это конкретно интегрировать с многомикрофонностью, но потенциально вполне возможно.
— либо винда всё сведет в единый микрофон — тогда вообще никаких проблем не будет
— если же нет — можно попробовать при запуске любого vosk-проекта указать параметр командной строки что-то типа --device=1 (номер девайса). Список девайсов выводится по -l (можно в коде посмотреть).
Т.е. как вариант:
— запускаем Ирину сервером
— запускаем несколько vosk-клиентов, каждый из которых слушает свой микрофон
Но это я не тестил, конечно.
Для многомикрофонности есть интересный юзкейс в виде учёта локации: чтобы, например, команда «включить свет» включала его в той комнате, где находится микрофон, уловивший команду.
Сведение всего в один микрофон для этого очевидно не годится, а в клиент-серверной схеме необходимо, чтобы плагин на сервере мог знать, с какого клиента пришла команда.
Результат предсказуем:
import sounddevice as sd
ModuleNotFoundError: No module named 'sounddevice'
небо работают ирина привет параллельно сотни людей придумывают способы снижать прививки
Input (cmd): ирина прогноз погоды задержанного ранее седьмого гражданина сотрудники венера знаешь
Единственно, что работает - регулировка громкости в ТВ тюнере
Погодный кей стоит - ноль эффекта
Скажите, а вы видели проект Open Assistant? Просто очень похож на ваш проект.
Также есть голосовой помощник для Андроида Dicio, также доступный через F-Droid
У OpenAssistant видео старое, а вот Гитхаб свежий почему-то. И по исходникам там совсем другая архитектура + кое-что уже не работает вроде (смотрел как погода сделана).
Dicio интересен, но я не под Андроид. Но, кстати, используя его код, можно сделать клиента для Ирины под Андроид (в клиент-серверном варианте).
Если честно, не пробовал Open Assistant, просто привёл для сравнения.
А Dicio, да, пользуюсь. Очень многообещающий проект от автора NewPipe.
Вообще было бы интересно пощупать клиент для Ирины под Андроид. Конечно если будет доступен пакет (жутко не люблю компиллировать, стараюсь этого избегать до последнего).
Вам, возможно, приглянется проект Rhasspy, возникший из похожих мотиваций, но не поддерживающий Windows напрямую (только через WSL) и пока не имеющий распространяемых пакетов команд. Есть ещё более "костлявая" его версия — voice2json, которая скорее набор конструкторных деталей для работы с голосом.
Проект ощутимо так разросся, хорошо распознаёт ограниченный корпус русского языка (формируется из описанной грамматики команд) и даже натренировал свою систему TTS Larynx. У которой с русским языком есть некоторые странности ("шесть" произносит как "шос"), но в остальном звучит неплохо.
Навык, которого не хватает всем голосовым ассистентам - это списки покупок с возможностью заказа всего этого из какого-нибудь сбермаркета / пятерочки / вкусвилла / озона / вайлдберис.
Юзкейс примерно как у кухонного таймера, когда у тебя руки по локоть в муке и ты понимаешь, что закончилась условная сода и ее надо ее добавить в список покупок. Когда пользователь считает, что список сформировался, он говорит "закажи, что найдешь из этого в <подставить свой магазин>". Приоритет должен быть отдан тем товарным позициям, которые уже покупались ранее (чтобы без сюрпризов было, типа соль за тыщу рублей). Ассистент должен предупредить, что из списка он не нашёл в магазине / уметь прочитать всю получившуюся корзину с ценами и попросить подтверждения совершения покупки. После этого заказанные товары удаляются из списка покупок ассистента.
Ирина — опенсорс русский голосовой помощник. Offline-ready