Фото из сравнения микрофонных массивов для DIY-устройств типа самодельной умной колонки
Системы вроде Amazon Echo передают в облако для хранения ваши конфиденциальные разговоры (даже записанные случайно). В некоторых случаях записи прослушиваются живыми операторами. Это не просто потеря конфиденциальности. Это как добровольно впустить в свою квартиру «товарища майора», который стоит рядом 24 часа в сутки, слушает и внимательно записывает, притворяясь услужливым ассистентом.
Вместо покупки коммерческой системы у корпораций типа Google, Amazon или «Яндекс», вы можете собрать аналогичную опенсорсную систему на базе Raspberry Pi 2-3 B/B+, персонального компьютера или ноутбука.
Rhasspy — безопасный голосовой помощник, который работает автономно. Он ничего не передаёт на удалённые сервисы, при этом успешно справлятся с распознаванием речи и голосовых команд.
У Rhasspy очень простая интеграция в любую программную или аппаратную систему, куда вы хотите добавить голосовое управление. Автор поясняет, что инструмент изначально писался для проекта Home Assistant, но теперь совместим и с большинством других систем домашней автоматизации (Hass.io, Node-RED, OpenHAB, Jeedom).
Rhasspy оптимизирован для работы с внешними сервисами по MQTT, HTTP или Websockets. Оптимизирован именно для голосовых команд с чётко определённой грамматической структурой (включить/выключить свет, сделать музыку громче/тише и т. д.)
Поддерживается 14 языков, в том числе русский.
Модель работы описана в документации. В её основе — распознавание голосовых команд через специфический язык шаблонов, специально приспособленный для данной области. Эти команды классифицируются по намерению (intent) и могут содержать слоты или теги, такие как цвет для освещения или название конкретного светильника, которому подаётся команда.
Чтобы начать работу, перечислите намерения (в квадратных скобках) и возможные способы их вызова. Шаблон выглядит примерно так:
[LightState]
states = (on | off)
turn (<states>){state} [the] light
По такому шаблону Rhasspy сгенерирует JSON-код, который может использовать система домашней автоматизации, внешнее приложение или аппаратное устройство (через Node-RED, веб-сокеты):
{
"text": "turn on the light",
"intent": {
"name": "LightState"
},
"slots": {
"state": "on"
}
}
Непосредственно распознавание речи выполняет pocketsphinx: легковесный опенсорсный движок с поддержкой русского языка. Он отлично подходит для мобильных устройств или одноплатных компьютеров типа Raspberry Pi.
Обработка звука происходит автономно на вашем устройстве. Сам звук может поступать с микрофонного массива Raspberry Pi (типа ReSpeaker 4 Mic Array или ReSpeaker 2 Mics pHAT) или из аудиопотока по сети.
Rhasspy — просто очень удобный инструмент, чтобы связать движок распознавания речи с системой автоматизации дома или какой-то другой системой, которая требует голосового управления. В принципе, его можно использовать где угодно: например, в мобильных приложениях. Или в каком-то домашнем роботе типа пылесоса или бармена.
Приятно, когда робот выполняет все те же действия, что и раньше, но теперь по голосовой команде.
Автор Rhasspy также является автором проекта voice2json: это консольная программа примерно для той же задачи, чтобы легко преобразовать человеческую речь в список компьютерных команд (или наоборот).
Кажется, будущее за голосовыми интерфейсами. В этом случае очень важно, чтобы обработка звуковых потоков проходила локально и не требовала доступа в интернет.
Комментарии (23)
AlexanderS
03.01.2020 19:35И тем не менее, это хорошо что такие проекты есть. Значит тему копают помаленьку. Потому как распознавание хочется, но хочется иметь его автономным. Чтобы вот подал питание и оно уже работает без всяких интернетов.
Mogwaika
04.01.2020 11:52Ну и возможно его можно натренировать на свой голос сильно лучше, чем универсальный помощник.
AlexanderS
04.01.2020 12:48Я как-то игрался с шилдом EasyVR 2.0. Это, конечно, не полноценное распознавание — это больше корелляция фона с имеющимся образцом. Обучил её на несколько команд только своим голосом и сначала был поражен насколько точно распознаются команды (шилд сообщал данные ардуине, которая, в зависимости от команды, лампочку зажигала или гасила). Но после того как плата была перенесена в другую комнату всё стало очень плохо. Т.е. если даже в обученном пространстве сделать перестановку мебели и повесить ковёр работа шилда так же ухудшится. А вот если бы было полноценное распознавание…
trolley813
04.01.2020 22:34По заголовку статьи (где упомянут только русский язык) так и подумал, что Rhasspy — это не от Raspberry, а от русского слова "распознавание".
slavius
04.01.2020 12:21Статья — просто информация с сайта? Без личного опыта?
Написать-то много можно…
Khomin
04.01.2020 17:55-2У русского языка нет будущего, по одной простой причине — на нем говорят нищие страны с пенсией $200
Никому он не нуженAlexanderS
04.01.2020 20:21+1Пока эти страны умеют создавать высокотехнологическую продукцию — будущее есть. Хотя оно… с учётом нынешних реалий… несколько непонятное)
Khomin
04.01.2020 21:57-2Под высокотехнологичной продукцией, вы про робота Федора или китайские телефоны, с наклейкой росстеста?
Я что-то не припомню ничего высокотехнологичногоAlexanderS
04.01.2020 22:31+2Вы хабр читаете исключительно выборочно что ли? Здесь всё это проскакивало: лопатки турбины для истребителей пятого поколения, космическая техника, постройка ядерных реакторов, исследования в сфере квантовых вычислений, вычислительные ядра архитектуры RISC-V. Россия в одиночку 10 лет тащила общепланетную пилотируемую космонавтику. В англоязычной сфере нет аналога ресурса habr) У меня язык не поворачивается сказать, что подобной страны нет будущего, даже несмотря на то, что в этой стране не умеют делать нормальный электронный ширпотреб и у ней огромные социально-экономические проблемы. Вопросы по будущему есть и большие. Но я бы пока не спешил злорадствовать на тему ненужности русского языка.
xdenser
Ну русский там поддерживается довольно условно. Оно основано на Sphynx4. Не знаю может на малине pocketSphynx работает и лучше, но я как эту новость увидел на hackernews взял обычный для Java. Модель для русского языка датированную 16 годом а я думаю для pocketSphynx используется та же модель. И что? Ничего оно не распознает, только память жрет гигабайтами. Кстати модель английского и меньше и менее прожорливая, но все равно не распознает. Так что сфинкс в топку. Ну для английского есть альтернатива, ее я не проверял. А для русского заявлен только сфинкс. Так что можно было просто поверить комментариям на hackernews и не заморачиваться проверкой. Хорошо не стал тратить время на сетап этого всего на малине.
EddyEm
pocketsphynx написан на кошерной сишечке, так что, не должно быть никаких проблем с модернизацией. Главное — чтобы народ подтянулся к проекту. А там, глядишь, получим нормальный сервис распознавания. Кстати, можно базовый набор звуков хранить на сайте проекта и дать возможность всем желающим расширять его (но не как у всяких гуглов, когда смартфон передает все, что ты говоришь, к этим буржуям, а передачей уже подготовленного и обработанного набора звуков).
xdenser
Какая разница на чем написан, если все равно толком не работает? И его не вчера начали делать. Иногда проще начать с начала, чем допиливать. И на кошерной сишечке можно наваять лапши. В общем я больше надеялся, что кто-то напишет, что это у меня руки кривые, а у него все работает и замечательно распознает русский. Но таких видать нет. И 99% людей не будут ничего допиливать, они просто захотят его использовать и получат разочарование и потерянное время.
EddyEm
Разница большая: нормальный ЯП и поддерживать легче. Если бы это было написано на каком-нибудь отстое вроде .net, rust или прочей хипстерской гадости, то вероятность, что проект в конце-концов заглохнет, была бы близка к единице.
> В общем я больше надеялся, что кто-то напишет, что это у меня руки кривые, а у него все работает и замечательно распознает русский.
Очень мало людей, которым необходимо распознавать речь. Вот, к примеру, мне это вряд ли в ближайшем будущем понадобится. А нужно было бы — тоже влился б в коллектив разработчиков.
xdenser
Поддерживать можно что-то работающее. А если просто не работает, то это не поддержка.
telobezumnoe
как не странно, но голосовой ввод наиболее удобен для управления автоматизизацией в доме, это проще чем заходить в приложение, выбрать соответствующее действие в ней, если функций достаточно много, пока может это и не сильно востребовано, но я уже не рассматриваю других способов управления. сейчас использую связку autovoice tasker и плагин mqtt для этого… но как было бы просто иметь программу которая в оффлайне преобразует голос в текст, и отправляет необходимые данные в нужный топик по сопадению команды
begemotv2718
Качество распознавания в sphinx ограничено качеством модели. Для русского языка плохая модель — недостаточно обучающих образцов. Для английского образцов побольше, там и распознавание получше.
А распознавание на основе модели можно хоть на shell скриптах писать (как это сделано в kaldi). От этого результат не зависит.
johnfound
Ну, насколько я понимаю – pocketSpinx и Sphinx4 совершенно разные программы. pocketSpinx написан на C, а Spinx4 на Java.
То есть выходит что вы тестили Spinx4 и переносите впечатления на pocketSpinx. Да, алгоритмы там наверно те же самые, но я и так могу сказать что написанные на Java, они будут тормозить и жрать гигабайты памяти.
xdenser
А я про тормоза ничего не говорил. Я думаю, что Java на ПК и native code на малине будут иметь сравнимую производительность. Да ради бога я ему выделил 8 гиг памяти — пусть только работает. Тогда бы я начал с pocketsphinx заморачиваться.
johnfound
Я не знаю какие там алгоритмы, но знаю что система для работы в реальном времени если быстродействие не позволяет может просто начать пропускать данные. Конечно распознавать при этом будет плохо. Кстати, на сайт Rhasspy именно это и написано:
То есть, pocketSpynx тоже надо на мощном сервере ставить, а не на малине.
xdenser
У вас распознает? Если ставить на домашний сервер, то это уже не pocket…
johnfound
Ну-у-у, мой язык к сожалению не поддерживается. А делать домашний ассистент на языке которого говорю только я, да и с акцентом...
begemotv2718
А вы проверяли распознавание на общей языковой модели, или для ключевых слов? Для десятка ключевых слов и ограниченной грамматики у меня pocketsphinx работал неплохо. На общем тексте, конечно, он работает отвратительно.