Обзор существующих систем распознавания речи

Разработка программного обеспечения для голосового управления трехмерными моделями функционирования промышленных роботов
158991
знак
11
таблиц
10
изображений

2.3.5 Обзор существующих систем распознавания речи

В настоящее время отсутствуют дикторонезависимые системы распознавания слитной речи как с неограниченным словарем, так и ограниченным, а имеющиеся системы (такие как Dragon Dictate - программа для печати текста с голоса) требуют очень много времени и терпения для того, чтобы обучить их удовлетворительно распознавать раздельно произносимые слова одного диктора. Среди других распознающих систем можно назвать Lotus Word Pro, MedSpeak, Voice Type Simplify Speaking, ViaVoice, Kurzweil Voice. He требующие обучения системы распознают обычно от нескольких десятков до сотен слов и используются для подачи команд голосом. Однако они также являются дикторозависимыми. В этой же области остается реализация амбициозных планов, наподобии принятого в 1986 в Японском национальном проекте АТК (Advanced Telecommunication Research), который состоял в том, чтобы получать речь на одном языке и одновременно синтезировать ее на другом или утверждения о реализации идеи человеко-машинного общения. Поэтому исследования в этой области являются весьма актуальными.


3. Разработка программного обеспечения для распознавания команд управления промышленным роботом

3.1 Реализация интерфейса записи и воспроизведения звукового сигнала в операционной системе Microsoft Windows

3.1.1 Основные сведения

Звуковые данные хранятся в компьютере с помощью метода импульсно-кодовой модуляции – РСМ. Расшифровывается РСМ как Pulse-Code Modulation. При этом методе аналоговый звук квантуется по времени и амплитуде. При выводе звука на колонки происходит обратное преобразование.

При прямом преобразовании кривая звука превращается в точки. Все, что между точками, теряется, поэтому чем чаще происходит замер амплитуды, тем выше качество звука и меньше потерь. Значение, обратное времени замера (Т3), называется частотой дискретизации - Тд. Для качественного звука частота дискретизации должна быть вдвое больше, чем высшая частота в обрабатываемом сигнале звука.

В Windows есть хорошо продуманная и хорошо документированная библиотека для работы со звуком - mmsystem.

Для работы со звуковой картой используется следующий алгоритм работы:

-  инициализировать звуковой драйвер;

-  установить параметры;

-  воспроизвести или записать звуковые данные;

-  закрыть драйвер.

Для вывода звука данные о звуке в цифровом виде просто отправляются звуковой карте. Она преобразует их в аналоговый сигнал [14].


3.1.2 Основные функции, необходимые для записи звука

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

Прежде всего необходимо заполнить структуру WAVEHDR. Она содержит следующие поля:

typedef struct wavehdr_tag {LPSTR lpData;

DWORD dwBufferLength;

DWORD dwBytesRecorded;

DWORD dwUser;

DWORD dwFlags;

DWORD dwLoops;

struct wavehdr_tag далеко * lpNext;

reserved DWORD;} WAVEHDR;

Структура WAVEHDR определяет заголовок, используемый, чтобы идентифицировать буфер звуковых данных

Составляющие структуры:

lpData - указатель на звуковые данные;

dwBufferLength - размер звуковых данных;

dwBytesRecorded - количество записанных байт (при воспроизведении этот параметр не используется);

dwUser - сюда можно записать все, что угодно;

dwFlags - здесь происходит описание заголовка. Конкретизирует флаги, предоставляющие информацию о буфере данных. Может принимать значения, приведенные в табл. 3.1

dwLoops - указывает количество циклов. Этот параметр используется только с буферами выходных данных.

lpNext - зарезервирован для использования драйвером устройства, чтобы указать на следующую структуру WAVEHDR в очереди.

reserved - зарезервирован для использования драйвером устройства.

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

Таблица 3.1- Флаги и их значения

