МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ ЭЛЕКТРОНИКИ И МАТЕМАТИКИ НАЦИОНАЛЬНОГО ИССЛЕДОВАТЕЛЬСКОГО УНИВЕРСИТЕТА

advertisement
Министерство образования и науки Российской Федерации
Государственное образовательное учреждение высшего профессионального образования
МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ ЭЛЕКТРОНИКИ И
МАТЕМАТИКИ НАЦИОНАЛЬНОГО ИССЛЕДОВАТЕЛЬСКОГО
УНИВЕРСИТЕТА
«ВЫСШАЯ ШКОЛА ЭКОНОМИКИ»
Факультет информационных технологий и вычислительной техники
Кафедра информационные технологии и автоматизированные системы
МАГИСТЕРСКАЯ ДИССЕРТАЦИЯ
на тему
Разработка и программная реализация модульной
интегрируемой системы предоставления средств голосового
интерфейса для разработки программного обеспечения
Выполнил студен группы АПМ-121
Ильский А.А.
Научный руководитель:
доцент, канд.техн.наук Клышинский Э.С.
Консультант:
доцент, канд.техн.наук. Клышинский Э.С.
Москва 2013
ОГЛАВЛЕНИЕ
АННОТАЦИЯ .......................................................................................................... 4
ВВЕДЕНИЕ .............................................................................................................. 6
ГЛАВА 1. ГОЛОСОВОЙ ИНТЕРФЕЙС И ТЕХНОЛОГИИ
РАСПОЗНАВАНИЯ РЕЧИ В РАЗРАБОТКЕ ПРОГРАММНОГО
ОБЕСПЕЧЕНИЯ .....................................................................................................11
1.1. Интерфейсы - основа реализации взаимодействия всех современных
информационных систем .......................................................................................11
1.2. Голосовые интерфейсы, компоненты, виды и задачи Системы
распознавания речи Исторический обзор систем распознавания речи ........... 13
1.4. Обзор продуктов использующих технологии распознавания речи и
голосового интерфейса, потребителей и перспективы ..................................... 25
1.5. Специализированные голосовые интерфейсы, голосовой интерфейс в
разработке программного обеспечения............................................................... 32
ГЛАВА 2. АДАПТАЦИЯ ТЕХНОЛОГИЙ ГОЛОСОВОГО ИНТЕРФЕЙСА И
РАСПОЗНАВАНИЯ РЕЧИ К РАЗРАБОТКЕ ПРОГРАММНОГО
ОБЕСПЕЧЕНИЯ. ПРОЕКТИРОВАНИЕ СИСТЕМЫ ....................................... 37
2.1. Анализ задачи программирования ............................................................... 37
2.2. Условия разработки системы и ее программной реализации .................... 41
2.3. Концептуальная архитектура модульной, интегрируемой системы
предоставления средств голосового интерфейса ............................................... 46
2.4. Платформа плагинов и расширений ............................................................. 48
2.5. Инструменты разработки .............................................................................. 55
ГЛАВА 3. РАЗРАБОТКА ПРОТОТИПА ПРОГРАММНОЙ РЕАЛИЗАЦИИ
СИСТЕМЫ И СПЕЦИАЛИЗИРОВАННЫХ СРЕДСТВ ГОЛОСОВОГО
ИНТЕРФЕЙСА ...................................................................................................... 60
3.1. Архитектура прототипа программной реализации ..................................... 60
3.2. Описания программной реализации ............................................................ 61
3.3. Разработанные общие решения и функционал голосового интерфейса .. 64
3.4. Разработанные средства голосового интерфейса........................................ 67
ЗАКЛЮЧЕНИЕ ..................................................................................................... 78
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ .................................................... 80
АННОТАЦИЯ
к магистерская диссертация на тему: «Разработка и программная реализация
модульной интегрируемой системы предоставления средств голосового
интерфейса для разработки программного обеспечения».
Автор: Ильский А.А.
Объем магистерской диссертации 81 страница, в ней содержится 29
таблиц, 4 рисунка, 30 источников литературы.
Ключевые слова:голосовой интерфейс, распознавание речи, разработка
программного обеспечения.
Объектом исследования являются средства голосового интерфейса,
технологии
распознавания
речи
и
задача
разработки
программного
обеспечения.
Цель - разработка специализированных средств голосового интерфейса
и применение технологий распознания речи для разработки программного
обеспечения, а также разработка системы и прототипа ее программной
реализации.
Предмет исследования — возможность применения и улучшения
задачи разработки программного обеспечения при использовании средств
голосового интерфейса и технологий распознания речи.
Диссертационное исследование состоит из введения, трех глав
основного содержания, заключения, списка библиографии и приложений.
В первой главе введены основные понятия, произведен обзор
предметных областей, выявлена специфика применения средств голосового
интерфейса для разработки программного обеспечения.
Во второй главе рассмотрена задача разработки программного
обеспечения, предложен подход для адаптации, обозначены современные
условия разработки в отрасли информационных технологий, произведено
4
проектирование архитектуры и выбор инструментария для разработки
программной реализации.
В третьей главе разработана архитектура программной реализации,
представлено ее программное описание и базовый набор средств голосового
интерфейса, разработанных с использованием ее прототипа.
В заключении - основным теоретическим результатом данной
магистерской диссертации является выработка, концепции, подхода и
формулировка правил, условий и ограничений задачи разработки и
программной
реализации
систем
предоставления
средств
специализированных голосовых интерфейсов в частности для разработки
программного обеспечения.
Основным практическим результатом стала разработка базового
функционала
и
прототипа
голосового
интерфейса
для
разработки
программного обеспечения, на основе созданного исследовательского
прототипа программной реализации.
Публикации: По материалам диссертации опубликована 1 печатная
работа.
А.А.
Материалы
Ильский
Программирование
шестнадцатого
голосом,
научно-практического
как
необходимость
семинара
«Новые
информационные технологии в автоматизированных системах», 2013 года.
5
ВВЕДЕНИЕ
Создание интерфейсов, поддерживающих и предлагающих более
эргономичные и естественные формы диалога между пользователями и
компьютерной
техникой,
информационных
движется
технологий
в
и
след
ускоряется
растущим
внедрением
потребностям
профессиональной и повседневной деятельности человека. В области
информационных технологий (ИТ) средства взаимодействия пользователя с
технической системой принято называть интерфейсом. Интерфейсы бывают
разные и реализуются разными средствами и методами. Одной из важнейших
задач разработки современных технических систем является обеспечение
наиболее интуитивного и естественного интерфейса с пользователем, то есть
современные компьютерные приложения ориентированны на пользователя.
Одной из естественных форм взаимодействия для человека является
речь.
Голосовой
интерфейс
может
улучшить
существующий
пользовательский интерфейс - он обеспечивает более удобный и менее
ограниченный
способ
взаимодействия
человека
с
компьютером.
Качественный голосовой интерфейс помогает преодолевать неприятие
технологии пользователями, так как для его использования не нужно
овладевать новыми навыками. Голосовой интерфейс качественным образом
изменяет способ, а следовательно и эффективность взаимодействия
пользователя с системой. Голосовой поиск от компании Google и голосовой
ассистент Siri от компании Apple являются этому яркими примерами,
подтверждая насущную необходимость внедрения речевых технологий, в
частности распознавания речи и голосовых интерфейсов.
Важный и практический аспект данных проблем связаны с тем, что
голосовой интерфейс является необходимой компонентой, когда речь идет о
6
создании комфортных условий жизни для людей с нарушениями опорнодвигательного аппарата, а также специалистам утратившим возможность
использовать
стандартные
средства
в
результате
профессионального
заболевания, травмы или увечья. Такие системы со временем войдут в
повседневный быт в процессе реализации концепции так называемых
«умных домов».
Современность темы исследования определяется тем, что Рынок
речевых технологий стремительно развивается, охватывая практически все
сферы нашей жизни. По данным отчета «Automatic Speech Recognition
Application Market 2010-2013», на сегоднейший день мировой рынок речевых
технологий оценивается примерно в 900 млн. долларов,а рост составляет
около 28% в год.
Российский рынок систем распознавания речи и других высоко
технологичных решений в области речевых технологий невелик. По оценки
компании «Стэл — компьютерные системы», его объем составляет порядка
$10 млн., а динамика — порядка 15-30%.
В
связи
с
вышесказанным
становится
актуальной
проблема
возможности создания голосовых интерфейсов для специалистов и систем
предоставляющих такие средства, учитывая невозможность мгновенного
перехода и необходимость адаптации к новым инструментам и средствам,
очевидной становится потребность в интеграции с уже существующими
системами. На практике решение подобной задачи и создание необходимой
интегрируемой системы оказывается нетривиальным.
Далеко не все задачи разработки голосового интерфейса в настоящее
время можно считать решенными. Проблема разработки голосового
интерфейса является достаточно сложной и комплексной, что требует от
разработчика знаний в различных предметных областях, таких как
компьютерные науки, лингвистика и психология поведения человека. Даже
7
при наличии продвинутых средств проектирования, разработка эффективного
голосового пользовательского интерфейса требует от его создателей
детального понимания как задач, выполняемых системой, так и психологии
пользователей системы.
Проведенный библиографический поиск и анализ информации в
Internet подтвердил актуальность данной темы тем, что в настоящее время
многие ведущие компании усиливают работу в направлении развития
голосовых интерфейсов и технологии распознавания речи.
Распознавание
речи
-
технология,
позволяющая
использовать
естественный для человека речевой интерфейс для взаимодействия с
электронной техникой [1]. Сложность распознавание речи состоит в том, что
совокупность таких характеристик голоса и речи как тембр, громкость,
высота, темп, интонация, качество дикции делают речь каждого человека посвоему неповторимой и уникальной как отпечатки пальцев. Задачей
компьютерной техники и программного обеспечения в состоит в том, чтобы
распознать сказанные человеком слова в любых, не беря экстремальные,
условиях без какой-либо предварительной адаптации под конкретный голос.
Применение
средств
голосового
интерфейса
и
технологий
распознавания речи для разработки программного обеспечения только
начинает свое развитие в мире и еще не представлено в России.
Целью работы является — разработка специализированных средств
голосового интерфейса и применение технологий распознания речи для
разработки программного обеспечения, а также разработка интегрируемой
системы предоставляющей средства такого интерфейса и прототип ее
программной реализации.
Для достижения цели сформулированы и поставлены следующие
задачи:
 изучение текущего состояния голосовых интерфейсов и соответственно
8
области распознавания речи;
 произвести анализ предметных областей, обозначить существующие
проблемы,
трудности
и
недостатки
применения
не
специализированных средств голосового интерфейса;
 разработать концептуальную архитектуру системы;
 разработать прототип программной реализации системы, имеющую
модульную архитектуру с возможностями интеграции, учитывая
условия
и
современные
тенденции
отрасли
информационных
технологий;
 разработать базовый набор средств голосового интерфейса для
разработки программного обеспечения.
Объектом исследования являются средства голосового интерфейса,
технологии
распознавания
речи
и
задача
разработки
программного
обеспечения.
Предмет исследования — возможность применения и улучшения
задачи разработки программного обеспечения при использовании средств
голосового интерфейса и технологий распознания речи.
Работа состоит из введения, трех глав и заключения. Введение
раскрывает актуальность, определяет степень научной разработки темы,
объект,
предмет,
цель,
задачи
и
методы
исследования,
раскрывает
теоретическую и практическую значимость работы В первой главе введены
основные понятия, произведен обзор предметных областей, выявлена
специфика применения средств голосового интерфейса для разработки
программного обеспечения. Во второй главе рассмотрена задачи и
потребности разработки программного обеспечения, предложен подход для
адаптации,
обозначены
современные
условия
разработки
в
отрасли
информационных технологий, произведено проектирование архитектуры и
выбор инструментария для разработки программной реализации. В третьей
9
главе разработана архитектура программной реализации, представлено ее
программное описание и базовый набор средств голосового интерфейса,
разработанный с использованием ее прототипа.
10
ГЛАВА 1. ГОЛОСОВОЙ ИНТЕРФЕЙС И ТЕХНОЛОГИИ
РАСПОЗНАВАНИЯ РЕЧИ В РАЗРАБОТКЕ ПРОГРАММНОГО
ОБЕСПЕЧЕНИЯ
1.1. Интерфейсы - основа реализации взаимодействия всех современных
информационных систем
Попытки научить компьютеры общаться с людьми при помощи
естественного голосового интерфейса предпринимались с первых лет
истории компьютерной техники.
Интерфейс
–
способ
взаимодействия
компьютерной
системы
(программы) с пользователями и устройствами.
На основе интерфейса реализуется взаимодействие всех современных
информационных систем. Под интерфейсом понимается набор средств,
правил и методов, за счет которых осуществляется коммуникация между
элементами системы, различными программами и устройствами. Под
совокупностью средств, методов и правил подразумевают: средства вывода
информации из устройства(системы) пользователю — весь доступный спектр
воздействий на организм человека (зрительных, слуховых, тактильных,
обонятельных и других.), средства ввода информации/команд пользователем
реализуются сейчас множеством всевозможных устройств. Методы как набор
правил,
заложенных
разработчиком
устройства,
согласно
которым
совокупность действий пользователя должна привести к необходимой
реакции устройства и выполнению требуемой задачи,и правила эти должны
быть достаточно ясны для понимания и легки для запоминания.
11
По наличию тех или иных средств ввода, интерфейсы разделяются на
типы:
 голосовой,
 жестовый ,
 возможны смешанные варианты.
