Краткое описание того, что я пытался сделать и что он на самом деле делает.
В моем проекте есть два простых узла: один для прослушивания и публикации, а другой для разговора и подписки. Я назвал их прослушивающим и говорящим узлом соответственно.
Задача, которую я хотел достичь, была довольно проста, я бы попросил пользователя сказать «запомни меня», который будет распознан как ключевое слово и опубликован для voiceCommandCallback
метод в говорящем узле, чтобы мой робот мог сказать: «Хорошо, пожалуйста, назовите свое имя». Затем, вернувшись к прослушивающему узлу, поверх публикации этой ключевой фразы он также вызовет метод recognize_from_mic_with_dict()
который, как вы можете догадаться, будет работать с использованием словаря имен.
это recognize_from_mic_with_dict()
Метод будет прослушивать имя и попытаться опубликовать это имя namesCallback()
в прослушивающем узле, и именно здесь я проверяю, было ли то, что было опубликовано, действительным именем, или это было просто бредом, и в этом случае я хотел бы попросить пользователя повторить его / ее имя и снова подписаться на recognize_from_mic_with_dict()
чтобы он мог слушать еще раз.
Это звучит сложнее, чем, вероятно, должно быть, но это единственный способ, которым я мог придумать для достижения этого «переключения режима». Проблема в том, что если он услышит тарабарщину, он скажет: «Извините, я не совсем это слышал. Пожалуйста, повторите это!» и я хотел бы знать, есть ли способ заставить слушающий узел игнорировать все, что говорит робот, потому что он пытается распознать имена из своего предложения.
Вы можете использовать это как проблему контроля обратной связи.
При условии :
проблема состоит в том, чтобы оценить ĥ и, следовательно, ŝ (r уже известно),
таким образом, оценка речевого сигнала пользователя определяется как û = y — ŝ = y — ĥ * r
Других решений пока нет …