Флаг Значение
WHDR_DONE устанавливается драйвером устройства, чтобы указать, что работа с буфером данных закончена и возвращается к приложению
WHDR_BEGINLOOP показывает, что этот буфер - первый буфер в цикле. Этот флаг используется только с буферами выходных данных.
WHDR_ENDLOOP показывает, что этот буфер - последний буфер в цикле. Этот флаг используется только с буферами выходных данных
WHDR_PREPARED

устанавливается драйвером устройства, чтобы указать, что буфер данных был подготовлен с помощью waveInPrepareHeader или waveOutPrepareHeader

WHDR_JNQUEUE устанавливается драйвером устройства, чтобы указать, что буфер данных находится в очереди для воспроизведения

Используйте WHDR_BEGINLOOP и флаг WHDR_ENDLOOP в поле dwFlags, чтобы указать начала и концы блоков данных для использования их в цикле. Чтобы прокручивать в цикле один блок, необходимо установить оба флага для этого блока. Необходимо использовать поле dwLoops в структуре WAVEHDR для первого блока в цикле, чтобы установить количество циклов.

Первая функция используемая для записи звука - wavelnOpen. Эта функция устройство ввода для звукового потока. В модуле она объявлена следующим образом:

MMRESULT waveInOpen(

LPHWAVEIN phwi,

UINT_PTR uDevicero,

LPWAVEFORMATEX pwfx,

DWORD_PTR dwCallback,

DWORD_PTR dwCallbacklnstance,

DWORD fdwOpen);

В функции определен ряд параметров. Рассмотрим их основное назначение

phwi - адрес, по которому будет записан указатель на устройство воспроизведения. Этот параметр может быть NULL, если WAVE_FORMAT_QUERY указан для fdwOpen.

UDevicelD – идентификатор устройства, которое необходимо открыть, если поставить сюда константу WAVE_MAPPER, то откроется устройство по умолчанию.

IpFormat – указатель на структуру типа WAVEFORMATEX, в которой описан формат записываемых звуковых данных.

dwCallback – указатель на функцию «семафор». Эта функция вызывается для сообщения о текущих событиях.

fdwOpen – параметры открываемого устройства. Может принимать значения, приведенные в табл. 3.2

Необходимо использовать функцию wavelnGetNumDevs, чтобы определить число устройств ввода, присутствующих в системе. Идентификатор устройства, указанный uDeviceID, изменяется в пределах от ноля до на один меньше, чем количество присутствующих устройств. Константа WAVE_MAPPER может также использоваться в качестве идентификатора устройства.

Если выбирать, чтобы окно или поток получал информацию отзыва, следующие сообщения отправляются процедуре окна или потока, чтобы указать изменения в процессе ввода звуковой информации: MM_WIM_OPEN, MM_WIM_CLOSE, и MM_WIM_DATA.

Если вы выбираете, чтобы функция получала информацию отзыва, функции отправляются следующие сообщения, чтобы указать изменения в процессе ввода звуковой информации: WIM_OPEN, WIM_CLOSE, и WIM_DATA.

Таблица 3.2 – Параметры открываемого устройства

CALLBACK_EVENT в параметре dwCallback находится событие THandle, через которое происходит информирование о ходе воспроизведения;
CALLBACK_FUNCTION в dwCallback находится указатель на функцию;
CALLBACK_THREAD в dwCallback находится идентификатор потока
CALLBACK_WINDOW в dwCallback находится указатель на окно, которому посылается сообщение
CALLBACK_NULL в dwCallback ничего нет
WAVE_ALLOWSYNC можно открыть устройство в синхронном режиме
WAVE_FORMAT_DIRECT запрещается преобразование данных с помощью АСМ-драйвера (ACM - Audio Compression Manager)
WAVE_FORMAT_QUERY если установить этот параметр, то реального открытия звуковой карты не происходит, функция проверяет возможность открытия с заданными параметрами, и если всё нормально, то возвращает MMSYSERRNOERROR (если параметры недопустимы, то возвращается код ошибки)
MMS YSERR_ALLOCATED указанный ресурс уже занят
MMSYSERR_BADDEVICEID указанный идентификатор устройства не существует
MMSYSERR_NODRIVER нет драйвера для устройства
MMSYSERR_NOMEM невозможно использовать память
WAVERR_BADFORMAT попытка открытия в неподдерживаемом звуковом формате