Пользовательский интерфейс (англ. user interface,) - разновидность
интерфейсов взаимодействия управляемых человеком систем. Термин
применяется по отношению к компьютерным программам (приложениям).
Как любая система общения с устройствами, которые способны к
интерактивному взаимодействию с пользователем, существуют: графический
интерфейс пользователя (программные функции реализуются графическими
элементами экрана), диалоговый интерфейс (поисковая строка), интерфейс
программирования
приложений,
сетевой
интерфейс,
интерфейс
операционной системы(ОС).
Одним из самых важных показателей, характеризующих интерфейс
пользователя, является usability – логичность и простота элементов
управления, удобство программы или системы в пользовании с целью быть
необходимыми и достаточными, удобными и практичными, расположенными
и скомпонованными разумно и понятно, и соответствовать психофизиологии
человека.
Увеличение в устройстве (при равной функциональности) средств
ввода-вывода дает упрощение построения методов управления и упрощение
правил пользования, но зато приводит к сложности восприятия информации
пользователем — интерфейс становится перегруженным.
12
И наоборот — уменьшение средств отображения и контроля приводит к
усложнению правил управления, так как каждый элемент несет на себе
слишком много функций.
В связи с увеличением интенсивности обмена информацией в системе
«человек-машина» особое значение имеет снижение нагрузки на тактильнозрительные
каналы
человека.
Например,
в
системах
управления
востребованной является идея голосового контроля и управления состоянием
системы (речевое общение для контроля состояния работы самолета, бес
кнопочный телефон, речевое управление производственными процессами).
Внедрение голосового интерфейса оставит глаза и руки оператора
(пилота, водителя, рабочего за станком) свободными от перегрузки, что
повысит надежность и качество управления.
Использование речевого диалога в системах массового обслуживания
населения также актуально[2]. Помимо исключительного удобства для
населения, такие системы повышают коммерческую выгоду как за счет
привлечения дополнительной клиентуры, так и путем замены человекаоператора компьютерными системами с голосовым интерфейсом.
1.2. Голосовые интерфейсы, компоненты, виды и задачи Системы
распознавания речи Исторический обзор систем распознавания речи
Преимущества голосового интерфейса:
 оперативность и естественность;
 минимум специальной подготовки пользователя;
 возможность управления объектом в темноте, за пределами его
визуальной видимости (в частности, с использованием существующей
телефонной сети);
 возможность использования одновременно ручного (с помощью
клавиатуры) и голосового ввода информации;
13
 обеспечение мобильности оператора при управлении.
К основным классам задач голосового интерфейса следует отнести:
 синтез речи – эта задача включает в себя комплекс подзадач и
заключается
в
обеспечении
возможности
произнесение
речи
компьютером на основе произвольного орфографического текста;
 анализ и распознавание речи – комплекс задач, включающих запись,
оцифровку и анализ речи для распознавания полученного речевого
сообщения компьютерной системой;
 понимание (интерпретация) речи – это комплекс задач, связанных с
анализом смысла речевых сообщений и формированием реакции
(ответа) компьютерной системы;
 распознавание
голоса
–
комплекс
задач,
включающих
анализ
особенностей голоса говорящего с целью выявления каких-либо его
индивидуальных (личностных) особенностей и качеств;
 компьютерное клонирование голоса и дикции – это создание близкой
копии, но не биологической, а компьютерной, и не всего существа в
целом (в данном случае
человека), а только
одной
из его
интеллектуальных функций: чтение произвольного орфографического
текста[3].
Общая структура голосового интерфейса включает два основных компонента:
 синтез речи;
 распознавание речи.
Каждая из задач голосового интерфейса является достаточно сложной,
то в соответствие указанным компонентам ставятся два отдельных класса
систем:
 системы синтеза речи;
 системы распознавания речи.
14
Реализация речевого диалога происходит посредством диалога, при
котором запрос и ответ со стороны пользователя ведется на языке, близком к
естественному. Пользователь свободно формулирует задачу, но с набором
установленных программной средой слов, фраз и синтаксиса языка
Разновидностью интерактивного естественного диалога является речевое
общение с компьютерной системой. В этом случае человеческий голос может
преобразовываться,
например,
в
текст,
или
использоваться
для
интерактивного управления системой, или для идентификации личности. В
основе данных процессов лежит технология и решение задачи распознавания
речи.
Речь в физическом смысле - это акустический сигнал, генерируемый
артикуляционными органами человека, передающийся через физическую
среду, воспринимаемый ухом человека. При естественной или искусственной
генерации речи в акустическом сигнале изменяются физические параметры.
Эти изменения воздействуют на мембрану уха, создают траектории звуковых
образов, понимаемых человеком как соответствующие звуки данного языка,
или
иначе говоря, при произнесении слов человек генерирует звуки
(фонемы), которые несут информацию о тех символах, с помощью которых
эти слова могут быть записаны в виде текста.
Математическую модель генерации звука можно представить в виде
возбуждающих генераторов тонового и белого шума, группы резонаторов,
модуляторов и ключей (рот, нос, язык, губы), обеспечивающих формирование
ощущения определенного звука.
Системы
распознавания
речи
-
это
системы,
анализирующие
акустический сигнал алгоритмами, основанными на разнообразных теориях,
предполагающих, какие характеристики речевого сигнала создают ощущения
звуков данного языка, и математических методах, с той или иной точностью
выделяющих значащие параметры акустического сигнала и преобразующие
15
его в различной полноте в необходимую форму.
Заблаговременно формируется база фонем языка, содержащая шаблоны
базового набора слов при «усредненной» речи, то есть независящей от
диктора. Речь переводится в фонемное описание и поступает в файл
описания фонем, откуда это описание поступает в блок распознавания,
проводящий сравнение поступившей информации с той, которая хранится в
базе. Формируются распознанные слова, которые преобразуются в текстовые
данные или команду.
Системы распознавания речи состоят из двух частей - акустической и
лингвистической. В общем случае могут включат в себя фонетическую,
фонологическую,
морфологическую,
лексическую,
синтаксическую
и
семантическую модели языка.
Акустическая - отвечает за представление речевого сигнала, за его
преобразование в некоторую форму, в которой в более явном виде
присутствует информация в содержании речевого сообщения.
Лингвистическая - интерпретирует информацию, получаемую от
акустической модели, и отвечает за представление результата распознавания
потребителю.
Задачи распознавания речи - автоматическое восстановление текста
произносимых человеком слов, фраз или предложений на естественном языке
и проблемы идентификации, шумоочистки, распознавания языков, оценки
психофизического состояния человека. При решении задачи распознавания
слитной речи человек применяет свои знания о естественном языке, а также
смысл произносимого для устранения неоднозначности при восстановлении
текста предложения.
16
Поэтому задачу распознавания речи дополнительно разделяют на две
независимые задачи:
 задачу локального распознавания речи;
 задачу восстановления текста слитной речи по множеству возможных
гипотез распознавания.
Рассмотрим мировую историю развития области распознавания речи и
голосовых интерфейсов.
Обзор предметной области. История развития систем распознавания
речи и голосовых интерфейсов.
1952 год можно считать годом рождения систем распознавания речи.
Компания Bell Laboratories разработала систему названую Audrey, которая
распознавала цифры, сказанные одним голосом.
1962
год
компания
IBM
представила
компьютер
Shoebox
со
способностью распознавать 16 слов на английском языке.
Вторая половина 60-х годов в США, Великобритании, Японии, СССР
ведется разработка систем распознавания речи распознающих отдельно
произносимые звуки.
1971 год - старт проекта ARPA (Advanced Research Projects Agency).
Целью достижения распознавания непрерывной речи и объемом словаря не
менее тысячи слов.
1972 год доступно первое коммерческое программное обеспечение
систем распознавания речи. Vip-100 обладало возможностью распознавания
несколько сотен слов, но отсутствовала поддержка связанной речи. Помимо
этого требовалась «предварительная тренировка» системы, посредством на
диктовки слов.
1976 год - проект ARPA завершен разработкой шести систем, которые
почти соответствовали поставленным требованиям. HARPY и HEARSAY II
представленные от Университета Карнеги-Мелона, HWIM от Bolt, Branec and
17
Newmen и др. Но лидером проекта стала, удовлетворявшая и по отдельным
характеристикам превосходившая все критерии, система HARPY. Система
понимала произносимые пятью операторами предложения с точностью 95%
при использовании словаря размером 1011 слов, и исправно работала, в
исходных
условиях
хуже
требуемых,
например,
низкокачественном
микрофоне или при акустических помехах.
Восьмидесятые годы лидирующие компании Bell Laboratories и IBM
внедряют новые подходы и технологии в развитие данных систем и
достигают увеличения словарного запаса до нескольких тысяч слов. IBM
акцентировалась на исследованиях N-грамм и дикторозависимых систем, Bell
Laboratories
разрабатывала системы способные работать с акустической
дисперсией, акцентами и не требований к предварительной тренировке.
Провалом
закончилась
попытка
использовать
искусственные
нейронные сети для распознавания речи.
Выходят коммерческие предложения на подобие Kurzweil text-to-speech,
но все они были неудобными в работе и поддерживали только надиктовку.
1987 год выход первого коммерческого общественного продукта - Кукла
с функцией распознавания детской речи на основе тренировки и
возможностью реакции на простые события, будь то попадание на свет или в
темноту. А сенсоры на пальчиках позволяли «читать» специальные книги из
комплекта.
1990 год программа обеспечение Dragon Dictate – первая коммерческая
программа для обычных пользователей.
1996 год появление VAL(voice-activated link) от BellSouth – первый
голосовой портал, система с целью обработки справочных и поисковых
запросов для покупателей в крупных торговых центрах и абонентов
телефоных компаний по заданным запросам, услугам, торговым маркам.
1997 год - улучшенная версия программы от компании Dragon Systems.
18
Dragon Naturally Speaking была способна распознавать нормальную речь,
около 100 слов в минуту.
2001 год Microsoft выпускает свою систему распознавания речи Windows Speesh Recognition. При многих недостатках данная программа
стала массовой.
2002 год Google запускает, в тестовом режиме, Voice Search - сервис
голосового поиска в сети интернет, но из-за необходимости звонить на
специальный номер данная разработка была сразу свернута. Но компания
Google продолжила разработки в этом направлении.
2005 год - первая операционная система с функцией распознания речи
Mac OS X Tiger, но это был не полноценный продукт, а тестовая версия. Voice
Over была способна не только на распознание речи, но и являлась её
синтезатором, программа могла читать текстовые документы, почтовые и вебстраницы, являсь при этом дикторонезависимой, и даже обслуживала
нескольких пользователей одновременно.
2006 год Microsoft выпускает операционную систему с полноценной
поддержкой функции распознания речи Windows Vista.
2009 год приложение Voice Search от Google для iPhone. Работа данного
приложения опирается на облачные вычисления, позволившие провести
крупномасштабный анализ данных поиска совпадений между огромным
числом голосовых запросов пользователей и их словами, такая процедура
способствовала быстрому росту и совершенствованию системы. Позднее
появилась версия для операционной системы Android.
2011 год Google внедрена функция распознавания голоса в браузер
Chrome. В базах на серверах компании насчитывается около 230 миллиардов
слов на многих языках мира.
19
Конец 2011 год начало продаж Apple iPhone 4S с программой Siri,
которая не просто распознает речь,а выступает в качестве персонального
виртуального ассистента, способного обрабатывать естественную речь,
отвечать на заданные вопросы и предоставлять рекомендации, с поддержкой
английского, французского и немецкого языков.
2012 год Ford of Europe и компания Nuance Communications,
представляют SYNC, которая на начальном этапе будет поддерживать
британский
вариант
английского
языка,
французский,
испанский,
португальский, немецкий, итальянский, турецкий, голландский и русский
языки. Пользователи системы смогут давать такие инструкции как
«Позвонить
(имя
контакта)»
или
«Проигрывать
исполнителя
(имя
исполнителя)». Языковые возможности системы обеспечивают работу
функции
помощи
в
экстренных
ситуациях
(Emergency
Assistance),
завоевавшей премию «Global Mobile Award 2012». Функция помогает
находящимся в автомобиле людям в случае аварии оповестить операторов
местных экстренных служб на соответствующем языке. Система SYNC
установлена уже на более чем 4 миллионах автомобилей в США. До конца
2012 года система появится в Европе на автомобилях Focus, C-MAX, Transit и
Fiesta.
1.3. Используемые в распознавании речи методы и классификация
систем распознавания речи
Практически все известные методы распознавания речи обладают
рядом основных общих свойств:
 для распознавания используется метод сравнения с эталонами;
 сигнал может быть представлен либо в виде непрерывной функции
