Pull to refresh

Comments 88

Завернул бы кто-нибудь это чудо в аддон для HomeAssistant

Доделывать придется немало.

Как я понял, в текущей реализации помощник заточен под ноутбук: например, по команде "запусти радио" открывается веб-страница Яндекс Музыки.

Под HA надо всё в headless переделывать

> по команде «запусти радио» открывается веб-страница Яндекс Музыки.
Не, это вообще в допплагинах.

В базовых плагинах весь вывод через TTS, который (сделав нужный TTS-плагин) можно во что угодно завернуть. Правда, в базовом нет никакой музыки.
Посмотрел, интересно.
Можно таким же способом обернуть TTS через webapi Ирины. У Ирины есть вызов ttsWav, рендерящий через WAV через настроенный TTS и возвращающий его.

для синтеза - Windows (голос Irene).

Почему не RHVoice, мне понравился - неприхотлив...

Мне не очень звук понравился + по-моему, он у меня быстро не заработал почему-то.
Вообще можно дописать свой TTS-плагин, если охота прикрутить. Я буду только рад :)

Звук, это конечно вкусовщина. Вполне четкий, я запись(на 5 слов) с RHVoice скармливал Vosk с минимальной моделью и получалось 1 к 1.

UPD: Только что залил свежий апдейт на Github — TTS плагин для RHVoice, если нужно :)

Спасибо, но делаю своё... хоть и проще. Проблемы есть, не смог запустить vosk на 32 битнойт системе (у меня тонкий клиент для этого).

Если нужно, я сейчас сделал опцию с тонкими клиентами. Правда, в основном варианте там тоже vosk… но есть и Recognition, может, заработает.

Ну, или своё. REST сервис у Ирины появился, может, будет полезен.

vosk не расчитан на 32бита, я пытался компилировать самостоятельно, но ума не хватило...

есть и Recognition

это что?

pip install SpeechRecognition
pip install PyAudio

и можно попробовать запустить другой распознаватель

runva_speechrecognition.py

вместо VOSK. Детали на Github есть.

Этот, да знаю, но выбор из offline то же vosk. Возможно обойдусь без Speech Recognition буду использовать ИК пульт.

Можете попробовать pocketsphinx. Он конечно похуже воска с распознаванием, но если ориентироваться не на свободное распознавание произвольной речи, а на конкретные команды со своим словарем, то вполне неплохо справляется.
Я когда-то давно тоже делал ассистента, основанного на нем, делал свой словарь, а самое главное: распознавание основывалось на правилах JSGF. В таком варианте довольно неплохо справляется. Пример можно посмотреть на моем варианте: SARA. Реагирует на фразу: Ок Сара =)
реализовал различные расширения, о всех реализованных функциях можно прочитать тут: SARA Home page
там есть и ссылка на справку по доступным командам. Правда токен на API погоды протух, но в настройках его можно заменить на свой.

Спасибо, pocketsphinx - установился. Буду пробовать...

Попробовал, качество распознования вполне... НО время обработки записи на 5-6 слов - 180 сек. Да процессор ATOM 1 ядро, но все же...

Тоже страдал таким года 4-5 назад но на шарпе, а тогда голосовые помощники были ну вообще так себе(И мысль была больше не о безопасности, а о в принципе чтоб оно нормально понимало что я хочу). Но понял что мне вообще не нужен голосовой помошник в итоге XD Потом попробовал голосовой ввод текста, тоже не зашло) Настолько привык к горячим клавишам и клавиатуре, и просить, ждать обработки и т.п. невыносимо (А вдруг я буду уставшим, а оно ещё и не поймет меня, этож как нажимать на букву "е" а оно будет писать "а")

По ощущениям — один из основных кейсов — это таймер на кухне, когда заняты руки и неохота прикасаться к клавиатуре/мыши. Ну, и смежные — смена музыки, громкость.

Ну и для детей — голосовое управление на первых порах, а не клава/мышь.

По личным ощущениям — распознает хорошо, постоянно пользуемся.

когда заняты руки и неохота прикасаться к клавиатуре/мыши

Спасибо! Наверное, от "когда заняты руки" и надо плясать с этими помошниками. Без этоо было совершенно непонятно, зачем они нужны.

Вообще-то, мне тоже было непонятно :)
Потом я пришел к знакомой и увидел, как она командует Алисой на кухне. И почувствовал, что это прикольный кейс. Да, имеет смысл обычно тогда, когда заняты руки.

Но понял что мне вообще не нужен голосовой помошник в итоге

На самом деле интересно, а если ли какая-то статистика по реальному использование голосовых помощников? Я вот тоже не могу себе представить, что буду разговаривать, скажем, с Siri, чтобы попросить ее что-то сделать, если я могу сам натыкать нужные кнопки, и возможно это окажется быстрее, чем словами описывать, что я хочу.

Из бегло нагугленного и без проверки источников на данных америки за 2021 год (из числа владельцев, включая помощники в телефоне):

85% музыка
74% проверяют погоду
65% ставят будильник
62% проверяют текущее время
42% ставят напоминания
32% телефонный звонок

UFO just landed and posted this here

Про статистику не знаю, но мы вот умеренно активно используем Алису (и я всё надеюсь перейти на что-нибудь открытое и оффлайновое). Основные кейсы на текущий момент:

  • включение/выключение света и изменение яркости (в квартире заменены все выключатели, а в лампах, которые включаются в розетки, стоят умные лампочки) — удобно давать команды, например, когда лежишь ещё не проснувшись в кровати и даже глаза открыть не можешь, или выключать всё перед выходом из дома; но при этом управление голосом не должно заменять ручное

  • информация о погоде — неожиданное очень частый юзкейс

  • прослушивание музыки — тут всё понятно, модный мультирум у нас не зашёл совсем

  • общие вопросы (с ответами из Гугла и Википедии) — к сожалению, работает не очень, часто заканчивает читать сниппет буквально перед нужной информацией; наверно каждый третий раз приходится либо переспрашивать, либо искать самостоятельно

Из того, что уже назрело и хочется сделать:

  • управление роботом-пылесосом (наш уже старый и не умеет в удалённое управление), хотя тут в более далёкой перспективе лучше привязывать к отслеживанию наличия людей дома

  • открытие/закрытие штор (управление голосом тут скорее бонус)

В общем, если вы покупаете исключительно голосового ассистента, то от него не так много чего можно получить: собственно, управление музыкой (и видео, если у вас есть телевизор) и голосовой поисковик. Но если делать умный дом, то управлением голосом будет добавлять немного дополнительной ценности к каждой функции.

Использую "Google Ассистент" ровно в двух случаях:

  • Поставить таймер

  • Узнать номер квартиры знакомого, к кому иду в гости (команда "<имя в телефонной книге> адрес", при условии, что поле адреса заполнено, естесственно)

Эти сценарии оказываются более быстрыси/удобными с использованием голоса, остальные - нет.

В основном в авто пользуюсь через CarPlay. Звоню с помощью голосового помощника (отвечать на текстовые сообщения получается криво - все время что-то идет не так). Прошу строить маршруты (в основном из записанных). Еще очень удобно в поездках между городами получать инфу о погоде на маршруте не отвлекаясь от вождения, два раза это оказалось особенно полезно:

  1. Как-то попал в сильный снегопад (ночью) и регулярный мониторинг погоды на маршруте помог принять решение о своевременной остановке в гостинице (М4 в тот раз знатно завалило, мне повезло, что не поехал дальше).

  2. Ехал еще на летней резине в межсезонье, дорога была мокрая (после дождя) а температура вертелась в районе +2 градусов (тоже ночь была). Постоянно интересовался а что там дальше в городах, через которые проходил маршрут. В случае дальнейшего понижения температуры тоже остановился бы до улучшения погодных условий.

Еще вспомнилось. Один раз (так же в авто) тщетно пытался воспользоваться поиском, дабы определить что за тварь (большой паук) вылезла на переднюю панель моего авто, а потом не дав себя убить резво умчалась куда-то в ее недра. Ехал с юга, были некоторые подозрения, что это не совсем безобидное насекомое. Но поиск с помощью Siri из CarPlay, как оказалось, практически не работает - и остаток пути я провел в абсолютном неведении относительно того, может ли меня "сожрать" мой попутчик, или он не из таких. Морально помогали периодические обстукивания панели в непосредственной близости от себя, в надежде что тварь спрячется куда подальше. Не знаю, кто придумал ограничить поиск в CarPlay и Android Auto - иногда он мог бы спасти клиентам жизнь, мне кажется.

может ли меня "сожрать" мой попутчик, или он не из таких

не дав себя убить резво умчалась куда-то в ее недра

Пытаться давить их (и ос тоже) не стоит, они довольно крепкие. Запросто могут выжить и в ответ напасть.