Необходимо заполнить структуру WAVEFORMATEX. Она имеет следующий вид:

typedef struct WAVEFORMATEX { WORD wFormatTag;

WORD nChannels;

DWORD nSamplesPerSec;

DWORD nAvgBytesPerSec;

WORD nBlockAlign;

WORD wBitsPerSample;

WORD cbSize;} WAVEFORMATEX;

В этой структуре:

wFormatTag – формат звуковых данных (чаще всего используется WAVE_FORMAT_PCM);

nChannels – количество каналов (1 - монО, 2 - стерео);

nSamplesPerSec – частота дискретизации (возможны значения 8000, 11025, 22050 и 44100);

nAvgBytesPerSec – количество байт в секунду для WAVEFORMATPCM это является результатом nSamplesPerSec* nBlockAlign;

nBlockAlign – выравнивание блока (для WAVEFORMATPCM равен wBitsPerSample /8* nChannels);

wBitsPerSample – количество бит в одной выборке (для WAVE_FORMAT_PCM может быть 8 или 16);

cbSize - размер дополнительной информации, которая располагается после структуры (если ничего нет, то должен быть 0).

Теперь следует подготовить заголовки, которые будут отправляться драйверу. Для этого существует функция waveInPrepareHeader

MMRESULT waveInPrepareHeader(

HWAVEOUT hwo,

LPWAVEHDR pwh,

U1NT cbwh);

Внутренняя структура:

hwo – идентификатор устройства записи (полученный после вызова функции wavelnOpen).

pwh – указатель на структуру wavehdr_tag;

cbwh – размер структуры wavehdr_tag.

Функция возвращает значения, приведенные в табл. 3.3.

При этом lpData, dwBufferLength, и dwFlags – члены структуры

WAVEHDR - должны быть установлены перед запросом этой функции (dwFlags должен быть нулевым).


Таблица 3.3 – Возвращаемые значения

MMSYSERR_NOERROR успех
MMSYSERR_INVALHANDLE указанный дескриптор устройства недействителен
MMSYSERR_INVALPARAM базовый адрес буфера не выровнен с объемом выборки
MMSYSERR_NODRIVER нет драйвера для устройства
MMSYSERR_NOMEM невозможно использовать память

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

MMRESULT waveInUnprepareHeader(

HWAVEIN hwi,

LPWAVEHDR pwh,

U1NT cbwh);

Параметры:

hwi - указатель на записывающее устройство;

pwh - указатель на структуру WAVEHDR, идентифицирующую буфер, который необходимо очистить.

cbwh - размер, в байтах, структуры WAVEHDR.

Функция возвращает MMSYSERR_NOERROR, если всё проходит успешно, если есть ошибки, возвращается одно из значений, приведенных в табл. 3.4.

Эта функция дополняет waveInPrepareHeader функцию. Необходимо вызвать эту функцию перед освобождением буфера. После передачи буфера в драйвер устройства функцией waveInAddBuffer, необходимо ждать, пока драйвер не закончит работу с буфером перед запросом waveInUnprepareHeader. Очистка буфера, который не был занят, не имеет никакого эффекта, и функция возвращает ноль.


Таблица 3.4 – Значения, выдаваемые при ошибках

Ошибка Значение
MMSYSERR_INVALHANDLE указанный дескриптор устройства недействителен
MMSYSERR_NODRIVER нет драйвера для устройства
MMSYSERR_NOMEM невозможно использовать память
MMSYSERR_STILLPLAYING буфер, указанный pwh, занят

Для передачи буфера приёма данных предоставленному звуковому устройству используется функция waveInAddBuffer. Когда буфер заполнен, приложение получает соответствующее сообщение. Функция имеет следующий вид:

MMRESULT waveInAddBuffer(HWAVEIN hwi,

LPWAVEHDR pwh,

UINT cbwh);

Описание параметров:

hwi- указатель на входное устройство;

pwh - указатель на структуру WAVEHDR, которая идентифицирует буфер.

