Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Windows 10 IoT Core:робот, управляемый речью

История

Раньше компьютерное взаимодействие с компьютером осуществлялось с помощью перфокарт, трекбола, светового пистолета, клавиатуры и даже с помощью сенсорного экрана. Для работы со всеми этими устройствами требуется физический контакт.

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

Эта статья поможет вам изучить технологию распознавания речи, предоставляемую в Windows 10 IoT Core. В конце темы мы создадим робота с использованием Windows 10 IoT Core и Raspberry Pi 2 с запущенным приложением распознавания речи. Это приложение для распознавания речи позволяет роботу выполнять различные задачи движения (например, движение вперед, поворот, остановку и т. Д.) На основе речевого взаимодействия пользователя.

Впервые в Windows 10 IoT Core? или новичок? сначала обратитесь по этой ссылке.

Эта статья была обновлена ​​30 марта 2016 г.

Что такое распознавание речи?

В отдельной строке распознавание речи означает перевод произнесенных слов в возможный эквивалентный текст. Распознавание речи можно разделить на два основных компонента:обработка сигналов и декодер речи. Нам не нужно беспокоиться о его сложности, потому что Microsoft уже разработала для этого решение. Нам просто нужно использовать их речевые библиотеки.

Шаг 1

Начало работы с распознаванием речи

Начнем с основной идеи:

  • Создать грамматику распознавания речи (SRGS Grammar)
  • Инициализировать объект распознавателя речи и загрузить грамматику (SpeechRecognizer)
  • Зарегистрируйтесь для событий распознавания речи и создайте обработчик

Создать грамматику распознавания речи

Прежде чем приступить к распознаванию речи, нам нужно понять, как можно запрограммировать универсальное приложение для Windows, чтобы оно понимало наш язык или команды. Для этого нам нужно создать грамматику распознавания речи. Грамматику распознавания речи можно создать с помощью SRGS Grammar для универсального приложения для Windows:

  • Используйте XML для создания документов грамматики, которые соответствуют Спецификации грамматики распознавания речи (SRGS) версии 1.0, стандарту W3C для грамматик распознавания речи.

Примечание. Другие возможные способы доступны в .Net Framework, но они не поддерживаются в UWP на момент написания этой статьи. Какие:

  • Создавайте грамматики программно, используя члены классов GrammarBuilder и Choices в пространстве имен System.Speech.Recognition.
  • Используйте конструкторы и методы классов в пространстве имен System.Speech.Recognition.SrgsGrammar для программного создания грамматик, совместимых с SRGS.

Мы начнем с грамматики XML. Прежде чем мы начнем создавать файл грамматики, нам нужно представить и определить, как пользователь будет взаимодействовать с нашим приложением. В контексте этого проекта пользователь будет давать команду роботу двигаться в любом направлении, останавливаться и давать команду на включение / отключение обнаружения препятствий. Мы можем составить список речевой лексики, который выглядит следующим образом:

  • Двигаться вперед
  • Переместить назад
  • Поверните направо
  • Поверните налево
  • Остановить
  • Обнаружение препятствий
  • Отключение обнаружения препятствий

Для этого словаря нам нужно разработать грамматику XML. Нам просто нужно следовать некоторым основным правилам SRGS v1.

Грамматика SRGS

Для создания грамматики SRGS необходимо соблюдать некоторые основные правила, а именно:

  • Корневой элемент должен соответствовать грамматике.
  • Необходимо указать версию грамматики атрибута, язык и пространство имен XML.
  • Грамматика должна содержать хотя бы один элемент правила. (Элемент правила содержит слово или фразу, которую может произнести пользователь).
  • Каждый элемент правила должен иметь уникальный атрибут id.

Мы видели базовую требуемую структуру для грамматики SRGS. Теперь нам нужно создать для него словарный запас. Словарь - это набор слов, который дает роботу какую-то значимую команду.

Например:«Перемещение вперед» или «Перемещение назад», здесь «Перемещение» предшествует «Вперед» и «Назад». Таким образом, по правилу, он должен стоять первым перед прямым и обратным. Таким образом, мы можем извлечь прямое и обратное направление в другое правило. См. Изображение ниже:

Что такое корневое правило ? Это начальный или корневой узел, который загружается, когда распознаватель речи загружает грамматику. Это необязательно. Вы можете проигнорировать это, но тогда вам нужно указать корневой узел программно.

Что такое корневой атрибут в теге грамматики? Атрибут Root определяет правило запуска распознавателя речи при загрузке грамматики. Если он не указан как атрибут, вам нужно указать его программно.

Эта статья предназначена для начинающих и поэтому не позволяет охватить сложные теги и атрибуты SRGS. Вы можете узнать больше о грамматике SRGS на сайтах MSDN и W3C.

Мы только что создали грамматику SRGS для нашего робота. Теперь посмотрим, как реализовать распознаватель речи для универсального приложения для Windows.

Инициализировать распознаватель речи и загрузить грамматику

SpeechRecognizer класс доступен в Windows.Media.SpeechRecognition пространство имен. Импортируйте пространство имен в свой файл кода. Перед инициализацией нам нужно создать файл XML Grammar в нашем проекте. Мы уже создали контент для файла грамматики в предыдущем разделе.

Примечание. Если «CompilationResult» не работает, возможно, проблема связана с интерфейсом микрофона. Проверьте соединение с микрофоном. Проверьте, обнаружен ли он в приложении IoT Core по умолчанию или нет.

Зарегистрируйтесь для событий распознавания речи и создайте обработчик

На последнем этапе мы запустили распознаватель речи и готовы слушать речь и анализировать ее. После успешного синтаксического анализа ContinuousRecognitionSession вызовет событие с именем ResultGenerated. Это событие предоставляет результат синтаксического анализа в виде аргументов события, которые могут быть обработаны для выполнения задачи на основе разговорной речи. Мы также можем прослушивать состояние распознавателя с помощью события StateChanged, чтобы сообщить говорящему о том, что распознаватель слушает.

Здесь MyRecognizerStateChanged - это функция, которая будет вызвана MyRecognizer при изменении состояния с одного на другое. Он предоставит ценную информацию о состоянии, когда MyRecognizer начал прослушивание, а когда прекратил прослушивание. После прекращения прослушивания MyRecognizer анализирует речь на соответствие предоставленной грамматике и в случае успеха вызывает событие ResultGenerated.

Примечание. Вам не нужно создавать функции «MyRecognizer_StateChanged» и «MyRecognizer_ResultGenerated» самостоятельно. Вместо этого Visual Studio позволяет создавать их автоматически. Вы можете создать их автоматически с помощью Visual Studio, дважды нажав справа от + =события.

Вы также можете зарегистрировать обработчики событий сразу после инициализации объекта SpeechRecognizer.

Мы почти закончили!

Шаг 2

Как гонять по разобранной речи?

В предыдущем разделе мы настроили пользовательскую грамматику и распознаватель речи для универсального приложения для Windows. Когда распознаватель речи успешно анализирует устную речь, он вызывает событие ResultGenerated. Это событие содержит проанализированный результат в качестве аргумента. Давайте посмотрим, как определить, что говорится, и что делать на основе разговорной речи:

Здесь аргумент args передается обработчику события SpeechRecognizer при успешном синтаксическом анализе речи. ‘Args.Result.Text’ имеет строковый тип. Он содержит устную речь в виде текста. Вы можете выполнить речевую задачу, используя условный блок.

Невозможно показать полный код для управления роботом. Я предоставил статический класс MotorDriver, который содержит различные функции для управления роботом. Этот класс управляет контактами Gpio для управления роботом. Полный исходный код приведен в конце проекта. Если вы новичок в Raspberry Pi 2 и Windows 10 IoT, перейдите по этой ссылке, чтобы начать работу.

Шаг 3

Обновить возможности устройства