В России смертельно опасный (причем далеко не на 100%) только один, каракурт, не узнать его сложно - черный с красными пятнами.

Есть еще несколько ядовитых видов, которые могут вызывать отеки, нарывы, недомогание, некроз тканей. Одного такого видел и близко рассматривал, это был сумочный паук (мешочник). В гостинице поздно вечером прямо на двери номера сидел со стороны улицы (у каждого номера свой вход). Прогонять или что-то с ним делать не было смысла, наверняка где-то рядом еще десяток таких же. Вообще не парился. Правда, я тогда не знал что они могут быстро бегать и резко прыгать. Если бы знал, то может быть не стал бы фотографировать бы его с расстояния 5-10 см. Он вообще не шевелился, со вспышкой хорошо получился.

MQTT есть из коробки, или надо свой плагин шаманить?

Нету (я вообще с умным домом особо не работал). Но плагин написать по идее можно + под Питон должны быть библиотеки для работы с MQTT.
Попробовал поставить по инструкции, система — Ubuntu 20.04 LTS.
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 на espeak-ng, вытащил из pyttsx список голосов. Выяснил что espeak использует не числовые id, а строковые. Пока заменил строку в плагине на хардкод core.ttsEngine.setProperty(«voice», 'russian').
Услышал «И тьебье прьивьет» :)
Но на espeak хороший русский и не обещают, он там в зачаточном состоянии.
Думаю, будет чуть времени — на апельсинке попробую. Или на роутере. Или попробую прикрутить другой синтезатор, говорят что rhvoice лучше говорит.
В общем, да, спасибо за проект! Давно хотелось чего-то такого детерминированного, чтобы могло выполнять ограниченный набор команд.
Спасибо!
Только что залил свежий апдейт — TTS плагин для RHVoice, можно попробовать, может, будет лучше.
Сходу не взлетело — установленный из вот этого ппа launchpad.net/~linvinus/+archive/ubuntu/rhvoice не дружит с rhvoice-wrapper, RuntimeError: RHVoice: engine initialization error. При этом сам RHvoice заработал, и произношение конечно же не сравнимо с espeak, намного лучше.
А вот rhvoice-wrapper-bin удалось побороть, хотя и не сразу, а после гугления выдаваемых ошибок. Нужны обязательно
apt install libspeechd-dev
pip3 install scons lxml
В общем, заработало с RHvoice, еще раз спасибо!

Espeak звучит очень плохо, вполне возможно, что он у вас всё-таки работает... Как может. Лучше правда RHVoice попробовать.

Только что залил свежий апдейт на Github — TTS плагин для RHVoice :)

Установилось без проблем. 👍

Первое впечатление - с гарнитуры распознает хорошо.

Мне более важно, чтобы в небольшой комнате со спикерфона работало. Завтра/послезавтра надеюсь прикрутить для управления переговоркой в офисе и погонять.

MQTT сервер уже есть, может получится что интересное...

ТС, спасибо! Будем пробовать ✌

Очень прикольно слышать, что всё работает. Спасибо! :)

Эх, сделал бы кто саму колонку, чтоб туда установить свой помощник. А то с микрофоном, колонками беда

Нужен открытый проект колонки на raspberry pi zero.

Было бы интересно взглянуть на то что @bobuk сделал и сравнить....

Где можно почитать про расстановку ударений в словах в TTS?

Для Ubuntu 20.04 пришлось установить:

sudo apt-get install libportaudio2 espeak

Так же не обрабатывался requirements.txt и пришлось каждый пакет устанавливать отдельно.

При выполнении команд мужской голос говорит какую-то абракадабру :) Я совсем не питонист, но очень интересно :) Так же заинтересовало и ввело в недоумение мою жену Ирину, поскольку я до этого никогда не просил ее включить таймер :)

Да, спасибо. Возникла проблема с 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
Я там отписывал выше — даже, если побороть cannot open shared object file симлинком libRHVoice_core.so -> libRHVoice_core.so.6 — то оно все равно падает. Нужно поставить rhvoice-wrapper-bin, он сам качает и собирает из исходников RHVoice и позволяет rhvoice-wrapper-у его использовать.
Но я согласен с nebularia, нужно делать плагин для speech-dispatcher, через него любой движок в линуксе можно выбрать. Модуль в питоне есть, import speechd.

Спасибо, заработало!

