на печать лифт (1189714), страница 7
Текст из файла (страница 7)
Рисунок 4.1 – Алгоритм работы системы управления с голосовым интерфейсом
4.3 Интерфейс управления голосовыми командами для обучения модуля распознавания речи.
Для корректной работы модуля распознавания речи в системе управления необходимо обучить его голосовым командам. Для конфигурации модуля с помощью среды разработки ArduinoIDE требуется установить дополнительную библиотекуVoiceRecognitionV3[5]. Далее следует открыть проект vr_simple_train, поставляемый в комплекте с библиотекой VoiceRecognitionV3 (Файл — Примеры — VoiceReocgnitionV3 — vr_simple_train). Нужно загрузить этот скетч в микроконтроллерArduino и открыть монитор порта (Сервис — Монитор порта). Это и есть интерфейс управления голосовыми командами для обучения модуля распознавания устной речи, с помощью которого можно записывать, удалять и изменять базу/словарь голосовых команд в памяти устройства (рисунок 4.2).
Рисунок 4.2 – Интерфейс управления голосовыми командами для обучения модуля распознавания речи
В настройках нужно установить значение скорости обмена данными (baudrate) 115200 и отправку по новой строке, как показано на рисунке 4.3. Далее требуется ввести в верхнее поле команду settings и нажать кнопку "Послать". Таким образом, модуль в ответ отправит сообщение со своими текущими настройками. Если не появилось сообщения о том, что модуль не найден и в текстовом поле монитора были определены параметры текущей конфигурации это значит, что соединение с устройством по COM-порту установлено и теперь можно приступать непосредственно к обучению модуля голосовым командам. Обучение командам производится при помощи функция sigtrain. Функция вводится в текстовое поле монитора последовательного порта, если ввести и отправить команду sigtrain 0 first и нажать на кнопку "Послать", то будет активирован режим записи команды с сигнатурой «first» в ячейку памяти модуля 0. Сигнатура это уникальный ярлык (имя), который описывает команду, т. е. first означает первый этаж для нашей системы. Когда в окне монитора появится сообщение "Speaknow", то следует проговорить в микрофон голосовую команду "Первый". После появления сообщения "Speakagain", требуется проговорить команду еще раз. Если оба слова совпали, то модуль выдает сообщение Success: 1, это означает, что команда успешно распознана и записана. Если модуль не смог сопоставить две команды (например, было шумно в помещении или команды были разными), то модуль выдаст сообщение о неудачной попытке записи "Cann'tmatch", после чего предложит начать процесс записи команды заново до тех пор, пока не будут предоставлены верные данные. В процессе записи команд время для произношения сигнализируется красным светодиодом, а время распознавания голосовой команда сигнализируется миганием желтого светодиода на плате модуля. В результате успешного обучения и записи сигнатур в памяти устройства появится сообщение Record 0 Trained (рисунок 4.3). Этот процесс выполняется и для других команд (Второй этаж, Третий этаж и т. д.), но при этом используются другие ячейки памяти (1 и 2), например нужно ввести в командную строку монитора COM-порта функцию sigtrain 1 second и повторить процедуру записи для других сигнатур.
Рисунок 4.3 – Настройки модуля и обучение командам
4.4 Разработка программы обработки голосовых команд
После того как модуль распознавания устной речи был обучен голосовым командам его можно использовать в системе управления совместно микропроцессорной платформой Ардуино. Для этого требуется загрузить в память микроконтроллера новый скетч, выполняющий непосредственно обработку голосовых команд пользователя. Программа состоит из нескольких основных частей, однократно запускаемых функций настройки микроконтроллера и циклически выполняемого кода. На рисунке 4.4 представлен фрагмент кода, выполняющий подключение дополнительных пользовательских библиотек c помощью функции #include, настройку цифровых выводов микроконтроллера 2 и 3 на работу в режиме передачи информации по протоколу RS-232 посредством команды VR myVR(2,3), а также первичную конфигурацию некоторых программных констант и переменных.
Рисунок 4.4 – Фрагмент программного кода
Далее в программе однократно запускается функция настройки void setup и выполняется проверка текущего состояния модуля распознавания голоса. Микропроцессор через уже настроенный последовательный порт c использованием команды Serial.println отправляет тестовый запрос для получения в ответ диагностической информации. Если при взаимодействии устройств по протоколу RS-232 появились проблемы и подключение не было установлено, то программа сформирует соответствующее сообщение и отправит его в COM-порт (просмотреть сообщение можно открыв монитор порта). Эти действия выполняются командами Serial.println("NotfindVoiceRecognitionModule.") и Serial.println("PleasecheckconnectionandrestartArduino.") – модуль распознавания голоса не найден или не обнаружен и пожалуйста проверьте соединение и перезапустите микроконтроллер. Если подключение с голосовым модулем было выполнено успешно, то программа выполнит загрузку голосовых команд и отправит соответствующее сообщение в последовательный порт с помощью команд (myVR.load((uint8_t)firstRecord) >= 0){ Serial.println("firstRecordloaded");}. Данная операция повторяется для всех семи сигнатур.
Рисунок 4.5 – Запуск функции настройки voidsetup
После выполнения настроек всех параметров системы запускается бесконечный цикл (рабочая часть программы). Цикл voidloop содержит два цикла for. В первом цикле реализуется следующая программная конструкция: если микропроцессор получает команду по последовательному порту (от панели управления/планшетного компьютера), то выполняется одна из структур case. Эта структура позволяет управлять процессом выполнения программы, программист может задавать альтернативный код, выполняемый при разных условиях. Если найден оператор case, значение которого равно значению переменной полученной через последовательный порт, то выполняется программный код в этом операторе. Для лучшей структуризации и разделения имен переменных разных циклов операторам case присвоены латинские символы соответствующие номеру этажа заданного пользователем (например, case ‘а’ выполняется, когда пользователь выбрал первый этаж). При этом латинский символ ‘а’ является внутренней программной переменной, которая определяется программой как команда 0 с сигнатурой first. Ключевое слово break является командой выхода из оператора case. После выполнения запроса пользователя процесс повторяется заново.
Рисунок 4.6 – Запуск первого цикла for с конструкцией case.
В случае, когда команда не была введена пользователем вручную во время выполнения первого цикла с фиксированным количеством итераций, запускается второй цикл for, выполняющий обработку голосовых команд. Если голосовая команда была распознана модулем, то микроконтроллер получит соответствующее сообщение через COM-порт. После определения сигнатуры команды программой будет выполнено ее сопоставление с case-оператором и запуск на исполнение соответствующего фрагмента программного кода. По завершении обработки голосовой команды первый цикл вновь получит процессорное время. Если голосовая команда не была распознана, также доступ к ресурсам микроконтроллера вновь получит первый цикл for. Таким образом, часть кода выполняющая обработку текстовых команд является приоритетной и выполнятся первой. Однако для стабильной работы голосового интерфейса число количества итераций второго цикла for задается значительно больше, что обусловлено условием корректной работы со звуковым сигналом.
Рисунок 4.7 – Запуск второго цикла for,
обработка голосовых команд
В обоих циклах в результате определения номера команды/этажа программой формируется информационное сообщение, посылаемое через цифровой интерфейс на планшетный компьютер, а также формируются управляющие сигналы для платы центрального контроллера системы управления.
Полный код программы представлен в приложении А.
4.5 Разработка и описание приложения с графическим интерфейсом
Для автоматизированной системы управления пассажирским лифтом с голосовым интерфейсом может быть использована панель управления, реализованная на планшетном компьютере с графическим интерфейсом, выполненным в инструментальной среде разработке LabVIEW.
LabVIEW (англ. LaboratoryVirtualInstrumentationEngineeringWorkbench) — это кроссплатформенная графическая среда разработки приложений и платформа для выполнения программ, созданных на графическом языке программирования «G» фирмы NationalInstruments(США). LabVIEW используется в системах сбора и обработки данных, а также для управления техническими объектами и технологическими процессами. Идеологически LabVIEW очень близка к SCADA-системам, но в отличие от них в большей степени ориентирована на решение задач не столько в области АСУ ТП, сколько в области АСНИ[7].
Графический язык программирования «G», используемый в LabVIEW, основан на архитектуре потоков данных. Последовательность выполнения операторов в таких языках определяется не порядком их следования (как в императивных языках программирования), а наличием данных на входах этих операторов. Операторы, не связанные по данным, выполняются параллельно в произвольном порядке.
Программа LabVIEW называется и является виртуальным прибором (англ. VirtualInstrument) и состоит из двух частей:
-
блочной диаграммы, описывающей логику работы виртуального прибора;
-
лицевой панели, описывающей внешний интерфейс виртуального прибора.
Виртуальные приборы могут использоваться в качестве составных частей для построения других виртуальных приборов.
Лицевая панель виртуального прибора содержит средства ввода-вывода: кнопки, переключатели, светодиоды, верньеры, шкалы, информационные табло и т. п., которые используются для управления виртуальным прибором, а также другими виртуальными приборами для обмена данными.
Блочная диаграмма содержит функциональные узлы, являющиеся источниками, приемниками и средствами обработки данных. Также компонентами блочной диаграммы являются терминалы («задние контакты» объектов лицевой панели) и управляющие структуры (являющиеся аналогами таких элементов текстовых языков программирования, как условный оператор «IF», операторы цикла «FOR» и «WHILE» и т. п.). Функциональные узлы и терминалы объединены в единую схему линиями связей.
На рисунке 4.8 представлена лицевая панель графического интерфейса.
Графический интерфейс содержит визуальный образ ассистента, который может быть задан любым анимированным изображением, используемые файлы анимации должны иметь стандартное расширение gif. Также на лицевой панели отображаются индикаторы «Состояние системы», «Остановка лифта по требованию» и «Вызов помощи». При вводе голосовых команд и сообщении номера этажа ассистенту на экране отображается ответ ассистента. Ответ показывает какую команду ассистент распознал и будет выполнять. Для задания номера этажа вручную без использования голосового интерфейса можно воспользоваться текстовым полем для ввода команды. Когда ассистент получит команду от пользователя, кроме индикации ответа на экране, также системой будет воспроизведено звуковое сообщение, при этом меняется визуальный эффект анимации ассистента (например, на «произношение»). Звуковые сообщения воспроизводятся программой из раннее записанных файлов. Запись аудио файлов выполняется с помощью технологии машинного чтения текста. Для этого использовался сервис translate.google.ru. Текст ответа записывался на странице переводчика в браузере и с помощью инструмента «прослушать» воспроизводился на компьютере (динамиками). Средствами LabVIEW производилась запись звуковых сообщений и составлялась база аудиофайлов с ответами.
Рисунок 4.8 – Графический интерфейс панели управления в LabVIEW.
Приложение разработанное в LabVIEW работает следующим образом: сначала выполняется конфигурация параметров последовательного порта посредством функции VISASerial и загрузка аудиофайлов с помощью подприбора ReadFromMeasurementFile, после чего устанавливается соединение по протоколу RS-232 с микропроцессорной платформой Ардуино через USB. Далее запускается цикл whileloop (по условию), в котором производится чтение/запись команд из/в COM-порт с помощью функций VISARead/Write. Воспроизведение звукового сообщения выполняется посредством Express-VIPlayWaveform. Определение поведения ассистента выполняется с помощью структур case для каждой команды. Блок диаграмма программы представлена на рисунке 4.9.
Рисунок 4.9 – Блок-диаграмма программы LabVIEW.
На лабораторном уровне разработан прототип функционирующей системы управления с голосовым интерфейсом взаимодействующий с программным ассистент выполняемым на планшетном компьютере, рисунок 4.10