времени, либо в виде слова в некотором конечном алфавите;
 для
сокращения
объема
вычислений
используются
методы
динамического программирования. Динамическое программирование
20
(ДП) - метод решения задач путем составления последовательности из
подзадач таким образом, что:
 первый
элемент
последовательности
(возможно
несколько
элементов) имеет тривиальное решение
 последний элемент этой последовательности - это исходная задача
 каждая задача этой последовательности может быть решена с
использованием решения подзадач с меньшими номерами.
Методы распознавания речи можно разделить на две большие группы:
непараметрические — с использованием непараметрических мер близости к
эталонам (к ним можно отнести методы на основе формальных грамматик и
методы на основе метрик на множестве речевых сигналов) — и
параметрические (вероятностные — на основе метода скрытых моделей
Маркова, нейросетевые)[4].
Непараметрические методы, основаны на мерах близости на множестве
речевых сигналов. Метод Винцюка [4, 5], основанный на методе
динамического программирования (Беллман, [6]), развитый Итакурой [7] и
другими, позволил сократить время вычисления значений функции близости
к эталонным сигналам с экспоненциального (от длины сигнала) до
квадратичного. В силу того, что основной спецификой метода являлось
нелинейное искажение временной оси одной из сравниваемых функций,
метод
получил
название
«динамической
деформации
времени».
К
достоинствам относятся простота его реализации и обучения. К недостаткам
можно
отнести
сложность
вычисления
меры
близости,
которая
пропорциональна квадрату длины сигнала, и большой объем памяти,
необходимый для хранения эталонов команд - пропорциональный длине
сигнала и количеству команд в словаре.
21
Параметрические - методы, применяемые к задаче распознавания речи
в настоящее время, были впервые предложены рядом американских
исследователей (Бейкер [9] и Джелинек [10]) в 1970-е годы прошлого века. В
них применяется теория скрытых моделей Маркова - дважды стохастические
процессы и цепи Маркова [11] по переходам между состояниями и множества
стационарных процессов в каждом состоянии цепи[8].
Достоинствами метода скрытых моделей Маркова являются:
 быстрый
способ
вычисления
значений
функции
расстояния
(вероятности);
 существенно меньший объем памяти, по сравнению с методом
«динамической деформации времени», необходимый для хранения
эталонов команд.
Основными недостатками:
 большая сложность его реализации;
 необходимость
использования
больших
фонетически
сбалансированных речевых корпусов для обучения параметров.
Основные
характеристики
и
признаки,
по
которым
можно
классифицировать современные системы распознавания речи.
 словари размером в десятки и сотни тысяч слов;
 распознавание раздельной или слитной речи;
 работа в реальном времени;
 дикторозависимость или дикторонезависимость системы;
 надежность работы 95–98% для грамматически правильных текстов;
 назначение.
22
Классификация систем распознавания речи по сложности:
 системы автоматического распознавания изолированных слов для
распознавания произносимых человеком команд по словам;
 системы
автоматического
распознавания
слитной
речи
—
с
возможностью выделять слова в естественном частично слитном
потоке человеческой речи;
 системы понимания речи - с элементами интеллекта, что позволяет, вопервых, на основе смыслового анализа более правильно выделять слова
в потоке речи, а, во-вторых, сохранять информацию в некой базе
знаний, откуда она может быть легко извлечена для решения
определенных интеллектуальных задач.
Основные компоненты систем распознавания речи:
 графическая среда для разработки, компиляции и оптимизации
грамматических и лексических блоков распознавания, проверки и
редактирования лексиконов;
 система для протоколирования диалогов из работающего приложения с
целью оценки качества распознавания и подстройки системы;
 инструмент оценки качества работы системы (проверка соответствия
слова, сказанного абонентом, используемой грамматике);
 система для создания «тренируемых» языковых моделей, повышающих
производительность и ускоряющих процесс распознавания;

система
для
распределения
множества
параллельных
запросов
различных типов и прозрачной интеграции различных речевых модулей
в сети.
Рассмотрев
классификацию
и
компоненты,
приведем
полную
иллюстрацию классификации систем распознавания речи на рис. 1.
23
Рис.1 Классификация систем распознавания речи
Условия возникновения проблем систем распознавания речи:
 произвольный, наивный пользователь;
 спонтанная речь;
 наличие акустических помех и искажений, в том числе меняющихся;
 наличие речевых помех;
 недостаточная капитальная база, не дающая возможность интенсивно
проводить исследования и разрабатывать новые инновационные
алгоритмы в речевых технологиях.
24
Условия, на основе которых выявляются следующие требования и
ограничения:
 требуется предварительная настройка системы на голос от нескольких
десятков минут до нескольких часов предварительного наговаривания
текстов;
 некоторые проверки не дают результатов лучших, чем 5% ошибок;
 вероятность правильного распознавания слов не превышает одной
трети даже для хорошо организованных спонтанно произнесенных
текстов.
Далее рассмотрим современные отечественные и зарубежные продукты
с использование технологий распознавания речи.
1.4. Обзор продуктов использующих технологии распознавания речи и
голосового интерфейса, потребителей и перспективы
Горыныч ПРОФ 3.0 — первая русскоязычная система автоматического
распознавания речи для диктовки и голосового управления компьютером с
поддержкой русского языка для операционной системы Windows XP[12].
Характеристики:
 дикторозависимость;
 языкозависимость (русский язык и английский язык);
 точность распознавания зависит от ядра системы американской
программы "Dragon Dictate";
 предоставляет средства голосового управления отдельными функциями
операционной системы, текстовых редакторов и прикладных программ;
 требует обучения.
VoiceNavigator
(компания
«Центр
речевых
технологий»)
высокотехнологичное решение для контакт-центров, предназначенное для
построения Систем Голосового Самообслуживания. VoiceNavigator позволяет
25
автоматически обрабатывать вызовы с помощью технологий синтеза и
распознавания речи. VoiceNavigator Web - навигация по веб-ресурсам при
помощи голоса. Разработка позволяет управлять навигацией сайта при
помощи речевых команд[12].
Характеристики:
 дикторонезависимость;
 устойчивость к окружающим шумам и помехам в телефонном канале;
 распознавание русской речи работает с надежностью 97% (словарь 100
слов).
Speereo Speech Recognition (Российская ИТ компания «Speereo
Software»)
Программный продукт для разработки приложений в индустрии
мобильных устройств и персональных компьютеров. Распознавание речи
происходит непосредственно на устройстве, а не на сервере, что является
ключевым преимуществом, по мнению разработчиков[12].
Характеристики:
распознавание русской речи работает с надежностью около 95%;
дикторонезависимость;
словарный запас около 150 тыс. слов;
одновременная поддержка нескольких языков;
компактный размер движка.
Sakrament
ASR
Engine
(разработка
компании
«Сакрамент»)
-
технология распознавания речи используется при создании средств речевого
управления – программ, управляющих действиями компьютера или другого
электронного устройства с помощью голосовых команд, а также при
организации телефонных справочных и информационных служб[12].
26
Характеристики:
 дикторонезависимость;
 языконезависимость;
 точность распознавания достигает 95-98%;
 распознавание речи в виде выражений и небольших предложений;
 нет возможности обучения.
Google Voice Search (компания «Google»). Ранее поиск применялся
исключительно в мобильных устройствах. С недавнего времени голосовой
поиск от Google встроен в браузер Google Chrome, что позволяет
использовать этот сервис на различных платформах[12].
Характеристики:
поддержка русского языка;
возможность встраивать распознавание речи на веб-ресурсы;
голосовые команды, словосочетания;
для работы необходимо постоянное подключение к сети internet.
Dragon NaturallySpeaking (компания «Nuance») Мировой лидер в
программном
обеспечении
по
распознаванию
человеческой
речи.
Возможность создавать новые документы, отправлять электронную почту,
управлять популярными браузерами и разнообразными приложениями
посредством голосовых команд[12].
Характеристики:
отсутствует поддержка русского языка;
точность распознавания до 99%.
ViaVoice (компания «IBM») представляет собой программный продукт
для аппаратных реализаций. Компания ProVox Technologies на основе этого
ядра
создала
систему
для
диктовки
отчетов
врачей-радиологов
VoxReports[12].
27
Характеристики:
точность распознавания достигает 95-98%;
дикторонезависимость;
словарь системы ограничен набором специфических терминов.
Sphinx – самый известное и наиболее работоспособное из открытых
программных продуктов для распознавания речи на сегодняшний день.
Разработка ведется в университете Карнеги-Меллона, распространяется на
условиях лицензии Berkley Software Distribution (BSD) и доступен как для
коммерческого, так и для некоммерческого использования[12].
Характеристики:
 дикторонезависимость;
 распознавание слитной речи;
 обучаемость;
 наличие версии для встраиваемых систем — Pocket Sphinx.
Наиболее
значительные
потребители
голосовых
технологий
-
электронная коммерция, производители всевозможных устройств домашнего
применения, таких как телевизоры, видеомагнитофоны, микроволновые печи,
стиральные машины и т.д. Рынок голосовой навигации в Web сайтах,
осуществляющих электронную торговлю услугами по продаже авиа- и
железнодорожных билетов, продуктов, другими услугами и сервисами, как по
телефону, так и через интернет, по оценкам экспертов, может достигнуть 500
миллионов USD в течение года от начала применения. Суммарное мировое
производство телевизоров оценивается в 100 миллионов штук. При цене 5 $
за функцию (модуль) управления голосом ежегодный рынок, только в этом
сегменте, даст общий объем в 500 миллионов USD.
Речевые технологии, позволяющие распознавать команды в условиях
шумов, позволяют дополнить управление в автомобилях таким функциями
28
как управление светом, радио, замками и т.д. Объем рынка в этом сегменте
может достигнуть в 2020 7.5 миллиардов USD. Голосовое управление
функциями автомобильных аудио и навигационных систем уже реализовано в
некоторых моделях BMW, Mercedes-Benz, Ford, Toyota и других. Такие
системы помогают водителю не отвлекаться от дороги, однако для того,
чтобы их эффективно использовать, водитель должен знать специальные
голосовые команды, которых, к примеру, в системе Ford SYNC около десяти
тысяч. Система SYNC установлена уже на более чем 4 миллионах
автомобилей в США. До конца 2012 года система появится в Европе на
автомобилях Focus, C-MAX, Transit и Fiesta[13].
По данным аналитической компании Global Industry Analysts, мировой
объем рынка технологий распознавания голосовых команд к 2015 году
составит 20 миллиардов долларов.
Также существует потребность в речевых технологиях в военнопромышленном комплексе: тренажеры-имитаторы боевой техники; военная
техника, системы оповещения
(голосового оповещения оператора о
неисправностях или повреждениях систем, а также о выполненных
операциях/задачах),
системы
безопасности
(например,
возможность
остановки боевой техники при ее повреждении либо ранении оператора при
помощи голоса), комплексы ПВО, радиолокационные станции и др.[14].
В образовательной сфере востребованы, в частности, системы обучения
языкам технология выделения и измерения фонем речи открывает новые
возможности для обучения языкам. Она вводит в процесс обучения языку,
кроме звуковой, визуальную обратную связь, позволяет увидеть свою и
эталонную речь, сравнить их визуально, увидеть ошибки произношения и
получить оценку произнесения фонемы, слова и фразы. Визуализация
процесса произношения с выделением фонем и показом положения
артикуляционных органов по анализу произношения, позволяет создать
29
уникальные
системы
для
обучения
произношению
для
людей
с
ограниченными возможностями.
Развитие современных речевых технологий в России - российский
рынок систем распознавания речи и других высокотехнологичных решений в
речевой области невелик,его объем составляет порядка 10 млн долларов в
год. Динамика роста составляет порядка 15-20%. Мировой рынок растет
быстрее: в прошлом году его объем составил примерно 3 млрд долларов, а
темпы
роста
приблизились
к
25%.
Объемы
государственного
финансирования научных исследований в этой области в США, ЕЭС, Китае, с
одной стороны, и России – с другой, в последние десятилетия были просто
несопоставимы. В качестве иллюстрации можно привести процентное
соотношение
докладов,
принятых
к
участию
самой
авторитетной
конференцией в области речевых технологий Interspeech: Россия и Беларусь –
менее 1%, Германия – 10%, Япония – 15%, США – 25% [15].
На отечественном рынке был создан консорциум «Российские речевые
технологии», чтобы упорядочить и как-то улучшить взаимодействие между
основными игроками. Консорциум «Российские Речевые Технологии»
объединяет
деятельности
российские
компании
которых
разработка
и
научные
новых
учреждения,
речевых
область
информационных
технологий. Перед консорциумом также стоит цель по выполнению
национальной программы, включающей различные стратегические задачи:
 создание голосовых запросно-ответных информационных систем в