По-хорошему, работать именно с RHVoice это не очень хороший вариант. Как на Windows есть SAPI, так на Linux есть speech-dispatcher. Если работать именно с ним, то привязки к конкретному TTS не будет - будет использоваться системный. Кроме всяких Silero, которые законченным продуктом по сути не являются.

Если вдруг кто-нибудь может, пожалуйста, сделайте TTS плагин для speech-dispatcher с нужными настройками.
У меня просто винда, проверять вообще неудобно.

Тот же RHVoice интеграция у меня заняла 45 строчек — так что должно быть несложно, просто надо место для тестирования.
Я попробую в ближайшее время. Вроде и правда должно быть несложно. Пока у меня вчерашние эксперименты с русификацией сломали установленный в систему RHVoice.
Буду очень признателен :)
Только сделайте, наверное, своим Github-проектом, не надо мне в реквесты. Я не планирую поддерживать, т.к. не могу тестировать. А ссылку я размещу (или можно самому запостить в github.com/janvarev/Irene-Voice-Assistant/issues/1 )

На гитхабе можно иметь публично редактируемую вики. Может, лучше там страничку с плагинами сделать?
В Issues, если проект будет иметь активное коммьюнити, со временем будет всё сложнее ориентироваться.

Я вики вроде открыл, но там надо разбираться с правами на редактирование.
А так — issues/1 зарезервировано под постинг собственных проектов с плагинами.

@janvarev Круто, спасибо! Я тоже после статьи EnjiRouz на хабре захотел себе такого ассистента сделать. А что делаете если команда распознается неправильно? Есть ли коррекция или попытка угадать что хотел сделать пользователь? Я пробовал vosk, он хорошо работает, но иногда проглатывает некоторые буквы. Для синтеза голоса брал silerio.

:)
Не, угадать не пытаюсь. Там довольно простой командный алгоритм — если не нашли слово, то на выход.
Правда, например, тех же имен Ирины по умолчанию несколько: «voiceAssNames»: «ирина|ирины|ирину» — потому что vosk может да, немного по-разному распознавать.

Вариант с «угадыванием» не хочу брать, потому что сложно прогнозировать поведение плагинов в таких условиях — та команда, не та, порог уверенности… По моему видению всё должно строиться на добавлении новых плагинов.

Кстати по синтезу — silero у меня подтормаживал как-то (несколько секунд на генерацию). Хотя TTS-плагин для него в Ирине есть, мне больше понравился pyttsx.

Интересно, поковырял. Для себя доделал реакцию на одиночное произнесённое имя, чтобы ассистент сказал вообще что жив и работает, вместо "не поняла" на имя реагирует "да я слушаю". Мелочь, а приятнее стало. И заметил маленькую особенность - в plugin_mediacmds.py в команде пауза используется "space", что по-моему не очень верно. Там лучше "playpause". Так работает даже если свернуть проигрыватель.

Думаю, автору был бы приятен такой pull request

Не уверен что эта фича прям так нужна в основном проекте

plugin_mediacmds.py переделал, да. Добавил команду «пробел» — он у меня кое-где работает лучше (в браузере, да)
На одиночное имя — да, не знаю, может и не особо нужно. Но если будет реквест + фраза в конфиге, могу слить, наверное.

Если брать ребенка, то мне бы хотелось, чтобы он учился командовать компьютером, а не болтать с ним;

Золотые слова.

Попробую запустить на 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.

Попробую. Но разве частые перезаписи sd карты не приводят к выводу из строя карты?

Все тлен... :) Не такие они дорогие уже...

Попробуйте создать swap на zram-устройстве, тогда SD-карта останется живой

А нельзя у видеопамяти ОЗУ совсем отобрать, ну т.е. деактивировать полностью видеоадаптер, чтобы не мешался?
Может, попробовать выключить какие-то плагины?
mediacmds тянет pyautogui, может, он тяжелый?

Выключил плагины: mediacmds, plugin_mpchcmult.py, plugin_yandex_rasp.py. Расширил swap до 300 МБ. Теперь памяти хватает. А путь к устройству микрофона надо ли куда-нибудь прописывать?

Да вроде нет, у меня vosk сам тянет. Но я тестировал только на винде.

На убунту тоже само пользуется микрофоном и выходом звука по умолчанию, ничего не выставлял.

Если вы в первом приближении разделяете часть моих мотиваций...

Руками и ногами за! Хотел плюс в карму загнать, но оказалось что уже когда-то это делал) В данном случае у меня лапки, но хоть могу стать постоянным пользователем. Желаю проекту очень больших успехов и неспешного, но качественного развития.