Перед развертыванием универсального приложения для Windows на Raspberry Pi 2 нам необходимо настроить соответствующие возможности устройства, чтобы приложение запускалось с определенными правами доступа к оборудованию. В контексте этого приложения для использования нам потребуется внешнее устройство «Микрофон». Чтобы включить «Микрофон» в манифесте пакета:


Все сделано на стороне программного обеспечения. Пришло время подключить оборудование. Исходный код приведен в конце статьи.

Основная часть реализации распознавания речи сделана, и здесь невозможно объяснить каждую строку кода. Вместо этого исходный код хорошо прокомментирован. Попросите любой вопрос.

Шаг 4

Развернуть и зарегистрировать приложение как приложение для запуска

Роботу необходимо распознавать речевые команды при каждом включении. Для этого вам необходимо зарегистрировать свое приложение как приложение для запуска, чтобы при каждой загрузке Raspberry Pi 2 запускалось ваше приложение сразу после загрузки. Для этого вам сначала необходимо развернуть приложение на Raspberry Pi 2, а затем зарегистрировать его как запускаемое приложение.

Перед развертыванием рекомендуется изменить имя семейства пакетов приложения:


После изменения имени семейства пакетов разверните приложение на удаленном устройстве (Raspberry Pi 2).




Если вы не знаете, как правильно развернуть приложение на Raspberry Pi 2, перейдите по этой ссылке.

После успешного развертывания приложения вам необходимо зарегистрировать его как запускаемое приложение. Вы можете зарегистрировать свое приложение как запускаемое двумя способами:с помощью PowerShell или портала веб-управления Windows IoT Core. Я выберу второй способ. Откройте браузер и следуйте:



Возникли проблемы при регистрации в качестве запускаемого приложения? Обратитесь к этой статье.

После того, как вы успешно зарегистрируете свое приложение как приложение для запуска, перезагрузите Raspberry Pi 2 и посмотрите, запускается ли ваше приложение после загрузки или нет. Если нет, проверьте все шаги от развертывания до регистрации. После успешного запуска приложения пришло время подключиться к сети.

Схема

Аппаратные части состоят из шасси робота (с двигателями постоянного тока), Raspberry Pi 2 (с ядром Windows 10 IoT), батареи, датчика расстояния и т. д. Батарея двигателя (показанная на изображении слева «Батарея:9-12 В постоянного тока») напрямую подключается к приводу двигателя H-образного моста. Требуется отдельный блок питания для Raspberry Pi 2. USB PowerBank подходит для обеспечения достаточного питания Raspberry Pi 2. В отсутствие USB PowerBank или фильтрованного источника питания 5 В постоянного тока для включения Raspberry Pi и ультразвукового датчика расстояния требуется отдельная схема регулятора напряжения (с использованием 7805).

Если у вас нет USB PowerBank или источника питания с фильтром 5 В постоянного тока, вы можете использовать аккумулятор двигателя (показан на изображении выше слева - оранжевый цвет, аккумулятор:9–12 В постоянного тока) для включения Raspberry Pi 2. Схема конфигурации представлена ​​на конец статьи (названный «Схема:аккумуляторная батарея»).

Почему резисторы с ультразвуковым датчиком расстояния?

Ультразвуковой датчик расстояния работает от 5 В, а Raspberry Pi 2 работает от 3,3 В. Мы не можем напрямую подключить вывод Echo датчика напрямую к выводу Raspberry Pi, поскольку он будет иметь выход 5 В. Он сожжет Raspberry Pi. Таким образом, нам нужно понизить выходное напряжение датчика до 3,3 В перед отправкой на Raspberry Pi. Напряжение на датчике может быть понижено с помощью схемы делителя напряжения. Таким образом, Vout можно рассчитать как:

R1 =1000 Ом R2 =2000 Ом Vin =5 В (вывод эха датчика) Vout =5 * (2000 / (1000 + 2000)) =3,3 В (на Raspberry Pi 2)

ВНИМАНИЕ! Не подключайте вывод Echo ультразвукового датчика расстояния напрямую к контакту GPIO Raspberry Pi. Это может сжечь Raspberry Pi. Вместо этого используйте преобразователь логического уровня или соответствующий делитель напряжения.