различных областях: в справочных телефонных системах, центрах
корпоративного
управления, мобильной
телефонии, электронной
коммерции и т.п.;
 разработка голосовых средств управления техническими устройствами;
 создание систем двойного назначения с применением эффективных
речевых технологий, систем диктовки произвольного текста для
30
офисных приложений и т.п., в том числе средств речевого перевода.
Поставленный комплекс задач может быть решен только объединением
усилий всех ведущих фирм и научных групп в этой области.
Достижения были отмечены в отраслевом журнале Speech Technology
Magazine назвавшем главных игроков мирового рынка речевых технологий
этого года в премии Speech Industry Awards 2012, где Россия представлена в
лице дочерней компании ООО «Центр речевых технологии» - SpeechPro,
которая была высоко отмечена в категории Star Performers Awards для
производителей, чья деятельность способствовала росту индустрии речевых
технологий в целом. Награды вручены победителям премии на конференции
SpeechTEK 2012 года 13-15 августа в Нью-Йорке[16].
Сегодня «Центр речевых технологии», входящий в консорциум
«Российские
Речевые
Технологии»,
является
ведущим
мировым
разработчиком инновационных систем в сфере высококачественной записи,
обработки и анализа аудио-видео информации, синтеза и распознавания речи.
Создаваемые в «Центре речевых технологий» биометрические решения
обеспечивают высокую точность распознавания личности по голосу и
изображению лица в реальном времени. Эти решения находят успешное
применение в государственном и коммерческом секторе, от небольших
экспертных лабораторий до сложных систем безопасности национального
масштаба[17].
Потребительское программное обеспечение распознавания речи все же
в основной своей массе сконцентрировано на диктовке, позволяя печатать
документы, электронные письма, помогая специальностям, где работа
связанна с длительными периодами печати, с повышенным риском получения
заболевания и травм опорно-двигательной и нервной системы. Ряд профессий
таких как журналисты, программисты, писатели и ученые, в условиях сжатых
сроков продолжают работу несмотря на рекомендации и останавливаются
31
только когда утомлены и в особенности при боли или дискомфорте.
Что в последствии проявляется в тендините, сильных шейных и
спинных болях и приводят к потере самооценки, снижению качества жизни,
ухудшению семейных отношений, такие осложнения здоровья, вызываемые
профессиональными
заболеваниям,
можно
было
бы
снизить
при
возможности замены длительных периодов печати, на альтернативный
способ ввода, например с помощью средств голосового интерфейса.
1.5. Специализированные голосовые интерфейсы, голосовой интерфейс в
разработке программного обеспечения
Использование обычных программ распознавания речи для разработки
программного обеспечения затруднено тем, что хотя и ключевые слова могут
быть распознаны, но большая часть кодовых текстов состоит из имен
переменных, названий процедур, которые представлены словосочетаниями
и/или аббревиату рами. Также в языках программирования использование
специальных/технических символов (отношения, сравнения, пунктуации)
синтаксически отличается от естественных языков.
Основные затруднения при использовании не специализированных
средств голосового интерфейса для разработки программного обеспечения:
 определение имен переменных, классов и функций;
 написание конструкций;
 написание конструкций;
 навигация;
 использование меню.
Определение имен переменных, классов и функций - если бы все имена
переменных и классов были одиночным английским словом, тогда это не
было бы проблематичным. В реальности это крайне редко, имена должны
отражать/описывать функцию или содержимое переменной. Компиляторы
32
требуют чтобы имена переменных не содержали пробелов, так что
программистам
приходится
концентрации/сопряжения
слов,
находить
сохраняя
различные
простоту
чтения.
методы
Самая
тривиальная из проблем заключается в том, что существующее программное
обеспечение распознавания речи спроектировано для задач диктовки текстов
и автоматически добавляет пробел между словами. Например, продиктовать
«CamelCase» или «under_score», используя Dragon Naturally Speaking
потребуется произнести:
«came, no space, capitalise next, case» или «under, no space, underscore, no
space, score».
Имена переменных обычно длиннее, чем два слова, и чем длиннее имя,
тем более значительно замедляется рабочий процесс, за счет увеличения
времени диктовки.
Написание конструкций - все конструкции циклов и «if» утверждение
обычно определяются наличием логического условия в скобках, при котором
секция кода исполняется. Именно скобками затрудняется диктовка и
использование этих конструкций становится неудобным.
Пример кода:
for(counter=0;counter<10;counter++)
{
printf(counter);
|}
Потребует произнести: «For, no space, open brackets counter equals−sign
zero. semi−colon. counter less−than ten semi−colon. counter plus−sign plus−sign
.close brackets. new line. open braces. print. no space. open brackets counter. close
brackets. semi−colon. new line. cose braces».
33
Навигация - проблема распространяющееся на все, что связано с
использованием средств голосовых интерфейсов. Обычно «мышь» позволяет
перемещать курсор, «прокручивать» документ вверх и вниз в поисках
необходимой
секции,
осуществляя
быструю
навигацию.
Типовыми
решениями проблемы навигации программного обеспечения распознавания
речи являются переходы в начало или конец предложения, или абзаца, или по
номеру строки, или на определенное количество строк, но в условиях
разработки
программного
обеспечения
необходимы
более
специализированные решения, также это недоступно тем кто не может
пользоваться своими руками или ограничен условиями окружения.
Использование меню - множество задач требует использования
различных меню (открытие, закрытие, сохранение файлов), что легко
реализуется «мышью», но трудно при помощи только голоса. Существует
традиционная реализация индикации своих намерений воспользоваться
опциями меню при помощи голосовой команды, на что в ответ программное
обеспечение
переходит
в
режим
«управления».
Задача
разработки
программного обеспечения потребует реализовать дополнительные режимы,
диктуемые из ее потребностей, но основным ограничением является то, что
обычно интерфейсы графически ориентированы и используют флаг
элементы,
списки
и
другие
диалоговые
элементы
-
затрудненное
использование списков и диалоговых элементов возможно, но использование
флаг элементов на первый взгляд кажется невозможным.
В
результате
требуется
как
минимум
адаптированная
или
специализированная, а может и в целом иная по типу система предоставления
средств голосового интерфейса в программировании.
Система предоставления средств голосового интерфейса позволит
людям с ограниченными возможностями открыть себе двери в огромную
индустрию,
в
противном
случае
недоступную
для
них,
а
также
34
программистам, которые в связи с травмами или заболеваниями ограниченны
в использовании стандартных интерфейсов, чтобы продолжать свою работу.
В мире также ведутся разработки программного обеспечения и
инструментов предоставления средств голосового интерфейса для разработки
программного обеспечения с различной степенью успеха. Приведем наиболее
заметные из них.
—
VoiceCode
Информационной
Консульства
программное
обеспечение
Технологии
Канады.
Задачей
инициатива Института
Национального
является
Исследовательского
разработка
инструментария
совместимых компонентов поддерживающего текущие лучшие практики
голосовых интерфейсов для разработки программного обеспечения.
ShortTalk
and
EmacsListen
—
разработка
специализированного
разговорного языка для человека-компьютерного взаимодействия.
Voice Grip – дополнительный макрос для редактора Emacs созданный с
целью упрощения использования коммерческого программного обеспечения
распознавания речи программистами программистам.
Java
by
voice
—
серия
макросов
для
редактора
Emacs
спроектированные для упрощенного ввода кода на языке Java.
Cache Pad – макрос для редактора Emacs для кэширования недавно
продиктованных имен функций и переменных пере использования.
Emacs VR Mode - макрос для редактора Emacs добавляющий
функционал «Select and Say» в редактор из Dragon Naturally Speaking.
На основании обзора предметной области, наибольшие результаты
достигнуты в распознавании отдельных звуков, слов и фраз, а также в
создании
программного
обеспечения
для
голосового
управления
операционными системами, мультимедийным программным обеспечением и
текстовыми редакторами.
35
Выявлено,
что
в
настоящее
время
мало
инструментов
предоставляющих специализированные средства голосового интерфейса, в
частности для разработки программного обеспечения, или это продукты
текущих исследований, а не полноценное/коммерческое программное
обеспечение.
Данная работа ставит перед собой две цели:
 первая, разработка модульной интегрируемой системы предоставления
средств
голосового
интерфейса
для
разработки
программного
обеспечения и ее программной реализации, с совместимостью с любым
пакетом программного обеспечения распознавания речи, для основных
и мобильных платформ;

второй целью является улучшение задачи программирования, а также
функционала
программного
обеспечения,
и
разработка
средств
специализированного голосового интерфейса.
36
ГЛАВА 2. АДАПТАЦИЯ ТЕХНОЛОГИЙ ГОЛОСОВОГО
ИНТЕРФЕЙСА И РАСПОЗНАВАНИЯ РЕЧИ К РАЗРАБОТКЕ
ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ. ПРОЕКТИРОВАНИЕ СИСТЕМЫ
2.1. Анализ задачи программирования
Программирование как задачу можно разбить на четыре области:
 написание;
 отладка;
 компиляция;
 исполнение.
Программист обычно пишет небольшую секцию для решения
конкретной проблемы. Затем эта часть кода компилируется, если компиляция
успешна, запускается и тестируется с применением инструментов отладки.
Когда код исполняется правильно, то код расширяется для выполнения
большей задачи. Процесс повторяется до того момента когда код решает всю
поставленную задачу. Таким образом за написанием следует исправление
ошибок тестирование и отладка. Программист обычно работает в среде,
которая предоставляет инструменты для выполнения всех четырех функций.
Написание кода в свою очередь обычно делится на следующие задачи
(зависит от языка программирования):
 определение имени класса;
 определение используемых функций;
 определение переменных используемых в функциях;
 манипуляция переменными с использованием вызова других функций
или специфических конструкций for и while циклов, if и switch
конструкций.
37
Если одно и тоже задание дать группе программистов результат будет
разный потому, что у программистов есть личный стиль.
Несколько вещей определяющих стиль программиста:
 способ записи и именования переменных, классов и функций;
 структура и группирование кода;
 положение скобок;
 отступы в коде;
 использование комментариев.
Далее произведем иерархический анализ показывающий различные
шаги, которые пользователь выполняет на каждой стадии написания кода.
Основные стадии написания кода:
 открытые файл;
 редактирование файла;
 сохранение файла;
 компилирование файла;
 выход.
Каждая стадия задачи будет раскрыта далее. Анализ проводится для
объектно-ориентированных языков, таких как Java или С++, но основные
задачи и их субзадачи будут одинаковы для любого современного языка
программирования. Все задачи ниже второго уровня содержат все себе
процесс печати или диктовки в редакторе, а для задачах ниже уровнем
редакторы предоставляют соответствующие инструменты.
Задачи выше второго уровня обобщенно больше представляют собой
мыслительный процесс, чем реально исполняемые действия, где возможно,
задачи ниже четвертого уровня необходимо автоматизировать.
38
Открытие файла:
 выбор Открыть файл опции;

ввод имени открываемого файлы или щелчок курсором по имени файла
в отображаемом списке.
Редактирование Файла:
Уровень 1:
 подключение необходимых библиотек;
 определение нового класса;
 определение новой функции/метода.
Уровень 2:
 ввод ‘#include’;
 ввод имени используемой библиотеки;
 ввод ключевого слова ‘class’;
 ввод имени класса;
 определение области класса;
 определение классовых переменных;
 определение конструктора класса;
 определение области функции;
 определение типа результата функции;
 определение входных параметров функции;
 определение тела функции;
 определение новой переменной;
 присвоение значение переменной;