С одним помещением всё понятно. А если в каждой комнате разместить USB радиомикрофоны? Работать с «многомикрофонностью» как будет?
Спасибо! :)
Насчет многомикрофонности — неожиданно прямо сегодня ночью (версия 3.x) сделал возможность мультимашинной инсталляции. Центральный сервер с Ириной (FastAPI — REST/JSON), и клиенты, на которых идет только распознавание звука.

Не знаю, как это конкретно интегрировать с многомикрофонностью, но потенциально вполне возможно.
Доп инфа по многомикрофонности:
— либо винда всё сведет в единый микрофон — тогда вообще никаких проблем не будет

— если же нет — можно попробовать при запуске любого vosk-проекта указать параметр командной строки что-то типа --device=1 (номер девайса). Список девайсов выводится по -l (можно в коде посмотреть).
Т.е. как вариант:
— запускаем Ирину сервером
— запускаем несколько vosk-клиентов, каждый из которых слушает свой микрофон
Но это я не тестил, конечно.

Для многомикрофонности есть интересный юзкейс в виде учёта локации: чтобы, например, команда «включить свет» включала его в той комнате, где находится микрофон, уловивший команду.


Сведение всего в один микрофон для этого очевидно не годится, а в клиент-серверной схеме необходимо, чтобы плагин на сервере мог знать, с какого клиента пришла команда.

Да, можно. Но есть более простой вариант — отредактировать клиент, чтобы он посылал дополнительный элемент команды, и обрабатывать его плагином. Т.е. можно сделать без залезания в код ядра.

Результат предсказуем:

import sounddevice as sd
ModuleNotFoundError: No module named 'sounddevice'
pip install -r requirements.txt
нет? должен установить sounddevice

Значит не устанавливает.

Только ручками

небо работают ирина привет параллельно сотни людей придумывают способы снижать прививки

Input (cmd): ирина прогноз погоды задержанного ранее седьмого гражданина сотрудники венера знаешь

Единственно, что работает - регулировка громкости в ТВ тюнере

Погодный кей стоит - ноль эффекта

Скажите, а вы видели проект Open Assistant? Просто очень похож на ваш проект.

Также есть голосовой помощник для Андроида Dicio, также доступный через F-Droid

Нет, не видел, но проекты интересные.
У OpenAssistant видео старое, а вот Гитхаб свежий почему-то. И по исходникам там совсем другая архитектура + кое-что уже не работает вроде (смотрел как погода сделана).

Dicio интересен, но я не под Андроид. Но, кстати, используя его код, можно сделать клиента для Ирины под Андроид (в клиент-серверном варианте).

Если честно, не пробовал Open Assistant, просто привёл для сравнения.

А Dicio, да, пользуюсь. Очень многообещающий проект от автора NewPipe.

Вообще было бы интересно пощупать клиент для Ирины под Андроид. Конечно если будет доступен пакет (жутко не люблю компиллировать, стараюсь этого избегать до последнего).

Вам, возможно, приглянется проект Rhasspy, возникший из похожих мотиваций, но не поддерживающий Windows напрямую (только через WSL) и пока не имеющий распространяемых пакетов команд. Есть ещё более "костлявая" его версия — voice2json, которая скорее набор конструкторных деталей для работы с голосом.

Проект ощутимо так разросся, хорошо распознаёт ограниченный корпус русского языка (формируется из описанной грамматики команд) и даже натренировал свою систему TTS Larynx. У которой с русским языком есть некоторые странности ("шесть" произносит как "шос"), но в остальном звучит неплохо.

Навык, которого не хватает всем голосовым ассистентам - это списки покупок с возможностью заказа всего этого из какого-нибудь сбермаркета / пятерочки / вкусвилла / озона / вайлдберис.

Юзкейс примерно как у кухонного таймера, когда у тебя руки по локоть в муке и ты понимаешь, что закончилась условная сода и ее надо ее добавить в список покупок. Когда пользователь считает, что список сформировался, он говорит "закажи, что найдешь из этого в <подставить свой магазин>". Приоритет должен быть отдан тем товарным позициям, которые уже покупались ранее (чтобы без сюрпризов было, типа соль за тыщу рублей). Ассистент должен предупредить, что из списка он не нашёл в магазине / уметь прочитать всю получившуюся корзину с ценами и попросить подтверждения совершения покупки. После этого заказанные товары удаляются из списка покупок ассистента.

Sign up to leave a comment.

Articles

Change theme settings