Окончательная сборка




Известные проблемы

Распознавание речи не работает (сборка 10586)

Распознавание и синтез речи не будут работать ни на одном устройстве IoT (RPi2, MinnowBoard MAX и Dragonboard 410c), если вы установили Windows IoT build 10586.

Решение: На данный момент нет действительного решения. Я надеюсь, что команда Windows IoT исправит эту ошибку в следующей сборке. Тем не менее, если вы хотите управлять распознаванием речи, вернитесь к старой версии 10240, и она будет работать как шарм.

Проблема с микрофоном

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

Решение: (Вариант 1):Приобрести качественный микрофон. Иногда может случиться так, что даже после качественного микрофона он не распознает правильно. В таком случае нужен громкий голос. (Вариант 2):Беспроводной микрофон был бы отличным. Вы можете управлять роботом даже с большого расстояния, не беспокоясь о внешнем шуме. Вы можете купить один из них или сделать свой, просмотрев это видео.

Задержка обработки распознавателя

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

Предположим, у нас есть высокоскоростной робот с машиной, который следует нашей речевой команде. Предположим, машина будет следовать нашей речевой команде через 600–2000 мс (из-за задержки обработки). Поэтому, если мы прикажем остановиться, автомобиль через некоторое время проанализирует сигнал, что может привести к катастрофическому событию.

Решение: На данный момент (когда писалась эта статья) подходящего решения не существует. Надеюсь, в будущем это разрешится. 🙂

Разница в произношении

Люди из разных регионов используют разное произношение для одного слова. Распознаватель речи не может анализировать речь, если произношение произносимого слова отличается от запрограммированного.

Решение: Вы можете указать язык и регион в файле грамматики SRGS XML, чтобы проанализировать произношение для конкретного региона.

Допустим, мы хотим разобрать английский (Великобритания), нам нужно установить атрибут грамматического тега xml:lang =”en-GB”. Здесь код страны ISO для Великобритании - GB. Таким образом, «en-GB» указывает распознавателю речи анализировать речь на основе английского (британского) произношения. Другой пример, для канадского французского, используйте «fr-CA».

Шум окружающей среды

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

Решение: Возможно, такой шум невозможно устранить или устранить. При нынешнем уровне технологий мы можем только надеяться на использование такой технологии в зоне, свободной от шума. Другое возможное решение - использовать интеллектуальный микрофон, способный уменьшать шум (так называемый микрофон с шумоподавлением).

USB-микрофон / звуковая карта USB не распознает

С выпуском сборки 10531 Windows IoT Core поддерживает универсальные аудиоустройства. Для большинства USB-микрофонов или USB-звуковых карт требуется универсальный драйвер USB. Если ваше устройство использует универсальный драйвер, он будет работать.

Успешно работает с моим RPi2 (Amazin.in)

Решение: Попробуйте другой USB-микрофон или USB-звуковую карту.

В моем случае я купил звуковую карту USB. Это сработало отлично. Я подключил микрофон к микрофонному разъему на звуковой карте. Вы можете купить USB SoundCard на Amazon.com или в других интернет-магазинах. В Индии можно купить звуковую карту USB на Amazon.in

Будущие улучшения

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

Вы заметили?

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

Удачи 🙂

Источник: Робот с речевым управлением

Производственный процесс

  1. Windows 10 IoT Core - считывание пульса
  2. Windows IoT:дверь распознавания лиц
  3. Кнопка AWS IoT с управлением движением
  4. Windows 10 IoT Core на Raspberry Pi 2 - данные датчика Adafruit
  5. Windows 10 IoT Core и SHT15
  6. Windows 10 IoT Core для Raspberry Pi 3, модель B +
  7. Робот Raspberry Pi, управляемый через Bluetooth
  8. Робот, управляемый жестами, использующий Raspberry Pi
  9. РОБОТ МАЛИНЫ PI WIFI, УПРАВЛЯЕМЫЙ С СМАРТ-ТЕЛЕФОНА ANDROID
  10. GoPiGo v2 с Windows IoT