использование функции.
39
Уровень 3:
 определение наследуемого/расширяемого класса;
 ввод директивы наследования/расширения;
 ввод имени родительского/супер класса;
 ввод пар (тип/класс, имя) параметров;
 определение области переменной;
 определение типа переменной;
 определение имени переменной;
 определение параметров конструктора;
 определение тела конструктора;
 определение используемой функции/метода;
 определение параметров используемой функции/метода;
 определение используемых функцией переменных;
 определение переменной для присвоения;
 присвоение значений используемым функцией переменным;
 присвоение значения;
 использование ‘if ‘ оператора;
 использование ‘else’ оператора;
 использование ‘for’ оператора;
 использование ‘while’ оператора;

использование ‘do.. while’ оператора.
Уровень 4:
 ввод ключевых слов ‘if ‘, ‘else’, ‘for’, ‘while’, ‘do.. while’;
 инициализация начальных значений переменных/итераторов;
 задание условия сравнения с переменной/константой или остановки
цикла;
 постановка открывающих/закрывающих скобок;
40
 постановка символьных операторов языка;
 постановка точки с запятой.
Сохранение файла:
 выбор сохранить файл опции;
 ввод имени, с которым сохраняется файл или;
 выбор Сохранить опции (если файл был предварительно сохранен).
Закрытие файла:
 выбор Закрыть файл опции;
 если запрошено сохранение изменений выбор между опциями Да или
Нет.
Закрытие приложения:
 выбор выйти из приложения опции;
 сохранение файлов;

подтверждение выхода.
Ниже третьего уровня действия синтаксически ориентированы (зависят
от языка программирования) на этом уровне диктовка синтаксиса наиболее
затруднена, а при печати происходит наибольшее количество опечаток. Если
бы синтаксис языков содержал бы меньше технических и вспомогательных
символов и позволялись бы пробелы после символов пунктуации, тогда бы
задача предоставления средств голосового интерфейса была бы проще.
2.2. Условия разработки системы и ее программной реализации
Развитие вычислительной техники сопровождается созданием новых и
совершенствованием существующих языков программирования. Появляются
новые тренды в ИТ: облачные вычисления, мобильные технологии,
мультипроцессорная разработка.
41
В настоящее время существует достаточно большое количество языков
программирования, всевозможных типов от функциональных до объектноориентированных, продолжают создаваться новые и совершенствоваться уже
существующие. Далее в таблице 1 представлены наиболее востребованные
языки программирования за последние 5, 15, и 25 лет по данным индекса
TIOBEА.
Язык
программирования
Табл.1
Наиболее востребованные языки программирования
Май
Май
Май
Май
2013
2008
1998
1988
С
1
2
1
1
Java
2
1
3
-
Objective-C
3
42
-
-
C++
4
3
2
5
C#
5
8
-
-
PHP
6
4
-
-
(Visual)Basic
7
5
4
8
Python
8
7
28
-
Perl
9
6
6
-
Ruby
10
10
-
-
Lisp
13
16
19
2
Ada
23
17
10
3
Индекс TIOBEА — индекс, оценивающий популярность языков
программирования, на основе подсчета результатов поисковых запросов,
содержащих название языка. Для формирования индекса используется поиск
в нескольких наиболее посещаемых порталах: Google, Blogger, Wikipedia,
YouTube, Baidu, Yahoo!, Bing, Amazon. Расчет индекса происходит
ежемесячно и он может быть полезен при принятии стратегических
решений[18].
42
В таблице 2 приводятся наиболее перспективные языки программирования.
Табл. 2
Наиболее перспективные языки программирования
Язык
программи
рования
Описание
Dart
Разрабатывается Google. Предназначен для замены JavaScript и
нацелен на то что бы сделать разработку интерактивных Web
приложений удобнее и быстрее. Похож по синтаксису на C. При
компиляции просто конвертируется в JavaScript.
Ceylon
Разрабатывается RedHat. Ставит целью улучшить синтаксис
Java, адаптировать его к текущим потребностям разработчиков.
Комбинируется в Java, выполняется в JVM.
Go
Разрабатывается Google. Предназначен не только для разработки
приложений, но и для системного программирования. Не имеет
виртуальной среды исполнения (как Java или C#), но имеет
garbage collector. По синтаксису похож на С.
F#
Разработчик
Microsoft.
Функциональный
язык
программирования - исполняется в среде .NET, использует все
наработки на C# или Visual Basic. Поддерживается средой
разработки Mono, что дает возможность использовать его на Mac
и Linux платформах. Поддерживает асинхронность, параллелизм
и др. Компилируется в CLI код.
Opa
OpenSource разработка. Предназначен для разработки и клиента,
и серверной логики и слоя доступа в базы данных. Клиент
компилируется в JavaScript, для серверной части есть
виртуальная машина.
Fantom
OpenSource
разработка.
Предназначен
для
кроссплатформенности - код может выполняться и в JMV и в
.NET. Планируют так же добавить поддержку iOS. Похож на C,
призван улучшить его синтаксис, включает поддержку
функционального программирования и конкурентного доступа
(многопоточности).
X10
Разработчик IBM. Предназначен под параллельные вычисления.
Для поддержки конкурентного доступа использует программную
модель
партиционированного
глобального
адресного
пространства. Код и данные разделяются по отдельным юнитам
и распространяются в виде изолированных "place".
43
Соответственно это позволяет достаточно быстро сделать
программу распределенный, путем просто размножения places, а
т.к. поддержка конкурентного доступа и изоляция данных идет
на уровне исполнения не требуется поддержка этого
непосредственно в коде. Компилируется в Java, либо в C++,
выполняется в своей виртуальной среде, либо в JVM. Доступны
сборки для разных платформ и средства разработки и отладки (в
среде Eclipse).
Также, в настоящее время, существует множество сред разработки
программного обеспечения Далее рассмотрим наиболее востребованные и
доступные из них.
Qt Creator - кроссплатформенная свободная интегрированная среда
разработки - Integrated Development Enviroment (IDE) - для разработки
программного обеспечения на языках С, С++ и QML. Разработанная Trolltech
(Digia) для работы с фреймворком Qt, которая является частью Qt SDK.
Включает в себя графический интерфейс отладчика, с возможностью отладки
приложений на QML и отображения данных из контейнеров Qt, и визуальные
средства разработки интерфейса как с использованием QtWidgets и/или QML.
Поддерживает компиляторы: Gcc, Clang, MinGW,MSVC, Linux ICC, GCCE,
RVCT, WINSCW[19].
Eclipse — свободная кроссплатформенная интегрированная среда
разработки кроссплатформенных приложений. Развивается и поддерживается
Eclipse Foundation.
Eclipse служит в первую очередь платформой для разработки
расширений, чем он и завоевал популярность, любой разработчик может
расширить Eclipse своими модулями. Уже существуют Java Development Tools
(JDT), C/C++ Development Tools (CDT),а также средства для языков Ada,
COBOL, FORTRAN, PHP и пр. от различных разработчиков. Множество
расширений дополняет среду Eclipse менеджерами для работы с базами
44
данных, серверами приложений и др.
Eclipse разработана на языке Java, потому является платформонезависимым продуктом, за исключением библиотеки Standard Widget Toolkit
(SWT), которая разрабатывается для всех распространенных платформ.
Библиотека SWT используется вместо стандартной для Java, библиотеки
Swing. Она полностью опирается на нижележащую платформу[20].
Microsoft Visual Studio — включает в себя интегрированную среду
разработки
программного
обеспечения,
а
также
ряд
других
инструментальных средств. Данные продукт позволяет разрабатывать
программное обеспечение, а также веб-сайты, веб-приложения, веб-службы
для всех поддерживаемых платформ Microsoft Windows, Windows Mobile,
Microsoft Silverrlight и др.
Visual Studio позволяет создавать и подключать сторонние дополнения
(плагины) для расширения функциональности практически на каждом
уровне, включая добавление поддержки систем контроля версий исходного
кода (как например, Subversion и Visual Source Safe ), добавление новых
наборов инструментов[21].
Xcode — программа для разработки приложений под OS X и iOS,
разработанная компанией Apple и распространяется бесплатно через Apple
App Store.
Основным приложением пакета является встроенная среда разработки,
которая называется Xcode. Помимо этого, пакет Xcode включает в себя
большую часть документации разработчика от Apple и Interface Builder —
приложение, использующееся для создания графических интерфейсов.
Пакет Xcode поддерживает языки программирования C, C++, ObjectiveC, Objective-C++, Java, AppleScript, Python и Ruby с различными моделями
программирования, включая (но не ограничиваясь) Cocoa, Carbon и Java, и
включает в себя необходимые для этого инструменты,а также использует
45
GNU Debugger (GDB) в качестве back-end’а для своего отладчика[22].
NetBeans — свободная интегрированная среда разработки приложений
на языках программирования Java, JavaFX, Python, PHP, JavaScript, C, C++,
Ада и ряда других.
NetBeans поддерживает плагины, позволяя разработчикам расширять
возможности среды.
NetBeans доступна в виде готовых дистрибутивов для платформ
Microsoft Windows, Linux, FreeBSD, Mac OS X, OpenSolaris и Solaris, для всех
остальных платформ доступна возможность скомпилировать NetBeans
самостоятельно[23].
Такое разнообразие языков программирования, сред разработки,
технологий распознавания речи (глава 1), их целевых платформ и бурное
развитие отрасли - говорят о необходимости уже на этапе разработки
системы
предоставления
ограничения,
платформах
модификации,
средств
возможность
применения
(кроссплатформенность)
расширению
голосового
и
и
и
интерфейса,
разработки
закладывать
адаптации,
для
на
учитывать
различных
возможности
поддержания
к
своей
востребованности и конкурентоспособности.
2.3. Концептуальная архитектура модульной, интегрируемой системы
предоставления средств голосового интерфейса
Для решения задач программирования с учетом вышеописанных
тенденций и условий развития отрасли информационных технологий,
вытекающих из них ограничений, разработана следующая концептуальная
архитектура модульной, интегрируемой системы предоставления средств
голосового интерфейса.
46
47
Описание схемы представленной на рис. 2:
 центральная система — управляет модулями и их взаимодействием,
предоставляет
пользовательский
интерфейс,
а
также
средства
управления и конфигурации модулей;
 модули плагинов/расширений:
 модули
интеграции
с
системами
распознавания
речи
—
плагины/расширения обеспечивающие управление, конфигурацию,
передачу информации и другие виды взаимодействия ядра и
системы распознавания речи;
 модули
поддержки
программирования
голосового
—
интерфейса
плагины/расширения
языков
предоставляющие
преобразование результатов распознавания речи в соответствующие
команды,
директивы,
конструкции
языка
программирования,
поддерживающие возможность управления и конфигурации;
 модули интеграции сред разработки программного обеспечения —
плагины/расширения
трансляции,
преобразования,
исполнения
команд системы средствами среды разработки.
Рассмотрим далее задачу разработки и выбора платформы плагинов, с
целью определения возможных условий критериев и ограничений, учитывая
кроссплатформенность и необходимость взаимодействия с компонентами
производимыми сторонними разработчиками.
2.4. Платформа плагинов и расширений
Поддержка плагинов необходима, если стоит задача разработать
успешную, динамическую систему. Основанное на плагинах расширение —
лучшая практика для безопасного расширения и эволюции системы.
Плагины позволяют сторонним разработчикам и энтузиастам:
 дополнять систему без риска дестабилизации основного функционала;
48
 способствуют изоляции проблем;
 гарантируют сокрытие деталей реализации;
 дают возможность изолированного тестирования.
Разработка плагинов и их платформ на C++ затрудняется:
 специфичностью по платформе и компилятору;
 отсутствием в стандарте C++ спецификации Аpplication binary
interface(ABI) - библиотеки от различных компиляторов и даже
различных версий одного и того же не совместимы;
 отсутствием концепции динамической загрузки и каждая платформа
решет это по своему.
Но на практике C++ является единственным решением при разработке
высокопроизводительных систем. Рассмотрим вышеописанные проблемы.
Отсутствие стандартного ABI — различные компиляторы, а также
различные их версии производят различные объектные файлы и библиотеки.
Самым
явным
примером
данной
проблемы
являются
алгоритмы
«коверканья» имен, реализованные в различных компиляторах. В начале
возникает впечатление, что линковка объектных файлов и библиотек
возможна только в том случае, когда они скомпилированы абсолютно
идентичным компилятором. Частичным решением является доступ через
виртуальный указатель и вызов только виртуальных функций, обходя
проблему «коверканья» имен, он нет гарантии, что формат таблиц
виртуальных методов будет одинаковым для различных компиляторов.
Также в условиях динамической загрузки C++ кода возникает
дополнительная проблемы - не существует способа прямой загрузки и
создания экземпляра объекта класса C++ из динамической библиотеки на
платформах Linux и Mac OS X.
Далее
рассмотрим
ситуацию
линковки
(конкретно
в
случае
49
динамической загрузки) более подробно на примерах.
class foo {
public:
foo( int i ) : i_(i) { }
virtual int VirtualDo( int i );
int Check( int i );
int get_i( ){ return i_; }
bool operator < (int i){ return i_}
static int StaticDo( );
private:
int i_;
};
Из листинга (образца исходного кода с целью демонстрации) на
практике получается следующий результат линковки:
 конструктор foo(int i) является inline и не требует линковки. Поясним
inline
-
рекомендация
компилятору
встроить
тело
функции
непосредственно в место ее вызова;
 виртуальный метод VirtualDo( int i ) - запись в таблице виртуальных
функций, а значит для компилятора и компоновщика это табличный
индекс;
 Check( int i ) — метод требует линковки т. к. опирается на внешнюю
реализацию;
 get_i( ) — inline метод не не требует линковки;
 operator < (int i) - inline функция не требует линковки;
 StaticDo( ) - требует линковки (что распространяется на все static члены
классов);
 переменная член класса i_ - тип и смещение в бинарном объекте
50
соответственно не требует линковки.
В итоге получается, что только статические члены и не virtual, не inline
члены требуют линковки.
Перед дальнейшим рассмотрением, приведем основные понятия о
виртуальных методах:
 каждый класс с одним и более виртуальным методом имеет
уникальную таблицу виртуальных методов;
 таблицы виртуальных методов связаны с типом, а не с экземпляром
объекта типа;
 указатель на таблицу виртуальных методов (если он есть) всегда
записывается в начало структуры данных объекта;
 виртуальная функция — во время исполнения это индекс в таблице
виртуальных методов, где хранится адрес функции;
 производные классы имеют копию таблицы виртуальных методов
базового класса в своей таблице виртуальных методов. Новые методы
добавляются в конец скопированной таблицы.
Таблица виртуальных методов сама по себе хранится внутри
динамической библиотеки, следовательно в случае создания экземпляра
объекта
внутри
динамической
библиотеки,
владеющей
необходимой
таблицей, не требуется линковка.
Теперь перейдем к механизму наследования в C++.
Рассмотрим следующий листинг:
class bar {
public:
virtual const char *get_member( );
virtual void set_member( const char *value );
};
51
class foobar : public foo, public bar {
public:
virtual int VirtualDo( int i );
virtual void set_member( const char *value );
private:
int j_;
};
Класс foobar имеет два базовых класса и переопределяет методы
каждого из них, такое наследование во время исполнения сводится к
представленной в таблице 3 структуре данных:
Смещение,
Табл.3
Структура данных
Элемент структуры данных
машинное слово
0
Virtual Pointer (VPTR) foobar
1
i_ (базового класса)
2
j_ (производного класса)
3
VPTR bar
Таблица 4 виртуальных методов в свою очередь будет иметь вид:
индекс
Табл.4
Виртуальных методов
Указатель на метод, имя метода
0
foobar::VirtualDo(int i)
1
bar::get_member();
2
bar::set_member(const char *value)
52
53
Структура данных все же может отличатся в зависимости от
используемого компилятора, но неизменным остается:
 VPTR (если есть) всегда помещается первым в объект;
 первый виртуальный метод объявленный в базовом классе занимает
ячейку с индексом 0 в Virtual method table (VTable);
 все другие виртуальные методы помещаются в порядке объявления.
Для производных классов:
 производный класс наследует исходную таблицу виртуальных методов
от первого базового класса содержащего такую таблицу — основного
базового класса;
 новые виртуальные методы добавляются в конец VTable производного
класса в порядке объявления;
 остальные базовые классы с VTable помещаются полностью в объект,
включая копию VTable дополнительного базового класса;
 таблица виртуальных методов дополнительного базового класса может
быть изменена — методы можно переопределить, но не может быть
дополнена.
Так же есть несколько исключений:
 порядок виртуальных методов в VTable не соответствует порядку их
объявления для некоторых компиляторов (например компилятор для
Microsoft Visual C++);
 виртуальные деструкторы обрабатываются по разному различными
компиляторами.
Главным все же является то,что наследование само по себе как
единичное, так и множественное не создает потребности в линковке.
54
Таким образом можно характеризовать класс, код которого доступен
для использования как в основном программном обеспечении, так и в
плагинах, созданных с использованием различных компиляторов - позволяет
кросскомпиляторное взаимодействие:
 с одним и более (не использующим шаблон, не виртуальным) базовым
классом;
 с любым количеством виртуальных или inline методов;
 с операторами, которые либо виртуальные, либо inline;
 c любыми не статическими членами и полями данных.
Необходимо учесть, что для функций-членов оба компилятора должны
использовать
одинаковую
размерность
и
упаковку
данных.
Для
преобразования типов нужно также учитывать смещения для адресов
компилятора источника (плагина или приложения) — здесь становится
разумным применить методы с линковкой языка С, использующие в своей
реализации шаблон проектирования «фабрика», для создания, удаления,
преобразования и других зависящих от компилятора операций над объектами.
Учитывая главное условие кроссплатформенности для разработки из
существующих платформ плагинов остаются следующие:
 Qt Plugin Platform;
 DynObj — C++ crossplatform plugin framework.
На основе современных отраслевых условий, критериев и ограничений
в
разработке программного обеспечения - выбрана платформ плагинов
DynObj для прототипизации и разработки, так как соответствует требованию
кроссплатформенности и обладает возможностью кросскомпилятроного
взаимодействия.
55
2.5. Инструменты разработки
Из доступных на рынке и в отрасли инструментов разработки
программного обеспечения, по критериям доступности, наличия и полноты
документации, условиям лицензирования и стоимости, были выбраны
следующие инструменты и приведены их описание и основные особенности.
Simplified Wrapper and Interface Generator (SWIG) — свободный
инструмент для связывания (англ.) программ и библиотек написанных на
C/C++ со скриптовыми языками, такими как Tcl, Perl, Python, Ruby, PHP или
другими языками (Java, C#, Scheme или OcamlP). SWIG можно использовать,
модифицировать и распространять практически без ограничений, для
коммерческих и некоммерческих целей. Основная цель — достигнуть связи с
минимальными усилиями. В файлы заголовка программы добавляется
небольшое количество указаний, по которым SWIG генерирует исходный код
для связывания C/C++ и нужного языка.
В зависимости от языка, результат связывания может быть представлен
в трех формах:
 исполняемый
файл
исходной
программы
со
встроенным
интерпретатором скриптового языка;
 разделяемая библиотека, к которой существующий интерпретатор
может подключаться в виде расширения;
 разделяемая библиотека, которая может подключаться к другим
программам, написанным на нужном языке (например, с помощью JNI
для Java)[24].
Qt Software Development Kit (SDK) включает в себя инструменты,
необходимые для сборки десктопа, встроенных и мобильных приложений с
Qt[25].
56
Можно выбрать для установки следующие цели и инструменты:
 средства разработки:
 инструмент цепи для разработки приложений для рабочего стола
(доступно на Windows, Linux и Mac OS);
 Symbian инструмент цепи для разработки приложений для Symbian
устройств (только для Windows);
 Qt Creator интегрированной среды разработки (IDE);
 Qt Simulator для тестирования мобильных функций API;
 Qt Assistant;
 Qt Designer;
 Qt Лингвист.
 документация;

служба удаленного компиляции, которая обеспечивает простой,
стандартизированной среду для создания приложений на Qt и создания
инсталляционных пакетов для Symbian, Maemo, MeeGo Harmattan и
устройств.
Поддерживаемые платформы:
 рабочий стол;
 Qt Simulator;
 Maemo 5;
 MeeGo Harmattan;
 Symbian.
Компилятор GCC[26]. GNU Compiler Collection (GCC, ранее GNU
Compiler С Collection) - это свободно доступный из самых распространенных
компиляторов на многих Unix-подобных системах, таких как GNU/Linux,
члены семейства систем BSD, Mac OS X и др, и позволяют генерировать код
для множества процессоров. GCC компилирует код программ в объектные
57
модули для компоновки полученных модулей в единую исполняемую
программу. Поддерживаются следующие языки программирования:
 C++,
 Objective-C,
 Objective-C++,
 Fortran,
 Java,
 Ada.
CMake — это кроссплатформенная система автоматизации сборки
программного обеспечения из исходного кода. CMake не осуществляет
сборку проекта, он лишь генерирует из своих CMakeLists.txt файлов
Makefile для конкретной платформы, например может быть сгенерирован
проект Microsoft Visual Studio, NMake makefile, проект XCode для MacOS,
Unix makefile, Watcom makefile, проект Eclipse или CodeBlocks[27].
Cygwin представляет собой инструмент для портирования ПО UNIX в
Windows, включает в себя инструменты разработки GNU для выполнения
основных задач программирования, а также и некоторые прикладные
программы, эквивалентные базовым программам UNIX, обеспечивает тесную
интеграцию Windows приложений, данных и ресурсов с приложениями,
данными и ресурсами UNIX-подобной среды. Из среды Cygwin можно
запускать обычные Windows приложения, также можно использовать
инструменты Cygwin из Windows.
Cygwin состоит из двух частей: динамически или статически
подключаемая библиотека, которая обеспечивает совместимость и реализует
значительную часть стандарта POSIX и огромная коллекция приложений,
которые обеспечивают привычную среду UNIX, включая Unix shell, и
распространяется под GNU General Public License v2[28].
58
Android Native Development Kit (NDK) это набор инструментов,
который позволяет встраивать компоненты, которые используют машинный
код в Android приложении. Android приложения, запущенные в виртуальной
машины Dalvik, позволяет реализовать части вашего приложения, используя
язык программирования C/C++. Это может обеспечить преимущества для
определенных классов приложений, в виде повторного использования
существующего кода, а в некоторых случаях увеличение скорости.
Android NDK обеспечивает:
 набор инструментов и создавать файлы, используемые для создания
собственных библиотек кода C и C++ источников;
 способ внедрения соответствующих родной библиотеки в файл
приложения пакета, которые могут быть развернуты на устройствах
Android;
 набор собственных заголовков системы и библиотеки, которые будут
поддерживаться во все будущие версии платформы Android;
 документация, примеры и учебники.
Последний выпуск NDK поддерживает эти наборы инструкций
микропроцессоров архитектуры Advanced RISC (Restricted (reduced instruction
set computer) Machine (ARM):
 ARMv5TE (включая Thumb-1 инструкцию);
 ARMv7(в
том
числе
Thumb-2
и
VFPv3-D16
инструкции,
с
дополнительной поддержкой для NEON/VFPv3-D32 инструкции);
 ARMv5TE машинный код будет работать на всех ARM-устройств на
базе Android;
 NDK обеспечивает стабильные заголовки Libc (библиотеки C), в
libm’ах (математическая библиотека), OpenGL (3D графическая
библиотека), интерфейс JNI, и другие библиотеки [29].
59
Apache Another Neat Tool(Ant) — платформонезависимая утилита для
автоматизации процесса сборки программного продукта, в отличие от другого
сборщика проектов Apache Maven, обеспечивает императивную, а не
декларативную сборку проекта.
Утилита Ant полностью независима от платформы, требуется лишь
наличие установленной рабочей среды Java — Java Runtime Enviroment (JRE).
Отказ от использования команд операционной системы и применение
Extensive
Markup
Language
(XML)
обеспечивают
переносимость
сценариев[30].
Также для осуществления распознавания речи будет осуществлена
интеграция с системой распознавания речи Sphinx, в частности с ее
облегченной версией PocketSphinx.
60
ГЛАВА 3. РАЗРАБОТКА ПРОТОТИПА ПРОГРАММНОЙ
РЕАЛИЗАЦИИ СИСТЕМЫ И СПЕЦИАЛИЗИРОВАННЫХ СРЕДСТВ
ГОЛОСОВОГО ИНТЕРФЕЙСА
3.1. Архитектура прототипа программной реализации
Архитектура программной реализации системы, в свою очередь,
стремится максимально соответствовать предложенной, в предыдущей главе,
концептуальной архитектуре.
Общая архитектура состоит из:
 центральной системы;
 группы плагинов и расширений:
 интеграции с системами распознавания речи — предоставляют
системе
доступ
распознавания
к
компонентам
речи,
могут
и
возможностям
разрабатываться
систем
сторонним
разработчиком с использованием широкого спектра инструментов;
 средств голосового интерфейса для языков программирования —
предоставляют системе представления голосовых команд и других
средств голосового интерфейса и соответствующие директивы,
операции и шаблоны языков программирования;
 интеграции со средами разработки программного обеспечения —
предоставляет доступ к компонента и возможностям среды
разработки программного обеспечения для исполнения действий и
задач системы.
Центральная система управляет информационными потоками и их
взаимодействием, а также взаимодействует с операционной системой, она
также имеет модульную архитектуру и состоит из пяти не разделяемых
модулей:
61
 менеджер конфигурации — хранит и управляет общей конфигурацией
системы, а также всеми конференциями всех плагинов и расширений;
обеспечивает целостность и работоспособность конфигурации и
уведомляет другие части системы и модули об ее изменениях;
 менеджер ресурсов — обеспечивает организованный доступ к
ресурсам: файловых систем, сети, межпроцессного взаимодействия,
внешних устройств;
 диспетчера исполнения и синхронизации — предоставляет средства
синхронизации для параллельных и асинхронных задач и процессов
системы, а также контролирует и уведомляет о статусе их исполнения;
 менеджер голосового интерфейса — содержит в себе все представления
голосовых команд и других средств голосового интерфейса и
соответствующие им директивы и сценарии, или ссылки на них.
3.2. Описания программной реализации
Представлена
диаграмма
компонентов
на
рис.3
программной
реализации прототипа системы иллюстрирующая статическую структуру,
показывая разбиение программной системы на рассматриваемые в качестве
классификаторов
структурные
компоненты,
организацию
наборов
компонентов, и связи (зависимости) между компонентами, и учитывая, что
одни компоненты могут существовать только на этапе компиляции
программного кода, другие - на этапе его исполнения.
Диаграмма активности рис. 4 приведена для описания схема работы
прототипа
программной
моделирования
реализации
выполнения
системы
операций
и
используется
визуализации
для
особенностей
реализации операций классов и представления алгоритмов их выполнения.
62
63
Рис. 3 Диаграмма компонентов программной реализации прототипа си
64
стемы
65
Рис. 4 Диаграмма активности программной реализации прототипа си
66
стемы
Приведено графическое описание прототипа программной реализации
с использованием языка объектного моделирования в области разработки
программного обеспечения UML (Universal Meta Language) как наиболее
наглядного средства визуализации, проектирования и документирования.
Сложность, производительность и время отклика системы напрямую
зависит от используемых ей в конкретный момент времени модулей и
компонентов, а также от пользователя и вида его деятельности.
3.3. Разработанные общие решения и функционал голосового интерфейса
С использованием прототипа программной реализации системы был
разработан функционал, который является ключевым для облегчения задачи
программирования средствами голосового интерфейса и облегчению работы
пользователя.
Замена ключевых слов.
Простейший метод замены «ключевых» слов — подстановка текста
сразу после диктовки, без обращения к пользователю. Другой метод,
например, отображение подставленного текста и запрос подтверждением от
пользователя, такая и подобные ей альтернативы, на практике лишь
замедляют процесс написания программного кода, не упрощая его.
В реализации использован «гибридный » метод, в котором по
умолчанию применяется подстановка и есть возможность, использовав
«командное» слово временно или постоянно отображать текст подстановки
для дальнейшего редактирования и подтверждения пользователем.
Пользователь также может определять «ключевые» слова, которые могу
быть заменены другим текстом для ускорения процесса программирования.
Например, пользователь может выбрать замену для слова «comment» текстом
«//comment by [author] [CurrentDate]», [author] и [CurrentDate] будет
автоматически заменено на имя пользователя, а $CurrentDate на текущую
67
дату. «Ключевые» слова могут быть заменены на текст любой длинны и для
большего удобства и контроля, пользователь также может указать позицию
курсора после замены.
Работа с конструкциями языка программирования.
Необходимо
также
распознавать
конструкции
и
производить
автоматическое форматирование.
Например, для диктовки кода:
for(iterator=0;iterator<10;iterator++)
{
}
Пользователю потребуется произнести фразу «for iterator equals zero.
Iterator less-then ten. Iterator increasing (plus plus)». Стремясь сохранять
диктовку как можно более естественной и экономить время, убрана
необходимость
диктовать
вспомогательные
символы.
В
отличии
от
«ключевых» слов голосовые команды для структур можно модифицировать
только частично. Изменению подлежит только форматирование текста кода
подстановки, так как общая структура конструкции специфицируется
стандартом языка программирования.
Работа с white space
white space — любой символ или серия символов, которые
представляют горизонтальное или вертикальное пространство в типографии.
В языках программирования white space может не только выполнять функции
форматирования, но и являться частью синтаксиса. Работа white space
осуществляется в соответствии с правилами, спецификациями, стандартами
языков программирования.
Представленный функционал создается на основе синтаксиса языка
программирования, исходя спецификации и стандарта, являющегося его
часть, следовательно создание такого функционала выносится в состав
68
разработки плагина средств голосового интерфейса для соответствующего
языка программирования.
Режимы интерфейса.
Для
решения
возможных
конфликтов,
снижения
точности
распознавания и предотвращения избыточного роста множества команд были
введены вертикальная иерархия приоритета для глобальных команд и
режимы для разделения основных видов деятельности при разработке
программного
обеспечения
и
увеличения
возможностей
адаптации
голосового интерфейса под нужды пользователя. Для устранения возможных
конфликтов команд в глобальном и отдельно взятом множестве используется
пара с более высоким приоритетом.
Вертикальная иерархия приоритетов режимов и множеств команд:
 глобальные команды;
 General mode — общий режим включает в себя общие команды
системы, а также плагинов и расширений;
 Edit mode — режим редактирования, включающий в себя общие
команды редактирования, команды языка программирование, а также
другие специализированные команды, предоставляемые плагинами для
редактирования;
 Build/debug
mode
—
содержит
команды
сборки
и
отладки
предоставляемые плагинами интеграции со средами разработки и
другими инструментами;
 пользовательские режимы - создаются и настраиваются пользователем.
Списки переменных, методов, классов.
Программисты обычно используют различное форматирование для
имен переменных, функций, типов поэтому было целесообразным разделить
работу с именами переменных, типов, методов, классов. Цель решения в
69
вести списки продиктованных имен, в связи множеством возможных
различных подходов и реализаций в дальнейшем логичным перенести этот
функционал в плагины интеграции со средами разработки, так как там уже
реализованы системы индексации, представления и анализа кода, что опять
облегчит разработку системы и интеграцию стороннему разработчику.
3.4. Разработанные средства голосового интерфейса
Разработанные и реализованные решения представляют прототипы
средств голосового интерфейса для задач, описанных в иерархическом
анализе задачи программирования, учитывающие потребность к адаптации
действий пользователя к диктовке и сохранения стандартной модели
действий в рамках целей пользователя, и приведены в таблицах с 5 по 28.
Следует понимать:
 Какое воздействие окажет на пользователя взаимодействие с системой?
 Какие мыслительные процессы требуется учитывать?
 Какие проблемы могут возникнуть в процессе обучения?
Процесс анализа и разработки голосового интерфейса:
 описать изначальные цели пользователя;
 разработать подходящую последовательность действий;
 проанализировать процесс решения.
Цель пользователя
Необходим ые
действия
Открыть файл с указанным
Произнести «General
именем из указанной директории: mode open»
Выразить намерение открыть файл Произнести имя файла
Передать имя и местоположение
файла для открытия
Табл. 5
Открытие файла
В сравнении
Выбрать меню
«File»
Выбрать опцию
«Open file» и
Ввести имя файл
70
Цель пользователя
Табл. 6
Закрытие файла
В сравнении
Необходимые
действия
Закрыть текущий
Произнести
файл
«General mode close
Выразить намерение file/tab»
закрыть файл
Цель пользователя
Сменить окно/вкладку
Выразить намерение
сменить к работе с другим
файлом/инструментом
Выбрать меню «File»
Выбрать опцию «Close file»
Выбрать вкладку/окно
Открыть контекстное меню
Выбрать опцию «Close file»
Выбрать вкладку/окно
Закрыть при щелчком мыши по
знаку «Х»
Необходимые действия
Произнести
«Window/Tab number»
Табл. 7
Смена окна/вкладки
В сравнении
Выбрать мышью
необходимое
окно/вкладку
Произнести «View
filename»
Выбрать меню
«Window»
Выбрать имя
окна/вкладки
Примечание: Сильно зависит от интеграции со средой разработки
программного обеспечения.
Цель пользователя
Необходимые действия
Табл. 8
Изменение опций
В сравнении
Найти список опций Произнести «General
Изменить значение mode [option name]
параметра
off/set to [integer]/string
[string text]»
Выбрать меню «File»
Выбрать опцию «Options»
Выбрать соответствующую
вкладку
Выбрать необходимую опцию
Изменить значение
Подтвердить изменения
Примечание: Другая структура выполнения задачи. Есть ограничения при
71
работе со строчными параметрами (пути, расширения).
Цель пользователя
Необходимые действия
Табл. 9
Закрытие приложения
В сравнении
Закрыть приложение
Произнести «General mode Выбрать меню «File»
all/primary/secondary exit » Выбрать опцию «Exit»
Примечание: Не очевидно, что использование маркера «exit» возможно
отдельно в других ситуациях, следовательно разумно здесь применить его как
параметр, также «primary» псевдоним для среды разработки программного
обеспечения, а «secondary» для системы, что в начале потребует привыкания
от пользователя.
Цель пользователя
Необходимые действия
Табл. 10
Добавление файла
В сравнении
Добавить файл в проект Произнести «General
Выбрать меню «Project»
Выразить намерение
mode add file/resource
Выбрать субменю «add»
добавить новый файл в [filename]»
Выбрать опцию
проект
«file/resource»
Поименовать новый
файл
Примечание: Возможность добавления и ограничения и по видам и типам
добавляемых файлов и ресурсов зависят от интеграции со средой разработки
программного обеспечения.
Цель пользователя
Табл. 11
Сохранение файла под другим именем
Необходимые действия
В сравнении
Сохранить файл под
Произнести «General
Выбрать меню «File»
иным именем
mode file save as
Выбрать опцию «Save
Выразить намерения
[filename]»
as»
сохранить файл под
Ввести новое имя файла
другим именем
Назначить новое имя
файла
Примечание: Отличный от обычного сценарий исполнения и объект помещен
72
перед действие, что может казаться не естественным, но ускоряет работу и
соответствует объектно ориентированной парадигме.
Табл. 12
Сохранить файл после изменения
Необходимые действия
В сравнении
Цель пользователя
Сохранить файл
Выразить намерение
сохранить файл
Произнести «Edit mode
file save»
Выбрать меню «File»
Выбрать опцию «Save»
Необходимые действия
Табл. 13
Открыть файл
В сравнении
Цель пользователя
Открыть файл
Выразить намерение
открыть файл
Произнести «file open
[filename]»
Выбрать меню «File»
Выбрать опцию «Open»
Ввести имя/Выбрать
файл для открытия
Написание кода.
Цель пользователя
Создание серии «#include »
выражений
специфицирующих
используемые библиотеки
Ввести ключевое слово
«#include»
Ввести имя библиотеки
Повторять пока не
присутствуют все
необходимые библиотеки
Табл. 14
.Подключение библиотек
Необходимые действия
В сравнении
Произнести «Hash include
[filename]»
Повторять пока не
присутствуют все
необходимые библиотеки
Произнести «Edit mode
has multi-include
[filename1, filename2,...]
tilda»
Напечатать
«#include»
Ввести
имя
библиотеки
Поставить «;» в
конце выражен
Табл. 15
73
Цель пользователя
Объявить новый класс
Выразить намерение
Объявить класс
Специфицировать имя
класса
Ввести описание класса
Необходимые действия
.Объявление класса
В сравнении
Произнести «Define class
classname
[classname]
extends/inherits
[classname] public»
Ввести описание класса
Напечатать
«class
[classname] : {};»
Передвинуть
курсор
внутрь
фигурных
скобок
Напечатать остальное
описание класса
Примечание:Представлен минимальный сценарий, расширенные сценарии
зависят от степени и возможностей интеграции со средой разработки.
Цель пользователя
Объявить метод
Специфицировать имя
метода, входные и
выходные параметры,
модификаторы
Цель пользователя
Необходимые действия
Произнести «Declare
method [method name]
parameter [parameter
name] of [qualifier]
[parameter type] [qualifier]
[reference/pointer]…
return [return type]
[reference/pointer] with
[qualifier]»
Необходимые действия
Определить все методы Произнести «Define class
принадлежащие классу [classname]»
Произнети «Define class
tilda»
Табл. 16
Объявление метода
В сравнении
Напечатать имя
возвращаемого типа
Вставить пробел
Напечатать имя метода
Поставить «();»
Переместить курсор
внутрь скобок
Напечатать пары тип,
имя параметров метода
через запятую
Табл. 17
Определение класса
В сравнении
Напечатать
«[classname]::» для
каждого метода класса
74
Цель
пользователя
Необходимые действия
Табл. 18
Определение метода
В сравнении
Произнести «Define [qualifier]
method [method name] parameter
[parameter name] of [qualifier]
[parameter type] [qualifier]
[reference/pointer]… return [return
type]»
Ввести исполняемый код
Напечатать «[classname]::»
Напечатать имя
возвращаемого типа
Вставить пробел
Напечатать имя метода
Поставить «();»
Переместить курсор внутрь
скобок
Напечатать пары тип, имя
параметров метода через
запятую
Поставить фигурные скобки
Перенести курсор внутрь
Напечатать исполняемый код
Примечание: Если ранее было произнесена команда определения класс, то
префикс имени класса доставляется автоматически.
Цель
пользователя
Определить
условное
выражение и
исполняемый код
по результату
вычисления
условия
Табл. 19
Использование «if» выражения
Необходимые действия
В сравнении
Произнести «if statement»
Произнести «condition»
Произнести команды для
формирования условия, используя
«or» «and» «equal» «not equal» «less
or equal» «greater or equal» «more »
«less» маркеры соответствующих
операций сравнения и логики
По завершению произнести «tilda»
Ввести исполняемый код при
выполнении условия
Напечатать ключевое
слово «if»
Поставить скобки
Перенести курсор
внутрь
Ввести условие
Поставить фигурные
скобки
Перенести курсор
внутрь
Ввести исполняемый
код
75
Цель пользователя
Необходимые действия
Определить
Произнести «else statement»
исполняемый код при Ввести исполняемый код
альтернативном
значении условия
Цель пользователя
Определить цикл «for»:
Определить
начальное
значение итератора
Определить
условие
завершения цикла
Определить по шаговый
инкремент
Определить
исполняемый в цикле код
Табл. 20
Использование «else»
В сравнении
Напечатать ключевое
слово «else»
Поставить фигурные
скобки
Перенести курсор
внутрь
Ввести исполняемый
код
Табл. 21
Использование «for» выражения
Необходимые действия
В сравнении
Произнести
«for
statement»
Ввести
или
создать
итератор и его начальное
значение, по завершению
произнести «tilda» Ввести
условие завершения, по
завершению произнести
«tilda»
Произнести
«increment
step
[integer]»,
по
завершению произнести
«tilda»
Напечатать ключевое
слово «for»
Поставить скобки
Перенести
курсор
внутрь
Ввести итератор и
поставить «;»
Ввести
условие
завершения
и
поставить «;»
Ввести итератор и его
пошаговый инкремент
Поставить фигурные
скобки
Перенести
курсор
внутрь
Ввести исполняемый
код
76
Цель пользователя
Определить цикл
«while»:
Определить условие
завершения цикла
Определить
исполняемый в цикле
код
Цель пользователя
Определить тип и
имя новой
переменной
Цель
пользователя
Табл. 22
Использование «while» выражения
Необходимые действия
В сравнении
Произнести «while
statement»
Ввести условие
завершения, по
завершению произнести
«tilda»
Напечатать ключевое
слово «while»
Поставить скобки
Перенести курсор внутрь
Ввести условие
завершения и поставить
«;»
Поставить фигурные
скобки
Перенести курсор внутрь
Ввести исполняемый код.
Табл. 23
.Определить новую переменную
Необходимые действия
В сравнении
Произнести «Define/Declare
variable [variable name] of
[qualifier] [type name] type
[qualifier] [reference/pointer]»
Для завершения произнести
«tilda» или произнести
«equals/initiate»
Необходимые действия
Ввести тип переменной
Ввести имя
переменной
При необходимости
присвоить начальной
значение или
использовать
конструктор
Табл. 24
Присвоить значение переменной
В сравнении
Произнести
«Assign Ввести имя переменной
[variable
name]
value Поставить оператор присвоения
[integer/variable name]»
Ввести присваиваемое значение
Табл. 25
Использование метода
77
Цель пользователя
Необходимые действия
В сравнении
Воспользоваться
методом:
Определить
имя
используемого метода
Определить
необходимые параметры
Произнести
«[Reference/dereference]
[member]
method
[method name] parameter
[parameter
name]
of
[qualifier]
[parameter
type]
[qualifier]
[reference/pointer]
…
tilda»
(Поставить оператор)
Напечатать имя метода
Поставить скобки
Перенести курсор внутрь
Напечатать пары тип,
имя параметров метода
через запятую
Поставить «;» в конце
строки
Цель пользователя
Определить
пространство имен:
Определить имя
пространства имен
Цель пользователя
Использовать членов
пространства имен:
Определить имя
используемого
пространства имен
Необходимые
действия
Произнести
«Declare namespace
[namespace name]»
Табл. 26
Объявление пространства имен
В сравнении
Напечатать ключевое слово
«namespace»
Поставить фигурные скобки
Перенести курсор внутрь
Табл. 27
Использование пространства имен
Необходимые действия
В сравнении
Произнести «Using
[directive/declaration]
[namespace name] of
[parent namespace name]
of … tilda]»
Напечатать «using
[parent namespace
name]::[namespace
name]» или «usging
namespace [namespace
name]::[parent
namespace name]»
78
Цель пользователя
Табл. 28
Использование макросов
Необходимые действия
В сравнении
Определить макрос:
Произнести
«Define
Определить имя или macro [condition] [macros
условие макроса
name/condition
content]
tilda
[macro/codition
content] tilda [condition
content] tilda tilda»
Также с использование прототипа была опробована возможность применения
средств голосового интерфейса в WEB разработке и языка разметки.
Результатом стали ключевые слова и соответствующие им теги разметки
приведены в таблице 29.
Табл. 29
Ключевые слова и фразы, и соответствующие им теги
Ключевые
HTML подстановка
Ключевые
HTML подстановка
слова и фразы
слова и фразы
anchor
<a>
list item
<menu> </menu>
body
<body> </body>
menu
<a href='' '' > </a>
head
<head> </head>
anchor
<area>
html
<html> </html>
area
<map> </map>
link
<link >
map
<applet > </applet>
title
<title> </title>
applet
<bgsound>
address
<address>
</address>
sound
<embed> </embed>
blockquote
<blockquote>
</blockquote>
embed
<hr>
div
<div> </div>
horizontal rule <img >
Heading x
<hx> </hx>
(where 0 <x<7)
image
<marquee> </marquee>
paragraph
<p> </p>
marquee
<noscript> </noscript>
bold
<b> </b>
no script
<object> </object>
big
<big> </big>
object
<script> </script>
79
cite
<cite> </cite>
script
<spacer>
code
<code> </code>
spacer
<caption> </ caption>
emphasise
<em> </em>
caption
<col >
font
<font > </font>
column
<colgroup> </colgroup>
italic
<I> </I>
column
group
<table> </table>
strike
<s> </s>
table
<tr> </tr>
samp
<samp> </samp>
row
<td> </td>
small
<small> </small>
data
<th> </th>
span
<span> </span>
header
<frame>
strong
<strong> </strong>
frame
<frameset> </frameset>
sub
<sub> </sub>
frameset
<iframe> </iframe>
super
<sup> </sup>
Floating
frame
<noframes>
</noframes>
typewriter
<tt> </tt>
no frames
<button> </button>
underline
<u> </u>
button
<fieldset> </fieldset>
variable
<var> </var>
field set
<form> </form>
break
<bk>
form
<input type= >
center
<center> </center>
input
<isindex>
no break
<norb>
is index
<label> </label>
pre
<pre> </pre>
label
<legend> </legend>
directory
<dir> </dir>
legend
<optgroup> </optgroup>
definition list
<dl> </dl>
option
group
<option> </option>
definition item
<dd> </dd>
option
<select> </selectЮ
definition term <dt> </dt>
select
<textarea> </textarea>
unordered list
<ol> </ol>
text
area
ordered list
<li> </li>
80
ЗАКЛЮЧЕНИЕ
Основным
теоретическим
результатом
данной
магистерской
диссертации является выработка, концепции, подхода и формулировка
правил, условий и ограничений задачи разработки и программной реализации
систем предоставления средств специализированных голосовых интерфейсов
в частности для разработки программного обеспечения.
Основным практическим результатом стала разработка базового
функционала
и
прототипа
голосового
интерфейса
для
разработки
программного обеспечения, на основе созданного исследовательского
прототипа программной реализации.
В результате проведенной работы были решены следующие задачи:
 определена специфика задач программирования и способов их решения
средствами голосового интерфейса;
 разработана
архитектура
системы
предоставления
средств
специализированного голосового интерфейса и ее программной
реализации, учитывающие динамику развития отрасли и дающие
возможность расширение, дополнения, доступного сотрудничества с
другими разработчиками;
 создания исследовательского прототипа программной реализации
системы с модульной архитектурой, возможностью интеграции и
безопасного расширения, дополнения и модификации посредством
модулей/плагинов;
 разработки базового функционала и прототипа голосового интерфейса
для разработки программного обеспечения.
В магистерской диссертации в первые в России представлены первые
шаги исследований проблем разработки и программной реализации систем
81
предоставления средств специализированных голосовых интерфейсов, и
предполагается дальнейшая разработка и возможно создание новых
концепций и подходов к решению этих проблем, а также созданию более
эффективных и производительных программных реализации.
82
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
 Возможности по распознанию речи Силаев А.В. Орёл ГТУ, научный
руководитель Абашин В.Г.
 Жожикашвили В.А. и др. Применение распознавания речи в
автоматизированных
системах
массового
обслуживания//
Автоматизация и современные технологии, 2003, No11, с. 23-29
Лобанов Б.М, 2002 В стране и мире.
 Левинсон С.Е. Структурные методы автоматического распознавания
речи // ТИИЭР. Т. 73. No11. Ноябрь 1985. С. 100–128.
 Винцюк Т.К. Анализ, распознавание и интерпретация речевых
сигналов. Киев: Наукова думка, 1987.
 Винцюк Т.К. Распознавание слов устной речи методами динамического
программирования // Кибернетика. 1968. No1. С. 81–88.
 Беллман Р. Динамическое программирование. М.: ИЛ, 1960. О
перспективах создания системы распознавания речи.
 Itakura F. Minimum prediction residual principle applied to
speechrecognition // IEEE Trans. Acoust., Speech, Signal Processing. Vol.
ASSP–23. 1975. P. 67–72.
 Д.Н. Бабин, И.Л. Мазуренко, А.Б. Холоденко О перспективах создания
системы автоматического распознавания слитной устной русской речи.
 Baker J.K. Stochastic modeling for automatic speech understanding// Speech
Recognition / ed.: D.R. Reddy. New York: Academic Press, 1975. P. 521–
542.
Джелинек [Елинек] Ф. Распознавание непрерывной речи с помощью
статистических методов // ТИИЭР. 1976. Т. 64. No4. С.131–160.
Марков
А.А.
Пример
статистического
исследования
над
текстом«Евгения Онегина», иллюстрирующий связь испытаний в цепь//
Известия Академии наук. СПб. VI. Т. 7. 1913. No3. С. 153–162.
Доклад Шубный А.В. научный руководитель доц. Медведев М.С.
Сибирский
федеральный
университет.
Распознавания
речи
сравнительные характеристики наиболее доступных современных
систем распознавания речи.
Распознавание
речи
в
автомобильной
индустрии,
http://www.drive.ru/blogs/4fa5694b09b602b73900001c.html
Речевые Технологии для бизнеса - распознавание речи,
.http://speech2b.ru/rus/applications/app-war/
CNews:
С.
Мельников:
Точность
распознавания
речи.
http://www.cnews.ru/reviews/index.shtml?2007/12/24/280965
83
http://www.speechtek.com/,
http://www.speechtechmag.com/
и
http://www.speechtechblog.com/. Подробнее о Премии в журнале Speech
Technology
http://www.speechpro.ru/ - Центр речевых технологии.
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
http://qt.digia.com/Product/Developer-Tools/
http://eclipse.org/
http://www.microsoft.com/visualstudio/ru-ru
http://developer.apple.com/tools/xcode/
http://www.netbeans.org/
http://www.swig.org/
http://www.qt-project.org
http://gcc.gnu.org/
http://www.cmake.org/
http://cygwin.com/
http://developer.android.com/
 http://developer.android.com/
84
Download