Комплекс голосового управления мобильным телефоном divo
Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Топорин Андрей Александрович
Статья посвящена созданию подсистемы голосового управления интеллектуальной системы управления движением автономного мобильного робота . В работе рассматриваются известные решения в области построения подобных подсистем. Предлагается структура подсистемы голосового управления на базе системы распознавания речи CMU Sphinx . В заключении представлено исследование подсистемы голосового управления , заключающееся в определении точности распознавания команд.
Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Топорин Андрей Александрович
Эргономичный голосовой интерфейс управления антропоморфным роботом Взаимодействие с устройствами интернета вещей с использованием голосового интерфейса Алгоритм пофонемного распознавания устной речи на основе метода нечеткого фонетического кодирования-декодирования слов Метод повышения эффективности голосового управления на основе комплементарной множественной декомпозиции на эмпирические моды Исследование оптимального алгоритма обработки речевых сигналов системы голосового управления i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.VOICE CONTROL SUBSYSTEM OF INTELLIGENT MOBILE ROBOT CONTROL SYSTEM
The article is devoted to the creation of a voice control subsystem for an intelligent motion control system of an autonomous mobile robot. The article discusses well-known solutions in the field of building such subsystems. The structure of the voice control subsystem based on the CMU Sphinx speech recognition system is proposed. In conclusion, a study of the voice control subsystem is presented, which consists in determining the accuracy of command recognition.
Текст научной работы на тему «Подсистема голосового управления системы интеллектуального управления мобильным роботом»
Топорин Андрей Александрович - магистр, кафедра робототехники и мехатроники, Московский государственный технологический университет «СТАНКИН», г. Москва
Аннотация: статья посвящена созданию подсистемы голосового управления интеллектуальной системы управления движением автономного мобильного робота. В работе рассматриваются известные решения в области построения подобных подсистем. Предлагается структура подсистемы голосового управления на базе системы распознавания речи CMU Sphinx. В заключении представлено исследование подсистемы голосового управления, заключающееся в определении точности распознавания команд.
Ключевые слова: мобильные роботы, распознавание речи, CMU Sphinx, голосовое управление.
VOICE CONTROL SUBSYSTEM OF INTELLIGENT MOBILE ROBOT CONTROL SYSTEM Toporin A.A.
Abstract: the article is devoted to the creation of a voice control subsystem for an intelligent motion control system of an autonomous mobile robot. The article discusses well-known solutions in the field of building such subsystems. The structure of the voice control subsystem based on the CMU Sphinx speech recognition system is proposed. In conclusion, a study of the voice control subsystem is presented, which consists in determining the accuracy of command recognition.
Keywords: mobile robots, speech recognition, CMU Sphinx, voice control.
Введение. В настоящее время существует проблема, связанная с упрощением обмена информацией между роботом и человеком-оператором. Одним из решений данной проблемы можно считать создание системы речевого управления. Это позволит людям, не имеющим возможность использовать традиционные средства интерфейса взаимодействовать с роботом, а также снизит утомляемость при работе и сделает ее более увлекательной.
Существуют различные способы создания систем речевого управления. Основные различия заключаются в параметрах их функционирования, таких как: работа без или с доступом к сети Интернет, дикторозависимость, автономность, количество распознаваемых слов и т.д. Также важным фактором является стоимость системы распознавания.
Рассмотрим основные системы распознавания речи, которые доступны на рынке: 1) Voice Recognition Module (VRM) v3.1 является функционально законченным (автономным) устройством, выполняющим функции распознавания и обработки
речи. Это компактная и простая в использовании плата для распознавания речи (рисунок 1), использующая метод динамического программирования. Для начала работы с данным устройством, требуется сначала обучить его, то есть записать набор команд. Плата позволяет хранить до 80 голосовых команд, длительностью 1500 миллисекунд [1]. Недостатком данного модуля является его ограниченность в размере словаря. В каждый момент времени возможно использование только семи команд из восьмидесяти.
Рис. 1. Плата распознавания VRM v3.1
2) Другим решением для создания системы голосового управления является использование программных систем распознавания речи. Их главное отличие от автономных состоит в том, что данные системы являются программным обеспечением, а не отдельным, законченным устройством. В качестве примера можно привести технологию распознавания речи Yandex Speech Kit - это комплекс речевых технологий Яндекса, который включает распознавание и синтез речи, голосовую активацию и выделение смысловых объектов в произносимом тексте [2].
Работа данной системы аналогична работе автономных систем распознавания, однако, она имеет несколько недостатков. Во-первых, использование подобного программного обеспечения требует постоянного или частичного подключения к сети Интернет, и в случае перебоя или отключения сети, весь комплекс может перестать функционировать. Во-вторых, за использование данной технологии, разработчик требует внесения абонентской платы. Это в свою очередь повышает расходы на обслуживание робота. В-третьих, разработчик устанавливает ограничения на количество запросов в сутки.
3) Еще одним программным продуктом является CMUSphinx - открытый бесплатный инструментарий для создания систем распознавания речи [3]. CMU Sphinx сейчас является крупнейшим проектом по распознаванию человеческой речи. К основным преимуществам данного проекта можно отнести его работу без доступа к сети Интернет, дикторонезависимость, возможность создания своего собственного словаря, а также грамматики (последовательность слов, образующих необходимые команды). Недостатком является сложность установки и русификация акустической модели. Также важным фактором, влияющим на качество распознавания, является правильность написания транскрипции слов.
Разработка и исследование подсистемы голосового управления. В качестве инструмента распознавания было принято решение использовать CMUSphinx, обладающего всеми необходимыми для данной работы характеристиками. Для создания системы голосового управления в CMUSphinx предусмотрен более «легковесный» движок распознавания речи PocketSphinx, который можно использовать, например, на одноплатном компьютере Raspberry Pi.
Разработка подсистемы голосового управления начинается с создания словаря распознавания. Чтобы понять, какие слова необходимо добавлять в словарь, нужно проанализировать работу мобильного робота. Робот способен работать в двух режимах: ручной и автоматический. Автоматический режим подразумевает движение
робота в неизвестной среде с препятствиями к различным целевым точкам. Ручной режим позволяет оператору вручную управлять движением мобильного робота.
Разработка словаря начинается с создания файла с расширением *txt с перечислением всех возможных слов, которые могут встречаться в подаваемых командах. Наш словарь состоит из 44 слов. Пример слов, составляющих словарь:
Так как движок PocketSphinx является зарубежной разработкой, то процесс распознавания происходит через латинскую транскрипцию. Для работы с русским словарем необходимо обработать созданный файл и каждому слову поставить в соответствие слово, записанное латиницей. Это можно сделать вручную по определенным правилам перевода или использовать готовые скрипты, которые преобразуют созданный нами словарь в словарь, подходящий для работы с движком распознавания. Пример словаря после обработки представлен ниже:
- Стоять s t o ja tt;
- Автоматический a v t o m a tt ii ch je s k i j;
- Режим rr e zh ii m;
- Включить v k ll u ch ii tt.
В переведенном слове двойная гласная буква обозначает ударный звук, двойная согласная - мягкую согласную. Остальные буквы образуются по правилам перевода русских букв в латиницу.
Для того чтобы сделать процесс распознавания структурированным, опишем как должны строиться команды (каков должен быть порядок слов в ней). Это необходимо для того, чтобы увеличить процент удачно распознанных фраз. Таким образом, распознавание будет происходить в строгой определенной заранее последовательности, а все, что будет произноситься не по заданному порядку, будет откинуто.
Это можно сделать путем создания файла грамматики JSpeech Grammar [4], в котором описываются все возможные команды, которые могут быть сказаны оператором. Пример файла для данной работы представлен на рисунке 2.
sJSGF Vl.O; grammar PI;
<keyword> = робот | линк;
<stop> = стоп | остановись | стоять | стой;
<onauto> = [включить | включи] автоматический режим | двигайся сам;
<опшап> = [включить | включи] ручной режим | беру управление;
<offauto> = (отключить | выключить | выключи | отключи) автоматический режим;
<offmati> = (отключить | выключить | выключи | отключи) ручной режим;
<test_word s> = (отключить | выключи | включи);
<forwaid> = [двигайся | поезжай] вперед;
<left> = [двигайся | поезжай] налево;
<rleft> = поверни налево;
<right> = [двигайся | поезжай] направо; <rright> = поверни направо; <back> = [двигайся | поезжай] назад; <little_rotate> = [чуть] (левее | правее);
<taiset> = (поезжай | двигайся) (к точке | по пути) (а | 6 | ц) | точка (а | б | ц) | цель (а |б|ц);
<exit> = (завершить | заверши) (работу | скрипт);
<action> = (<test_words> | <keyword> | <stop> | <onauto> | <onman> | <offauto> | <offmati> | <fonvard> | <left> | <ileft> | <nght> | <mght> | <utum> | <back> | <little_rotate> | <taiget> | <exit> | ещё) | <stop>;
Рис. 2. Пример файла грамматики
Круглые скобки говорят о том, что слово обязательно в произносимой фразе, квадратные - что, слово не обязательно для произношения, а знак вертикальной черты - возможность выбора между элементами в скобках. Основной строкой в данном файле является <action>, которая собирает все возможные варианты фраз в одном потоке. Набор ключевых слов, которые оператор должен произносить перед каждой командой с целью улучшения точности распознавания, записан в блоке <keyword>. В результате было получено 64 команды.
Исследование разработанной подсистемы заключалось в определении точности распознавания. Для этого, последовательно проговаривалась каждая команда из полного списка и в случае успешного распознавания команда помечалась как правильно распознанная. Далее вычислялось отношение числа точно распознанных команд к общему числу команд в системе и умножалось на 100%. Всего было произведено 5 циклов.
Команды в систему распознавания поступали через микрофон, подключенный к одноплатному компьютеру Raspberry Pi через интерфейс USB. При этом оператор находился в непосредственной близости от микрофона.
Результат исследования приведен в таблице 1.
Таблица 1. Результат исследования подсистемы голосового управления
Результат, % 85,94 89,06 84,38 85,94 82,81
Основные результаты и выводы. В результате работы была разработана подсистема голосового управления на базе системы распознавания CMUSphinx. Был описан процесс создания словаря, его преобразование в форму, необходимую для работы алгоритмов распознавания, а также рассмотрен процесс создания файла грамматики, позволяющей оператору произносить только заранее записанные команды.
Исследование разработанной подсистемы показало, что CMUSphinx может быть использован как средство для создания точных систем голосового управления. Средняя точность распознавания по 5 экспериментам составила 85,63%, что можно считать хорошим результатом. Можно попробовать улучшить показатель, изменив настройки алгоритмов распознавания CMUSphinx, скорректировав транскрипцию русских слов в словаре, а также используя микрофоны с шумоподавлением.
В этой статье я подробно расскажу и покажу, как правильно и быстро прикрутить распознавание русской речи на движке Pocketsphinx (для iOS порт OpenEars) на реальном Hello World примере управления домашней техникой.
Почему именно домашней техникой? Да потому что благодаря такому примеру можно оценить ту скорость и точность, которой можно добиться при использовании полностью локального распознавания речи без серверов типа Google ASR или Яндекс SpeechKit.
К статье я также прилагаю все исходники программы и саму сборку под Android.
С чего вдруг?
Наткнувшись недавно на статью о прикручивании Яндекс SpeechKit-а к iOS приложению, я задал вопрос автору, почему для своей программы он захотел использовать именно серверное распознавание речи (по моему мнению, это было излишним и приводило к некоторым проблемам). На что получил встречный вопрос о том, не мог бы я поподробней описать применение альтернативных способов для проектов, где нет необходимости распознавать что угодно, а словарь состоит из конечного набора слов. Да еще и с примером практического применения…
Зачем нам что-то еще кроме Яндекса и Google?
- Скорость — мы не зависим от серверов и поэтому не зависим от их доступности, пропускной способности и т.п. факторов
- Точность — наш движок работает только с тем словарем, который интересует наше приложение, повышая тем самым качество распознавания
- Стоимость — нам не придется платить за каждый запрос к серверу
- Голосовая активация — как дополнительный бонус к первым пунктам — мы можем постоянно «слушать эфир», не тратя при этом свой трафик и не нагружая сервера
Так Android же умеет распознавать речь без интернета!
Да-да… Только на JellyBean. И только с полуметра, не более. И это распознавание — это та же диктовка, только с использованием гораздо меньшей модели. Так что управлять ею и настраивать ее мы тоже не можем. И что она вернет нам в следующий раз — неизвестно. Хотя для СМС-ок в самый раз!
Что будем делать?
Будем реализовывать голосовой пульт управления домашней техникой, который будет работать точно и быстро, с нескольких метров и даже на дешевом тормозном хламе очень недорогих Android смартфонах, планшетах и часах.
Логика будет простой, но очень практичной. Активируем микрофон и произносим одно или несколько названий устройств. Приложение их распознает и включает-выключает их в зависимости от текущего состояния. Либо получает от них состояние и произносит его приятным женским голосом. Например, текущая температура в комнате.
Микрофон будем активировать или голосом, или нажатием на иконку микрофона, или даже просто положив руку на экран. Экран в свою очередь может быть и полностью выключенным.
Утром, не открывая глаз, хлопнули ладонью по экрану смартфона на тумбочке и командуем «Доброе утро!» — запускается скрипт, включается и жужжит кофеварка, раздается приятная музыка, раздвигаются шторы.Повесим по дешевому (тысячи по 2, не более) смартфону в каждой комнате на стенке. Заходим домой после работы и командуем в пустоту «Умный дом! Свет, телевизор!» — что происходит дальше, думаю, говорить не надо.
На видео показано, что получилось в итоге. Далее же речь пойдет о технической реализации с выдержками из реально работающего кода и немного теории.
Что такое Pocketsphinx
Pocketsphinx — это движок распознавания с открытым исходным кодом под Android. У него также имеется порт под iOS, WindowsPhone, и даже JavaScript.
Он позволит нам запустить распознавание речи прямо на устройстве и при этом настроить его именно под наши задачи. Также он предлагает функцию голосовой активации «из коробки» (см далее).
Мы сможем «скормить» движку распознавания русскую языковую модель (вы можете найти ее в исходниках) и грамматику пользовательских запросов. Это именно то, что будет распознавать наше приложение. Ничего другого оно распознать не сможет. А следовательно, практически никогда не выдаст что-то, чего мы не ожидаем.
Формат грамматики JSGF используется Pocketsphinx, как и многими другими подобными проектами. В нем можно с достаточной гибкостью описать те варианты фраз, которые будет произносить пользователь. В нашем случае грамматика будет строиться из названий устройств, которые есть в нашей сети, примерно так:
Pocketsphinx также может работать по статистической модели языка, что позволяет распознавать спонтанную речь, не описываемую контекстно-свободной грамматикой. Но для нашей задачи это как раз не нужно. Наша грамматика будет состоять только из названий устройств. После процесса распознавания Pocketsphinx вернет нам обычную строчку текста, где устройства будут идти один за другим.
Знак плюса обозначает, что пользователь может назвать не одно, а несколько устройств подряд.
Приложение получает список устройств от контроллера умного дома (см далее) и формирует такую грамматику в классе Grammar.
Транскрипции
Грамматика описывает то, что может говорить пользователь. Для того, чтобы Pocketsphinx знал, как он это будет произносить, необходимо для каждого слова из грамматики написать, как оно звучит в соответствующей языковой модели. То есть транскрипцию каждого слова. Это называется словарь.
Транскрипции описываются с помощью специального синтаксиса. Например:
В принципе, ничего сложного. Двойная гласная в транскрипции обозначает ударение. Двойная согласная — мягкую согласную, за которой идет гласная. Все возможные комбинации для всех звуков русского языка можно найти в самой языковой модели.
Понятно, что заранее описать все транскрипции в нашем приложении мы не можем, потому что мы не знаем заранее тех названий, которые пользователь даст своим устройствам. Поэтому мы будем гененрировать «на лету» такие транскрипции по некоторым правилам русской фонетики. Для этого можно реализовать вот такой класс PhonMapper, который сможет получать на вход строчку и генерировать для нее правильную транскрипцию.
Голосовая активация
Это возможность движка распознавания речи все время «слушать эфир» с целью реакции на заранее заданную фразу (или фразы). При этом все другие звуки и речь будут отбрасываться. Это не то же самое, что описать грамматику и просто включить микрофон. Приводить здесь теорию этой задачи и механику того, как это работает, я не буду. Скажу лишь только, что недавно программисты, работающие над Pocketsphinx, реализовали такую функцию, и теперь она доступна «из коробки» в API.
Одно стоит упомянуть обязательно. Для активационной фразы нужно не только указать транскрипцию, но и подобрать подходящее значение порога чувствительности. Слишком маленькое значение приведет к множеству ложных срабатываний (это когда вы не говорили активационную фразу, а система ее распознает). А слишком высокое — к невосприимчивости. Поэтому данная настройка имеет особую важность. Примерный диапазон значений — от 1e-1 до 1e-40 в зависимости от активационной фразы.
Эта задача специфична именно для нашего проекта и напрямую к распознаванию не имеет отношения. Код можно увидеть прямо в главной активности.Она реализует SensorEventListener и в момент приближения (значение сенсора меньше максимального) включает таймер, проверяя после некоторой задержки, перекрыт ли до сих пор датчик. Это сделано для исключения ложных срабатываний.
Когда датчик снова не перекрыт, мы останавливаем распознавание, получая результат (см описание далее).
Запускаем распознование
Pocketsphinx предоставляет удобный API для конфигурирования и запуска процесса распознавания. Это классы SppechRecognizer и SpeechRecognizerSetup.
Вот как выглядит конфигурация и запуск распознавания:
Здесь мы сперва копируем все необходимые файлы на диск (Pocketpshinx требует наличия на диске аккустической модели, грамматики и словаря с транскрипциями). Затем конфигурируется сам движок распознавания. Указываются пути к файлам модели и словаря, а также некоторые параметры (порог чувствительности для активационной фразы). Далее конфигурируется путь к файлу с грамматикой, а также активационная фраза.
Как видно из этого кода, один движок конфигурируется сразу и для грамматики, и для распознавания активационной фразы. Зачем так делается? Для того, чтобы мы могли быстро переключаться между тем, что в данный момент нужно распознавать. Вот как выглядит запуск процесса распознавания активационной фразы:
А вот так — распозанвание речи по заданной грамматике:
Второй аргумент (необязательный) — количество миллисекунд, после которого распознавание будет автоматически завершаться, если никто ничего не говорит.
Как видите, можно использовать только один движок для решения обеих задач.
Как получить результат распознавания
- onBeginningOfSpeech — движок услышал какой-то звук, может быть это речь (а может быть и нет)
- onEndOfSpeech — звук закончился
- onPartialResult — есть промежуточные результаты распознавания. Для активационной фразы это значит, что она сработала. Аргумент Hypothesis содержит данные о распознавании (строка и score)
- onResult — конечный результат распознавания. Этот метод будет вызыван после вызова метода stop у SpeechRecognizer. Аргумент Hypothesis содержит данные о распознавании (строка и score)
Реализуя тем или иным способом методы onPartialResult и onResult, можно изменять логику распознавания и получать окончательный результат. Вот как это сделано в случае с нашим приложением:
Когда мы получаем событие onEndOfSpeech, и если при этом мы распознаем команду для выполнения, то необходимо остановить распознавание, после чего сразу будет вызван onResult.
В onResult нужно проверить, что только что было распознано. Если это команда, то нужно запустить ее на выполнение и переключить движок на распознавание активационной фразы.
В onPartialResult нас интересует только распознавание активационной фразы. Если мы его обнаруживаем, то сразу запускаем процесс распознавания команды. Вот как он выглядит:
Здесь мы сперва играем небольшой сигнал для оповещения пользователя, что мы его услышали и готовы к его команде. На это время микрофон долже быть выключен. Поэтому мы запускаем распознавание после небольшого таймаута (чуть больше, чем длительность сигнала, чтобы не услышать его эха). Также запускается поток, который остановит распознавание принудительно, если пользователь говорит слишком долго. В данном случае это 3 секунды.
Как превратить распознанную строку в команды
Как синтезировать речь
Синтез речи — это операция, обратная распознаванию. Здесь наоборот — нужно превратить строку текста в речь, чтобы ее услышал пользователь.
В случае с термостатом мы должны заставить наше Android устройство произнести текущую температуру. С помощью API TextToSpeech это сделать довольно просто (спасибо гуглу за прекрасный женский TTS для русского языка):
Скажу наверное банальность, но перед процессом синтеза нужно обязательно отключить распознавание. На некоторых устройствах (например, все самсунги) вообще невозсожно одновременно и слушать микрофон, и что-то синтезировать.
Окончание синтеза речи (то есть окончание процесса говорения текста синтезатором) можно отследить в слушателе:
В нем мы просто проверяем, нет ли еще чего-то в очереди на синтез, и включаем распозанвание активационной фразы, если ничего больше нет.
И это все?
Да! Как видите, быстро и качественно распознать речь прямо на устройстве совсем несложно, благодаря наличию таких замечательных проектов, как Pocketsphinx. Он предоставляет очень удобный API, который можно использовать в решении задач, связанных с распознаванием голосовых команд.
В данном примере мы прикрутили распознавание к вполне кокрентной задаче — голосовому управлению устройствами умного дома. За счет локального распознавания мы добились очень высокой скорости работы и минимизировали ошибки.
Понятно, что тот же код можно использовать и для других задач, связанных с голосом. Это не обязательно должен быть именно умный дом.
Все исходники, а также саму сборку приложения вы можете найти в репозитории на GitHub.
Также на моем канале в YouTube вы можете увидеть некоторые другие реализации голосового управления, и не только системами умных домов.
Тема: ОБЛАСТИ ПРИМЕНЕНИЯ
ИНФОРМАЦИОННЫХ
ТЕХНОЛОГИЙ В ЛИНГВИСТИКЕ
План
1. Автоматический анализ и синтез звучащей речи
2. Технологии обработки текста
3. Автоматическое распознавание текста
4. Автоматическое аннотирование и реферирование
текста
5. Автоматический анализ и синтез текста
1. Автоматический анализ и синтез
звучащей речи
Одним из первых важных шагов использования
информационных технологий в лингвистике является
дигитализация текстов — переведение языкового
материала, существующего в печатном или устном виде,
в цифровую форму.
При автоматическом анализе звучащей речи она
преобразуется в печатный текст, над которым можно
производить дальнейшие операции.
Автоматический синтез звучащей речи представляет
собой обратный процесс преобразования печатного
текста, существующего в цифровой форме, в звучащий
текст на естественном человеческом языке.
Процесс автоматического анализа речи включает
следующие этапы:
1) ввод звучащей речи в компьютер с помощью
микрофона.
2) выделение компьютерной программой в звуковом
потоке отдельных знаков.
3) идентификация выделенных знаков звучащей речи
со знаками языка.
Минимальными знаками звучащей речи являются звуки,
производимые артикуляторным аппаратом человека.
Каждый звук имеет свои акустические характеристики
(высота, частота колебаний звуковых волн и т.д.),
которые можно измерить специальными приборами
(например, осциллографом).
В основе пофонемного распознавания звуков речи лежит
анализ:
1) длительности и динамики звучания,
2) чередования акустического сигнала и пауз.
В настоящее время наиболее доступной формой точной
фиксации звучащей речи (в том числе ее тембра и динамики)
становится спектрограмма — фотографическое изображение
звуков.
Спектрограмма русских звуков и и у
Задачей автоматического анализа звучащей речи при
использовании спектрограмм становится перевод
спектрограмм в фонологическую транскрипцию.
В итоге процесс автоматического анализа речи включает
ввод слов в компьютер через микрофон, начитанных
разными дикторами, их спектральную обработку и создание
набора признаков, своеобразного образца слова, который
выступает знаком языка.
Примеры программ, в которых применяются средства
автоматического анализа речи:
• программы голосового управления компьютером и бытовой
техникой Voice Navigator и Truffaldino;
• комплекс голосового управления мобильным телефоном DiVo;
• программный модуль Voice Key для идентификации личности
по парольной фразе длительностью 3-5 секунд;
• программы диктовки текста на английском языке: Voice Type
Dictation, Dragon Dictate;
на русском языке:
Комбат к Диктограф;
• система распознавания речи, встроенная в Microsoft Office ХР
(работает только с английским языком);
• голосовой поиск (например, в поисковой системе Google).
Автоматически синтезируется речь в следующих ситуациях:
• называние текущего времени по телефону,
• объявление остановок в метро,
• называние остатка средств на счету и другие услуги мобильных
операторов,
• оповещение систем гражданской безопасности и т.д.
Автоматический синтез (генерация) речи в настоящее время
осуществляется путем составления слов и фраз из заранее
записанных диктором образцов отдельных звуков (метод
компилятивного синтеза) или путем моделирования речевого
тракта человека (формантно-голосовой метод).
2. Технологии обработки текста
Представление текста
Под “текстовым” понимают такое представление информации, в котором
она представлена в виде записи слов (логических элементов) некоторого
языка и доступна для чтения человеком.
Правило сопоставления кодов и символов, входящих в алфавит,
называется кодировкой.
стандарт кодирования
таблица кодировки ASСII
стандарт кодирования Юникод (Unicode)
Понятие “текстового файла” не предусматривает строго заданного
формата или расширения. Тем не менее, помимо характерной для
той или иной ОС таблицы кодировки, в текстовых файлах могут
применяться три основных способа деления текста на строки
(абзацы):
1. Windows (DOS) — символы “Возврат каретки” + “Перевод строки”
(CR+LF).
2. Unix — символ “Перевод строки” (LF).
3. MacOs — символ “Возврат каретки” (CR).
Правила машинописного набора текста
Для облегчения анализа и последующего преобразования текста при
его наборе в самых различных случаях рекомендуется соблюдать
общие правила машинописного набора:
1. Все слова разделяются пробелом, и только одним пробелом.
2. Знаки препинания примыкают к предыдущему слову.
3. Скобки и кавычки всех видов примыкают к первому и последнему
слову заключенного в них текста.
4. Текст разрывается только в конце абзаца.
5. Большие форматированные пробелы делаются вставкой символа
табуляции, а не несколькими пробелами подряд.
Пример программных продуктов — текстовых редакторов:
Блокнот, Notepad++, PSPad, vi
Оформление текста
Шрифт характеризуется рядом параметров:
1. Рисунок шрифта — графические особенности, определяющие общность
шрифта и его отличие от всех других.
2. Кегль (кегель) — размер шрифта — предельная высота большой буквы и
окружающих ее пробелов (термин введен для описания высоты площадки
литеры при наборе с помощью типографской кассы). Чаще всего задается в
типографских пунктах (1 пункт = 1/72 дюйма = 0,375 мм). По историческим
причинам некоторые размеры имеют собственные названия: 8 пт — “петит”, 9
пт — “боргес”, 10 пт — “корпус”, 12 пт — “цицеро”.
3. Начертание — шрифт с общим рисунком, но какими-либо отличительными
признаками: более жирный, наклонный, разреженный. Иногда параметр
плотности шрифта (светлый, полужирный, жирный) отделяют от начертания.
4. Часто как параметр задается подчеркивание или зачеркивание шрифта, или
его написание как индекса — с уменьшением размера и подъемом/спуском
относительно текущей строки.
Совокупность всех возможных размеров и вариантов написания
шрифта называется гарнитурой. Гарнитуры имеют имена, по
которым часто называют и конкретный шрифт.
По общим чертам рисунка различают три основных вида
шрифтов:
1. Рубленые шрифты.
2. Антиквенные шрифты.
3. Акцидентные (оформительские) шрифты.
Существует несколько основных способов описания шрифтов:
1. Растровые шрифты.
2. Векторные шрифты.
3. Контурные шрифты.
Структурирование теста
Для оформления абзаца используют несколько параметров:
1. Выравнивание (выключка) — правило расположения букв в строке
абзаца. Видов выравнивания четыре: по левому краю, центральное, по
правому краю и по ширине полосы набора.
2. Отступы от краев полосы набора.
3. Абзацный отступ (красная строка) — положение первой строки абзаца.
4. Интервалы. Различают межстрочное расстояние — задается
множителем размера шрифта (одинарный, полуторный, двойной интервал)
— и промежутки до и после абзаца.
5. Буквица — крупная выступающая первая буква абзаца. Часто задается
не просто более крупным размером буквы, но и буквой другого рисунка.
Абзацы размещаются в рамках полосы — выделенного участка
страницы, как правило, прямоугольной формы, в котором размещаются
текст и иллюстрации.
Примеры программных продуктов
Microsoft Word, OpenOffice Writer, StarOffice Word
Автоматизированная обработка текста
Расшифровка или уточнение значений слова
Системы автоматизированной обработки текста
Примеры программных продуктов
Системы локального поиска: Следопыт, Google Desktop, Microsoft Office Find
Системы и утилиты автоматизированной обработки текста: Grep, lexx,
yacc
Словари: Abbyy Lingvo, Multilex
Автоматизации перевода: Promt
Специальные тексты
Под специальными текстами подразумеваются тексты, содержащие
математические, химические или другие формулы, сложные схемы и
специфические обозначения, используемые в научных, учебных и
технических публикациях и документах.
При подготовке научных, технических и учебных текстов часто используется
свободно доступная система подготовки публикаций TeX
Примеры программных продуктов
Макропакеты TeX: LaTeX, MikiTeX, AMSTeX
Специализированные редакторы: MathType (его облегченная версия
входит в пакет MS Office под названием Equation), ScientificLetter,
ChemWindow, ISIS Draw.
4. Автоматическое аннотирование и
реферирование текста
Рефераты и аннотации составляются вручную, например самим автором
исходного текста или библиографическим работником, или автоматически, с
помощью специальных компьютерных программ.
Для обработки большого массива текстов за минимальное количество
времени требуется привлечение автоматических средств для решения
задачи реферирования и аннотирования текстов.
В зависимости от жанра исходного текста (монография, статья, патент и др.)
и от предметной области (медицина, химия, лингвистика и т.д.) заданные
элементы реферата могут различаться. Так, для научных рефератов
дополнительно к названным выше элементам реферата прибавляется
краткое изложение сути, практической апробации и перспектив
исследований.
Различают следующие виды рефератов:
• связный текст — новое текстовое образование, порождаемое на основе
логико-смыслового анализа исходного текста;
• реферат-клише — модификация заданной клишированной структуры,
пустые ячейки которой заполняются после анализа заданного текста;
• квазиреферат — перечень наиболее информативных предложений
текста.
В большинстве программ, направленных на автоматическое
составление краткого содержания текста, можно задать разную степень
компрессии текста, т.е. одна и та же программа создает как
развернутые рефераты, так и краткие аннотации. В связи с этим в
отношении автоматического процесса составления краткого
содержания текста обычно используется двойное обозначение:
автоматическое реферирование и аннотирование текста.
Главными смысловыми единицами исходного текста выступают
ключевые слова, ключевые словосочетания и ключевые предложения.
Ключевое слово — знаменательное слово, относящееся к основному
содержанию текста и повторяющееся в нем несколько раз. Ключевое
словосочетание — сочетание слов, среди которых есть одно или
несколько ключевых. Ключевое предложение — предложение,
которое содержит несколько (два и более) ключевых слов.
По способам выделения из исходных текстов ключевых
словосочетаний и предложений различаются следующие методы
автоматического реферирования и аннотирования текстов:
1) статистические,
2) позиционные,
3) логико-семантические.
Наиболее простыми системами автоматического реферирования и
аннотирования является функция Аиto Summarize в MS Word,
системы Intelligent Text Miner, OracleContext и Inxight Summarizer
(компонент поискового механизма Alta Vista) (IBM).
Примеры систем автоматического реферирования и
аннотирования текстов:
• ОРФО 5.0 (компания «Информатик»): программа включает
функцию автоматического аннотирования русских текстов;
• «Либретто» (компания «МедиаЛингва»): программа встраивается
в Word и обеспечивает автоматическое реферирование и
аннотирование русских и английских текстов;
• поисковая система «Следопыт», которая включает средства
автоматического реферирования и аннотирования документов;
• программы Extractor и TextAnalyst
5. Автоматический анализ и синтез текста
При автоматическом анализе текст последовательно
преобразуется в его лексемно-морфологические, синтаксические и
семантические представления, понятные компьютеру. Обратный
процесс преобразования лексемно-морфологических,
синтаксических и семантических компьютерных представлений в
текст на естественном языке называется автоматическим
синтезом текста.
Автоматический анализ текста включает ряд этапов:
1) графематический анализ: выделение границ слов,
предложений, абзацев и других элементов текста (например,
врезок в газетном тексте);
2) морфологический анализ: определение исходной формы
каждого использованного в тексте слова и набора
морфологических характеристик этого слова;
3) синтаксический анализ: выявление грамматической структуры
предложений текста;
4) семантический анализ: определение смысла фраз.
При морфологическом анализе каждое использованное в тексте слово
возводится к его исходной форме и определяется набор морфологических
характеристик текстовой формы слова: часть речи; род, число и падеж для
существительных, число и лицо для глаголов и т.п.
Машинные окончания — элементы, описывающие формоизменение
конкретной лексемы и представляемые в виде парадигм.
Девочка
мыла им, мн | = S, сред, неод = род, ед | = S, сред, неод =вин, мн>
пол им, ед>.
Морфологический анализ включает в себя следующие этапы:
1) нормализация словоформ, имеющая вид лемматизации, т.е. сведения
различных словоформ к некоторому единому представлению — к исходной
форме (лемме) или стемминга, т.е. возведения разных словоформ к одной
квазиоснове;
2) частеречный тэгинг, т.е. указание части речи для каждой словоформы в
тексте;
3) полный морфологический анализ — приписывание грамматических
характеристик словоформе.
При синтаксическом анализе необходимо определить роли слов в
предложении и их связи между собой. Результатом этого этапа
автоматического анализа является представление синтаксических
связей каждого предложения в виде моделей, например в виде
дерева зависимостей.
Семантический анализ представляет собой, пожалуй, наиболее
сложное направление автоматического анализа текста. В этом случае
требуется установление семантических отношений между словами в
тексте, объединение различных языковых выражений, относящихся к
одному и тому же понятию, и т.п.
Для семантического анализа предложений используются падежные
грамматики и семантические падежи (валентности). В этом случае
семантика предложения описывается через связи главного
слова(глагола) с его семантическими актантами.
• Лексическая омонимия: совпадение звучания и/или написания слов, не
имеющих общих элементов смысла, например, рожа — лицо и вид
болезни.
• Морфологическая омонимия: совпадение форм одного и того же слова
(лексемы), например, словоформа пол соответствует именительному и
винительному падежам существительного пол.
• Лексико-морфологическая омонимия (наиболее частый вид
омонимии):совпадение словоформ двух разных лексем, например, мыла
— глагол мыть в единственном числе женского рода прошедшего времени
и существительное мыло в единственном числе, родительном падеже.
• Синтаксическая омонимия: неоднозначность синтаксической структуры,
имеющей несколько интерпретаций.
Автоматический синтез представляет собой процесс производства
связного текста, отдельные этапы которого являются теми же, что и
при морфологическом анализе, но применяются в обратном порядке:
сначала осуществляется семантический синтез, затем
синтаксический, морфологический и графематический.
Семантический синтез представляет собой переход от смысловой
записи фразы к ее синтаксической структуре; синтаксический —
переход от синтаксической структуры фразы к представляющей
фразу цепочке лексико-грамматических характеристик словоформ;
лексико-морфологический — переход от лексико-грамматической
характеристики к реальной словоформе. При морфологическом
синтезе по нормальной форме слова и его параметрам программа
находит соответствующую словоформу.
Графематический синтез объединяет слова в единый текст, следит
за соответствием фрагментов входного текста фрагментам
выходного.
Одной из первых компьютерных программ, синтезирующих
письменный диалог на английском языке, явилась программа
американского ученого Джозефа Вейценбаума «Элиза».
Приветствую вас, дорогие друзья. Наконец-то я добрался до записи урока по работе с голосовым модулем. Вижу вам понравилась моя самоделка с голосовым управлением и многие уже начали интересоваться, когда же выйдет практический урок по работе с модулем голосового управления.
О плюсах данного модуля распознавания:
- Модуль автономный и может работать без внешнего управляющего контроллера, что очень важно для радиолюбителей не знакомых с программированием.
- На ряду с другими моделями данный модуль выгодно отличается функциональностью, ценой и относительной простотой в управлении и подключении.
- Имеет высокую распознавающую способность.
- Никакого смартфона не требуется.
И так поехали! Данное видео будет направлено в первую очередь на новичков, тех, кто не знаком с программирование и интерфейсами, в общем для обычных радио любителей. В видео я покажу всё от «А» до «Я»: начнем с установки программ и подключения и закончим конкретным результатом автономной работы модуля.
Начнем же мы все равно с теоретических знаний, дабы понимать, как же все-таки работает это чудо инженерной мысли. Перво-наперво вам нужно знать некоторые характеристики данного модуля распознавания голоса:
Потребляемый ток: не более 40 мА, ток не критичный, так что просто учтите. Напряжение питания – 5 В, мы будем питать модуль USB порта компьютера при программировании, а дальше при работе вы сами решите от чего запитывать. Точность распознавания голосовой команды – 99% при идеальных условиях. Модуль распознавания голоса версии V3.1 способен запомнить 80 голосовых команд! Что на мой взгляд вполне достаточно для любых целей. Но опять же это «НО». Но модуль в единицу времени может распознавать только семь любых команд, а каких сень команд – выбирать вам.
То есть, вы можете записать в базу все 80 команд, но для распознавания выбрать только семь, любых семь из восьмидесяти. Это как с компьютером: на жестки диск можно записать 80 команд, а в оперативной памяти работать только с 7-ю командами. Если вам трудно это сейчас понять, то чуть позже на практике, я думаю, вам станет ясно о чём идет речь. Длинна голосовой команды – 1,5 секунды (1500мс) максимальное значение. Управлять платой модуля можно по интерфейсу UART, а вот снимать информацию можно как UART, так с портов GPIO, расположенных на плате. Собственно говоря, чем мы и займемся: будем снимать сигнал с выхода порта.
Переходим к практической части.
Что же нам понадобиться для работы?
- Сам модуль распознавания голоса версии V3 (V3.1) Версия не так важна – принцип работы у всех одинаков. Модуль идет с микрофоном.
- Руководство по модулю, то есть дата шит.
- Преобразователь интерфейсам USB-UART.
Все ссылки на покупку и скачивание софта под видео, в конце статьи.
Вот и всё. Как говорил Гагарин – «Поехали».
Скачиваем руководство и терминал. Терминал устанавливаем. Подключаем модуль к преобразователю интерфейса.
Будьте очень внимательны при подключении. Не страшно, если вы перепутаете TXD и RXD, ничего страшного не произойдёт. А вот если вы перепутаете плюс питания с общим проводом – это будет катастрофа! Как случилось у меня – сразу сгорел модуль и порт компьютера! Будьте очень внимательны и не повторяйте моих ошибок. Не суетитесь, не спешите, проверьте цепь несколько раз перед включением, и только после этого подключайте к USB.
После подключения к USB ваша система начнет поиск драйверов к преобразователю, в 90% случаев система сама находит драйвер и устанавливает его, но если этого по каким-то причинам не произошло, то вам буден нужно самим найти драйвер в сети и установить его. Для этого в поисковой строке напишите «CP2102 драйвер скачать» или типа того, модуль распространенный, вариантов драйверов полно.
Далее, после успешной установки оборудования идем в диспетчер устройств и смотрим порты. Нас интересует присвоенный номер нашего преобразователя. Когда узнали номер порта запускаем терминал. Идем в настройки и устанавливаем значения как у меня на рисунке.
Пишем в окне терминала команду – «AA 02 00 0A» (из даташита | AA | 02 | 00 | 0A |). Во всех командах всегда буквы заглавные и латинские.
Поле отправки вам должен последовать ответ, типа: «AA 08 00 STA BR IOM IOPW AL GRP 0A» (или из даташита | AA | 08 | 00 | STA | BR | IOM | IOPW | AL | GRP | 0A |). Если ответ пришел, то все отлично, пол дела сделано. Если нет, играемся с настройками настройками скорости передачи в терминале, просто возможно модуль настроен на другую скорость.
Я не буду останавливаться на том что означает данный ответ модуля, это вы сами сможете посмотреть в инструкции. А команда — это запрос установленных настроек.
Теперь необходимо подключить нагрузку к модулю. В роле нагрузки я буду использовать светодиоды с резисторами. Ну в дальнейшем, при эксплуатации эти светодиоды будут заменены на реле управления нагрузкой с транзисторными ключами, думаю это понятно.
Поясню саму команду «AA 02 00 0A» - это пакет состоящий из 4 байт, байты - это попарные символы в шестнадцатеричной системе – AA,02,00,0A. Во всех командах пакет будет начинаться байтом AA и заканчиваться байтом 0A (Ноль и A) – это обязательное условие. Ответы модуля будут так же начинаться и заканчиваться этими символами.
«AA 02 00 0A» - второй байт этой команды означает количество байт между байтами начала и конца, короче кроме AA и 0A. А все что между ними считаем и пишем во второй байт. Как видим в этом примере, что между AA и 0A стоят два байта - 02 00, следовательно – 02, то есть число считает само себя. Еще пример, «AA 03 20 01 0A» то есть между AA и 0A стоят три байта - «03 20 01», следовательно, второй байт – 03. Думаю, Вам будет понятно.
Команда «12» - настройка портов модуля.
На плате модуля расположены порты, с которых мы будем снимать сигнал, прежде чем это делать, необходимо настроить эти порты. Настроить порты можно это командой
«AA 03 12 01 0A» - третий байт — это команда, а четвертый значение команды. Четвертый байт может принимать следующие значения и задавать следующие опции: если «00» - режим импульса, то есть при распознавании голосовой команды, на нужный нам порт подается короткий импульс. Если «01» - режим инверсии, то есть при распознавании голосовой команды, на нужный нам порт сменит состояние на противоположное, если был 0 – станет 1 и наоборот. Если «02» - режим при котором порт переходит в ноль. Если «03» - режим при котором порт переходит в единицу.
Команда «20» - настройка портов модуля.
«AA 03 20 01 0A» - третий байт - это номер команды, которую мы будем записывать. Пример записи двух команд 1 и 2: «AA 04 20 01 02 0A». Пример записи двух команд 1, 2, 3: «AA 05 20 01 02 03 0A».
Команда «30» - загрузка записи в «распознаватель» модуля.
«AA 03 30 01 0A» - третий байт команда загрузки в память распознавателя записи 01. Если нужно записать две команды - «AA 04 30 01 02 0A», если нужно записать все семь команд - «AA 09 30 01 02 03 04 05 06 07 0A».
Команда «15» - Автозагрузка голосовых команд в распознаватель при включении питания – автономный режим работы без внешнего контроллера.
«AA 03 15 07 01 02 03 0A» - третий байт команда, четвертый байт метка команд, то есть своеобразный идентификатор, и равен 01 для загрузки одной команды, 03 – для загрузки двух команд, 07 – для загрузки трех команд и так далее, смотрите в даташит таблицу. Ну а дальше идут номера команд, которые нужно загружать.
Вот и всё: проверили связь с модулем, сконфигурировали порты, записали команды, настроили автозагрузки голосовых команд.
Об остальных командах читайте в даташит. Я лишь объяснил примерный вид работы с модулем.
Читайте также: