Pull to refresh

Comments 8

Спасибо за развитие проекта!
Было интересно посмотреть код; обратил внимание, что вы использовали некоторые схожие архитектурные решения. Приятно, значит, я неплохо продумал архитектуру )

У вас, конечно, значительно более сложная обработка аудио + еще замах на многоязычность и GUI. Fuzzy-сравнение строк — тоже хорошая идея, я о ней думал, но у меня руки не дошли нормально ей заняться. Ну, и С#, конечно, не Python — жаль, можно было бы копировать элементы кода.

Я сейчас несколько доработал Ирину, в частности, получилось нормально сделать мультимикрофонную инсталляцию в формате «Ирина — сервер-API» и два клиента-распознавателя, у которых можно указывать аудиоустройство (разобрался как). Ну, и еще один клиент, который взаимодействует с Телеграм. Планирую написать как-нибудь на Хабре о доработках.
(Автор Ирины)

Вам спасибо за идею, примеры кейсов и рассказ о возможностях и доступности современных бесплатных движков распознавания - если бы не это, никогда бы не осознал полезность голосового интерфейса.
К сожалению, как раз обработки аудио у меня нет. :( А, возможно, стоило бы - я поработал с разными микрофонами (гарнитура Jabra Evolve 20, китайский выносной микрофон на которыя я давал ссылку, микрофон ноутбука (Dell Vostro) и настольный Plantronics P610) и уже есть понимание, что качество распознавания заметно отличается. Гарнитура, конечно, лучше всего. А все недорогие варианты выносных микрофонов хорошо работают в пределах 1-1.5 метра. Буду еще искать микрофонные массивы, но пока ничего за вменяемые (для простого обывателя) деньги не нашел. :( Возможно, как раз нормализация звука помогла бы... Возможно, даже профилирование.
Многоязычность, вроде как, вполне неплохо получилось сделать - только надо подумать, как прилеплять конверторы чисел из слов в цифры - я пока сделал хардкодный вариант для русского и английского, но планирую вынести строковые константы в json-файл для возможности расширения другими языками с похожей схемой словобразования числительных. А с непохожими языками придется авторам плагинов как-то самим решать проблему. Возможно, просто распространять код.
Насчет обмена кодом - есть транслятор кода pytoc - я им как-то раз пользовался - вполне вменяемо.
Я сам не считаю свой вариант мягкого сравнения окончательным - возможно, попробую еще варианты алгоритмов. Недавно как раз почитал статью, из которой можно подчерпнуть интересные вещи. Возможно, получится составить пары звуков/букв, близких не физически, как на клавиатуре, а фонетически - это может улучшить распознавание строк.
Ну и надо будет в статью добавить описание существующих плагинов и примерной схемы их реализации для желающих поучаствовать.

Насчет обработки аудио — я как минимум имел ввиду уменьшение громкости звука на время распознавания, и продолженное распознавание. Я-то делал по-минимуму «на коленке», меня устраивает качество даже в текущем варианте, и мне не хотелось усложнять плагинную систему.

Насчет многоязычности чисел — можете посмотреть реализацию github.com/MycroftAI/lingua-franca — это многоязычность для свободного голосового помощника MyCroft, правда, тоже на Питон. Если что, я думал её прикрутить к себе, но все-таки у меня акцент на русский вариант, не хочу распыляться.

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

Единственного, чего, на мой взгляд, не хватает - раскрытие диалога с пользователем, например, для уточнения параметров команд. Благодаря такой фиче можно было бы реализовать более сложные конструкции и даже деревья выполнения команд

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

Если интересно, посмотрите последнюю версию Ирины. Я там архитектурно добавил возможность использовать контекст — т.е. ситуацию, когда плагин переключает систему в состояние «слушаем не с Ирины, и распознаем команду», а «слушаем всё и передаем плагину». Может, будет полезно. Есть пример реализации в формате игры «Больше-меньше».

Если я правильно Вас понимаю, то у меня изначально такое есть - любой плагин может поднять флаг готовности к получению аудио потока или потока распознанных слов и использовать эти данные по своему усмотрению - например, для запроса подтверждения. Я на HelloPlugin это проверял - вполне работает. Только, конечно, задержка с выдачей пакетов распознанных слов в VOSK немного портит картинку - данные получаешь только после паузы в разговоре.
Надо будет сделать рабочий тестовый вариант такого взаимодействия в HelloPlugin.
Но делать диалоговые команды я все-таки пока не хочу - повертел в голове это и, мне кажется, структуры описания диалогов в JSON получатся довольно сложные, а обрабатывать их все равно придется разработчику в самом плагине - ядро не поможет с бизнес-логикой. А нужно это редко...
Проще уж сделать 2 команды - одну изначальную, на прием пприказа и вторую - ответ на запрос по первой команде. А плагин должен будет запоминать, ждет ли он ответа...

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

Например, у меня в планах:
— если не распознано после «таймер», уточнить — «что вы сказали после таймер?»
— для электрички — «хотите поставить будильник за пять, десять, двадцать минут до электрички?». Т.е. такие допы.

У меня еще контекст сбрасывается после 10 секунд, если нет ввода — это позволяет не залипать в плагине, если вдруг пользователь передумал.

Ещё можно для ребенка арифметические задачки. Там тоже удобнее, если прямой ввод доступен в какой-то момент.
Sign up to leave a comment.

Articles