Pull to refresh

Comments 9

про установку на RPI3 интересно, я делал на Windows 10 IoT подобное, программа на c#, с использованием веб-сервиса гугл (а также яндекс и майкрософт). Сложного тут ничего нет, но есть проблема — это всё платное в использовании, а число бесплатных запросов ограничено.

Кроме того, оно всё работает так себе, если не говорить прямо в рупор, а расположить устройство под потолком в большой комнате. А если еще и ТВ включен… С этим большая проблема и алгоритмов распознавания голоса хозяина с отделением от шума пока не создано, насколько мне известно. То есть пока это просто игрушка, непрактичная, поиграться недельку и забросить. Потому что перед ее использованием надо выключить ТВ, подойти к ней, прокричать в рупор, заплатить за это, еще и с русским дела хуже, чем с английским.

Но через пару лет ситуация будет много лучше, полагаю.
Про микрофон конечно печально, но логично. Особенно если мкрофон один и не разбивает звук в помещении по источникам.
Или это я слишком оптимистичен, полагая что разбить источники по координатам могут без особых сложностей?
Мне тоже так казалось и я мечтал, как нашпигую дом микрофонами и дело в шляпе… Однако сложность тут техническая: стримить звуковой поток (16 тыс семплов в секунду с каждого устройства) на веб-сервис, чтобы тот распознавал на лету — это безумно дорого, бесплатная подписка 10 часов в месяц, а за остальное придется очень дорого доплатить.

Поэтому применяют кейспоттинг, распознавая ключевое слово по месту, потом стримя семпл на веб-сервис. В этом кейспоттинге и проблема. Нужно эти 16 тыс семплов в секунду синхронизировать на каждом устройстве. Если их десять, то это 160 тыс на каждом устройстве и 1.6 млн суммарно байт в секунду сетевого обмена и такая же загрузка процессоров, где она вся уйдет на сетевой обмен.

Только при таком подходе можно найти к какому ты устройству ближе, но устройства типа RPI такое не будут держать, полагаю, производительности не хватит, по крайней мере на Windows 10 IoT, а надо ведь и другие задачи делать. Кроме того, оно будет работать только в идеальном случае, когда ты один дома и тихо. А если комнаты смежные, в одной комнате один человек командует, в другой комнате — другой командует, делают они это не синхронно, а в холле телевизор болтает — тут вся система микрофонов и откажет… Из-за несовершенства алгоритмов даже такого примитивного распознавания ключевого слова. Нет пока алгоритмов, эта задача распознавания не решена пока на нормальном уровне, достаточном для использования хотя бы с допустимым числом ошибок. А без споттинга цена решения настолько дорога — что в принципе непрактична даже для собственного умного дома.

Собственно, вся фишка описанных выше устройств — это данный кейворд споттинг, где вся цена платится за правильную реакцию на «ок, гугл» и даже на «хей, гу гу!», благодаря нейросети, натренированной на миллионах семплов. Но и это только на одном устройстве, причем близко к нему (выше уровня шума).

В общем, пока это всё игрушка. Пока не будет найдено психоакустических алгоритмов или не будет выложена альтруистами нейросеть на миллиарде семплов с распознаванием голоса сильно ниже уровня шума.
Ну всё же предполагал локальные фильтры. Например звуковой поток ТВ вычитается как шум. Или голос берется только от одного источника в пределах комнаты, отсекая все остальные шумы. То есть что-то вроде «умного» направленного микрофона фокусирующегося на говорящем в помещении. А потом уже, обработанный поток, после опознания ключа начинает идти на сервер.
Сложностей конечно такой подход рождает немало, но постоянная трансляция в сеть тоже вариант сомнительный. Особенно если так начнут делать все подряд.
Дело в том, что алгоритмический на данный момент невозможно выделить понятие «шум» из звукового потока. Для техники такого понятия не существует и пока не научили… В принципе я для себя, пока пробовал свой кейспоттинг, делал так: каждую секунду анализирую текущий уровень звука и считаю его шумом (тишиной). Все, что выше этого порога — принимается к распознаванию.

