Фото из сравнения микрофонных массивов для 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)


  1. xdenser
    03.01.2020 18:46

    Ну русский там поддерживается довольно условно. Оно основано на Sphynx4. Не знаю может на малине pocketSphynx работает и лучше, но я как эту новость увидел на hackernews взял обычный для Java. Модель для русского языка датированную 16 годом а я думаю для pocketSphynx используется та же модель. И что? Ничего оно не распознает, только память жрет гигабайтами. Кстати модель английского и меньше и менее прожорливая, но все равно не распознает. Так что сфинкс в топку. Ну для английского есть альтернатива, ее я не проверял. А для русского заявлен только сфинкс. Так что можно было просто поверить комментариям на hackernews и не заморачиваться проверкой. Хорошо не стал тратить время на сетап этого всего на малине.


    1. EddyEm
      04.01.2020 12:42

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


      1. xdenser
        04.01.2020 12:55

        Какая разница на чем написан, если все равно толком не работает? И его не вчера начали делать. Иногда проще начать с начала, чем допиливать. И на кошерной сишечке можно наваять лапши. В общем я больше надеялся, что кто-то напишет, что это у меня руки кривые, а у него все работает и замечательно распознает русский. Но таких видать нет. И 99% людей не будут ничего допиливать, они просто захотят его использовать и получат разочарование и потерянное время.


        1. EddyEm
          04.01.2020 14:47
          -4

          Разница большая: нормальный ЯП и поддерживать легче. Если бы это было написано на каком-нибудь отстое вроде .net, rust или прочей хипстерской гадости, то вероятность, что проект в конце-концов заглохнет, была бы близка к единице.
          > В общем я больше надеялся, что кто-то напишет, что это у меня руки кривые, а у него все работает и замечательно распознает русский.
          Очень мало людей, которым необходимо распознавать речь. Вот, к примеру, мне это вряд ли в ближайшем будущем понадобится. А нужно было бы — тоже влился б в коллектив разработчиков.


          1. xdenser
            04.01.2020 15:58

            Поддерживать можно что-то работающее. А если просто не работает, то это не поддержка.


          1. telobezumnoe
            04.01.2020 18:30

            как не странно, но голосовой ввод наиболее удобен для управления автоматизизацией в доме, это проще чем заходить в приложение, выбрать соответствующее действие в ней, если функций достаточно много, пока может это и не сильно востребовано, но я уже не рассматриваю других способов управления. сейчас использую связку autovoice tasker и плагин mqtt для этого… но как было бы просто иметь программу которая в оффлайне преобразует голос в текст, и отправляет необходимые данные в нужный топик по сопадению команды


      1. begemotv2718
        05.01.2020 10:48

        Качество распознавания в sphinx ограничено качеством модели. Для русского языка плохая модель — недостаточно обучающих образцов. Для английского образцов побольше, там и распознавание получше.

        А распознавание на основе модели можно хоть на shell скриптах писать (как это сделано в kaldi). От этого результат не зависит.


    1. johnfound
      04.01.2020 13:36

      Ну, насколько я понимаю – pocketSpinx и Sphinx4 совершенно разные программы. pocketSpinx написан на C, а Spinx4 на Java.


      То есть выходит что вы тестили Spinx4 и переносите впечатления на pocketSpinx. Да, алгоритмы там наверно те же самые, но я и так могу сказать что написанные на Java, они будут тормозить и жрать гигабайты памяти.


      1. xdenser
        04.01.2020 13:42

        А я про тормоза ничего не говорил. Я думаю, что Java на ПК и native code на малине будут иметь сравнимую производительность. Да ради бога я ему выделил 8 гиг памяти — пусть только работает. Тогда бы я начал с pocketsphinx заморачиваться.


        1. johnfound
          04.01.2020 13:51

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


          Does speech recognition with CMU's pocketsphinx. This is done completely offline, on your device. If you experience performance problems (usually on a Raspberry Pi), consider running on a home server as well and have your client Rhasspy use a remote HTTP connection.

          То есть, pocketSpynx тоже надо на мощном сервере ставить, а не на малине.


          1. xdenser
            04.01.2020 13:52

            У вас распознает? Если ставить на домашний сервер, то это уже не pocket…


            1. johnfound
              04.01.2020 14:01

              Ну-у-у, мой язык к сожалению не поддерживается. А делать домашний ассистент на языке которого говорю только я, да и с акцентом...


    1. begemotv2718
      05.01.2020 09:52

      А вы проверяли распознавание на общей языковой модели, или для ключевых слов? Для десятка ключевых слов и ограниченной грамматики у меня pocketsphinx работал неплохо. На общем тексте, конечно, он работает отвратительно.


  1. AlexanderS
    03.01.2020 19:35

    И тем не менее, это хорошо что такие проекты есть. Значит тему копают помаленьку. Потому как распознавание хочется, но хочется иметь его автономным. Чтобы вот подал питание и оно уже работает без всяких интернетов.


    1. Mogwaika
      04.01.2020 11:52

      Ну и возможно его можно натренировать на свой голос сильно лучше, чем универсальный помощник.


      1. AlexanderS
        04.01.2020 12:48

        Я как-то игрался с шилдом EasyVR 2.0. Это, конечно, не полноценное распознавание — это больше корелляция фона с имеющимся образцом. Обучил её на несколько команд только своим голосом и сначала был поражен насколько точно распознаются команды (шилд сообщал данные ардуине, которая, в зависимости от команды, лампочку зажигала или гасила). Но после того как плата была перенесена в другую комнату всё стало очень плохо. Т.е. если даже в обученном пространстве сделать перестановку мебели и повесить ковёр работа шилда так же ухудшится. А вот если бы было полноценное распознавание…


  1. trolley813
    04.01.2020 22:34

    По заголовку статьи (где упомянут только русский язык) так и подумал, что Rhasspy — это не от Raspberry, а от русского слова "распознавание".


  1. slavius
    04.01.2020 12:21

    Статья — просто информация с сайта? Без личного опыта?
    Написать-то много можно…


  1. Khomin
    04.01.2020 17:55
    -2

    У русского языка нет будущего, по одной простой причине — на нем говорят нищие страны с пенсией $200
    Никому он не нужен


    1. AlexanderS
      04.01.2020 20:21
      +1

      Пока эти страны умеют создавать высокотехнологическую продукцию — будущее есть. Хотя оно… с учётом нынешних реалий… несколько непонятное)


      1. Khomin
        04.01.2020 21:57
        -2

        Под высокотехнологичной продукцией, вы про робота Федора или китайские телефоны, с наклейкой росстеста?
        Я что-то не припомню ничего высокотехнологичного


        1. AlexanderS
          04.01.2020 22:31
          +2

          Вы хабр читаете исключительно выборочно что ли? Здесь всё это проскакивало: лопатки турбины для истребителей пятого поколения, космическая техника, постройка ядерных реакторов, исследования в сфере квантовых вычислений, вычислительные ядра архитектуры RISC-V. Россия в одиночку 10 лет тащила общепланетную пилотируемую космонавтику. В англоязычной сфере нет аналога ресурса habr) У меня язык не поворачивается сказать, что подобной страны нет будущего, даже несмотря на то, что в этой стране не умеют делать нормальный электронный ширпотреб и у ней огромные социально-экономические проблемы. Вопросы по будущему есть и большие. Но я бы пока не спешил злорадствовать на тему ненужности русского языка.


  1. yvm
    05.01.2020 22:36

    У вас картинка 2 мега…