cbwh - размер, в байтах, структуры WAVEHDR.

Функция возвращает MMSYSERR_NOERROR, если всё проходит успешно, если есть ошибки, возвращает одно из значений, приведенных в табл. 3.5.

Таблица 3.5 - Возвращаемые значения

Ошибка Значение
MMSYSERR_INVALHANDLE указанный дескриптор устройства недействителен
MMSYSERR_NODRIVER нет драйвера для устройства
MMSYSERR_NOMEM невозможно использовать память
WAVERR_UNPREPARED буфер, указанный pwh, не был готов

Когда буфер заполнен, бит WHDR_DONE установлен в dwFlags -члене структуры WAVEHDR.

Буфер должен быть подготовлен функцией waveInPrepareHeader перед тем, как это будет передаваться функции waveInAddBuffer.

Далее вызывается функция waveInStart. Она начинает ввод данных через предоставленное устройство. Эта функция выглядит следующим образом:

MMRESULT waveInStart(HWAVEIN hwi);

Параметр hwi указывает на устройство, принимающее информацию.

Функция возвращает MMSYSERR_NOERROR, если всё проходит успешно, если есть ошибки, возвращается одно значений, приведенных в табл. 3.6

Таблица 3.6 - Возвращаемые значения

Ошибка Значение
MMSYSERR_INVALHANDLE указанный дескриптор устройства недействителен
MMSYSERR_NODRIVER нет драйвера для устройства
MMSYSERR_NOMEM невозможно использовать память

Буферы возвращаются приложению, когда заполнены или, когда вызвана функция waveInReset(dwBytesRecorded) член в заголовке будет содержать длину данных). Если нет никаких буферов в очереди, данные проходят мимо приложения, и ввод продолжается.

Вызов этой функции, когда она уже была вызвана, не имеет эффекта, и функция возвращает ноль [15].


Информация о работе «Разработка программного обеспечения для голосового управления трехмерными моделями функционирования промышленных роботов»
Раздел: Коммуникации и связь
Количество знаков с пробелами: 158991
Количество таблиц: 11
Количество изображений: 10

Похожие работы

Скачать
216371
14
6

... и менеджмента Санкт-Петербургского Государственного технического университета соответствовал поставленной цели. Его результаты позволили автору разработать оптимальную методику преподавания темы: «Использование электронных таблиц для финансовых и других расчетов». Выполненная Соловьевым Е.А. дипломная работа, в частности разработанная теоретическая часть и план-конспект урока представляет ...

Скачать
60551
0
0

... разработки программ, но и разработку пакетов прикладных программ. Эти разработки должны обеспечивать высокое качество и вестись примерно так же, как и выпуск промышленной продукции. Достижения компьютерной техники   1.         Универсальные настольные ПК Что такое настольный компьютер, объяснять никому не надо — это любимое молодежью устройство, чтобы красиво набирать тексты рефератов, а ...

Скачать
461693
14
14

... информация должна поступать в декодер при восстановлении звукового сигнала. Декодер преобразует серию сжатых мгновенных спектров сигнала в обычную цифровую волновую форму. Audio MPEG - группа методов сжатия звука, стандартизованная MPEG (Moving Pictures Experts Group - экспертной группой по обработке движущихся изображений). Методы Audio MPEG существуют в виде нескольких типов - MPEG-1, MPEG-2 и ...

Скачать
430825
6
4

... с применением полиграфических компьютерных технологий? 10. Охарактеризуйте преступные деяния, предусмотренные главой 28 УК РФ «Преступления в сфере компьютерной информации». РАЗДЕЛ 2. БОРЬБА С ПРЕСТУПЛЕНИЯМИ В СФЕРЕ КОМПЬЮТЕРНОЙ ИНФОРМАЦИИ ГЛАВА 5. КОНТРОЛЬ НАД ПРЕСТУПНОСТЬЮВ СФЕРЕ ВЫСОКИХ ТЕХНОЛОГИЙ 5.1 Контроль над компьютерной преступностью в России Меры контроля над ...

0 комментариев


Наверх