Других вариантов найти не смог. Если голос ниже шума (болтающий ТВ) — тут ничего, на мой взгляд, сделать не получится. Или если два человека в комнате говорят между собой, а потом зашел третий и сказал «хей гу гу» — тоже техника с ума сойдет такое распознать. А уж если в комнате дискотека или хотя бы приятная фоновая музыка играет и ты хочешь скомандовать «сделай потише» — тут и наступит облом. Потому что ты от микрофона далеко, а колонки тоже у потолка и поближе. То есть шумом в данном случае становится твой голос, а не музыка.

Вот таких нюансов множество и почти все они не будут работать (я не проверял это по факту, мне хватило того, что реализованный мной кейспоттинг был нерабочим, а я применял лучшие известные на сегодня методики распознавания). В общем, железка просто не знает что есть «голос», а что есть «шум». И даже люди этого не знают пока для себя
Об экстремальных условиях я речь не веду. Но неужели обработка звука на таком низком уровне? Динамики и микрофоны расположены неподвижно, форма сигнала и задержки до микрофона известны, отражения и мелкие коррекции можно снять заранее. Неужели всего этого недостаточно чтобы «вырезать» обработкой хотя бы звук телевизора? Для ситуации, сел в кресло а пульт неизвестно где, это было бы весьма неплохим решением.
я совсем не профессионал в этой области (но профессиональный программист). И захотев сделать себе умный я дом, я размечтался. Но только до тех пор, пока не узнал, что действительно алгоритмы распознавания голоса находятся на уровне чуть выше нуля и дают очень много ошибок. Нормальных алгоритмов нет — все что есть сравнивают среднее по больнице со средним по поликлинике. И если с некоторой вероятностью совпало — то принимается.

Беда в том, что если берем ключевое слово например «Колокол», то повторим его раз 10 получим отклонение в 10 у.е
А потом скажем слово «раз» и получим такое отклонение… И какие только методики я не перепробовал… Есть еще задумки — но в целом всё печально, а я ведь использовал классические алгоритмы из диссертаций с DWT и MFCC и их улучшения.

Только обученная на сотнях тысяч примеров нейросеть справляется, и то не всегда. А так даже не получается сравнить звуковой вход с записанным ранее шаблоном — не придумали как и всё тут…

Вот как раз сетевые сервисы Гугл, Майкрософт и Яндекс — они на нейросетях. Но, заразы, платные и существенно. Бесплатно только от часа до 10 часов в месяц, а значит непрерывный стримминг 24 часа в сутки туда не сделать. А по месту с распознаванием ключевого слова проблема.

Это проблемы только одного микрофона. А если их десяток — проблема усугбляется. Попробуйте положить два телефона в комнате и произнесите «Ок, гугл», они оба начнут слушать вас и оба исполнять команды. Та же ситуация, думаю, с описанными в статье устройствами.
Вот, посмотрите, звуковая иллюзия. Половина людей слышат Йенни, а половина Лорел. Причем лично я каждый день слышу разное.

www.youtube.com/watch?v=7ID87yKEYfI

Если даже люди не могут нормально распознавать — то техника тем более. В видео ниже объяснение почему так

youtu.be/74FOb0ezemc?t=1m41s
Казалось бы, что сложного распознать голос… Однако вы один раз произнесете «ок гугл» с одними вокальными характеристиками, а второй раз — с другими. И их математически не сопоставить никак, они совсем разные. Математических алгоритмов нормальных нет даже для сравнения с шаблоном. Нормально распознается только хорошо обученной нейросетью, а это доступно только корпорациям.

Вот именно за это сравнение «ок гугл» и берут деньги в этих устройствах на самом деле.
Sign up to leave a comment.