![]() |
|
![]() ![]() ![]() |
|
val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: 1 Всего: 7 |
Всем привет! Помогите с идеей... Нужен алгоритм распознавания отдельных голосовых команд. Единственное требование - простота...
-------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Простой алгоритм в случае, если говорит один и тот же человек, - дело нехитрое. Но вот вопрос - нужно, чтобы этот алгоритм корректно работал применительно к разным "говорунам"? Тогда труба... Это к лингвистам.
Вообще неплохо было бы указать, сколько таких отдельных команд, что из себя они представляют: слова, фразы, нечленораздельные звуки и т.д. |
|||
|
||||
Step |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: нет Всего: 25 |
Товарищи, а кто подскажет с распознованием слогов?
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: 1 Всего: 7 |
Хорошо, что нехитрое... Пусть нужна программа, настроенная на голос только одного человека ("говоруна") и есть всего 3 команды: ОДИН, ДВА, ТРИ и соответствующая реакция - вывод чисел 1, 2 или 3... И как вы себе видите алгоритм этой программы... -------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
Step |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: нет Всего: 25 |
Жалко тебя огорчать, но пока не как не видем...
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
В общем случае алгоритм распознавания того или иного объекта включает в себя следующие обязательные процессы:
1. Выделение классификационных признаков. 2. Сравнение полученной совокупности признаков с эталонными описаниями классов. 3. Принятие решения о соответствии полученной реализации одному из известных классов. Соответственно для корректного решения задачи о построении распознающего устройства/алгоритма необходимо предварительно выбрать способ описания характерных признаков объектов, составить эталонные описания классов, ввести критерий принятия решения. Применительно к нашим N классам речевых сигналов (команд "Один", "Два", ... "Эн") можно поступить так. Раз это речевые сигналы различной длительности, то удобнее с ними работать в частотной области. Это значит, что в качестве классификационных признаков могут выступать коэффициенты разложения по какой-либо системе функций. Самый известный случай - базис Фурье. конечно, для распознавания речи этот базис слабоват. Сейчас известно большое количество примеров использования других базисов. У нас довольно популярны были различные частотно-временные распределения, вейвлеты. Кстати говоря, вейвлеты, на мой взгляд, в плане возможностей по анализу тонкой структуры сигналов выглядят более предпочтительно. Но и здесь надо долго выбирать, какой конкретно вейвлет (Добеши, Морлет и т.д. и т.п.) выбрать, сколько уровней разложения взять. Но все эти мучения окупятся. Здесь чисто экспериментальная работа. Лично я в свое время мучил не просто вейвлет, а вейвлет-пакет. Итак, допустим, выбрали вейвлет. Теперь беремся за базу эталонов. Садись за микрофон и записывай в какой-нибудь файл речевые команды. Затем из каждого файла берешь выборку, раскладываешь в вейвлет-пакеты. Но это еще не эталоны. Представь себе, что выбрал, к примеру, 7 уровней разложения в вейвлет-пакет. Посчитай, сколько получишь коэфициентов (домашнее задание ![]() Едем дальше. Критерий принятия решения или некоторое правило принятия решения. Понятие критерия принятия решения тесно связано с понятем показателя. Особо не философствуя, отмечу, что в ряде случаев эти понятия совпадают. Давай сразу - введем в качестве показателя (критерия близости) некоторое расстояние (метрику), характеризующее степень "похожести" полученной реализации и каждого из эталонов. Сейчас очень модны (и вообще говоря эффективны) критери близости, ранее появившиеся в статистике. Например, всем известное расстояние Евклида. Все знают его из школьного курса геометрии как растояние между двумя точками на плоскости. Отличие только в том, что у нас n-мерный случай. Расстояние Махаланобиса. Отличается от евклидова учетом обобщенной ковариационной матрицы. это дает более высокую точность работы в условиях шумов (искажений, помех). например, ты забил в базу эталон команды "Шестнадцать", когда у тебя было бодрое настроение. на следующий день тебе его испортили. Ты говоришь в микрофон так грустно: "Шишнаааацасссь" ![]() Расстояние Минковского. Работает еще более устойчиво. Если интересно, из теории сообщу, чем отличается. Расстояние махаланобиса применяют в случае нормального закона распределения ошибок, а расстояние Минковского к нему инвариантно. Итак, критерий можем сформулировать словесно: получена реализация сигнала того класса, от эталона которого она минимально отличается. Таким образом предварительная работа проведена, получаем следующий алгоритм: 1. Выделить классификационные признаки в полученной реализации сигнала. В нашем случае разложить в вейвлет-пакет (либо другую систему функций). 2. Сравнить полученную совокупность признаков с эталонными описаниями. Это значит, вычисляем принятую метрику. 3. Смотрим, для какого эталона эта метрика оказалась минимальной. Отождествляем принятую реализацию сигнала с этим классом. Я когда-то с помощью вейвлетов и расстояния Махаланобиса пытался распознавать принадлежность голоса тому или иному человеку. Получалось. И получалось по той же схеме распознавать не только речевые сигналы, но и радиосигналы со сложными видами модуляции. Получится ли распознать слова - не знаю. Работай ![]() Если надо кому-нить, могу привести участки кода. Но ведь это уже не алгоритм, а его конкретное воплощение, да? ![]() © Небольшой экспромт ![]() |
|||
|
||||
val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: 1 Всего: 7 |
Большое тебе спасибо за ответ, podval... Весьма интересен подход к этой проблемме. Встречный вопрос, а что ты думаешь про использование динамического программирования в распознавании речи?
-------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
Step |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: нет Всего: 25 |
мужики, эт вы круто загнули.
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: 1 Всего: 7 |
Возможно, но почему бы не поговорить о наукоёмких алгоритмах... -------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
Step |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: нет Всего: 25 |
ТА В ПРИНЦИПЕ Я НИЧЕГО ПРОТИВ НЕ ИМЕЮ. -------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Ты имеешь в виду метод динамического программирования? А на каком конкретно этапе общего алгоритма? |
|||
|
||||
val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: 1 Всего: 7 |
Именно... На этапе сравнения эталоных параметров с параметрами входного сигнала... Это может помочь снизить эффект затяжек при произнесении команд... -------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Давай подробнее, а то не врубаюсь. |
|||
|
||||
val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев Репутация: 1 Всего: 7 |
Ну, смотри... Алгоритм примерно таков... 1. Формируем эталонные параметры сигнала. 2. Получаем параметры входного сигнала. 3. Сравниваем оба множества параметров методом динамического программирования (метод динамического искажения времени - ДИВ). В конце 60-х годов для измерения степени сходства между реализацией и эталоном слова было предложено использовать динамическое программирование, которое позволяло отыскать минимум расстояния в заданной метрике с учетом нелинейных деформаций оси времени. Впоследствии метод динамического программирования был распространен на полунепрерывное по времени представление речевого сигнала в виде последовательности символов сегментов из конечного множества. Применение динамического программирования позволило достичь весьма высокой (97-99%) надежности распознавания изолированных слов с настройкой на диктора для словарей объемом до 100-200 слов. Речь является процессом, изменяющимся во времени. Различные произношения одного и того же слова обычно имеют разную длительность, а произношения одного и того же слова одинаковой длительности отличаются в середине из-за различных частей слова, произносимых с разной скоростью. Чтобы получить глобальную оценку расхождения между двумя речевыми образцами, представленными как вектора , должно быть выполнено выравнивание по времени. Входной сигнал сравнивается со всеми эталонами хранящимися в модели пользователя. Результатом сравнения будет эталон, для которого было найдено минимальное расхождение между входящим сигналом и эталоном . Глобальная оценка расстояния для маршрута — это просто сумма локальных расстояний между кадрами сигнала и эталона . На процесс сравнения накладываются следующие ограничения: 1. Маршрут анализа не может идти назад во времени. 2. Каждый кадр входящего сигнала и шаблона должен быть использован при сравнении. 3. Локальные оценки совпадения объединяются добавлением к текущему глобальному расхождению. Алгоритм поиска глобального наименьшего маршрута: 1 . Вычислить нулевой столбец, начиная с самой нижней ячейки. Глобальная оценка для этой ячейки равна локальной. Тогда глобальная оценка для каждой последующей ячейки равна локальной оценке для этой ячейки плюс глобальная оценка до ячейки под ней. 2. Вычислить глобальную оценку для первой ячейки следующего столбца, сложив локальную оценку с глобальной оценкой для самой нижней ячейки предыдущего столбца . 3. Вычислить глобальную оценку для оставшихся ячеек текущего столбца. Например , для точки (i, j) — локальная оценка для точки (i, j) плюс минимальная глобальная оценка из (i-1 , j), (i, j-1 ) или (i-1 , j-1 ). 4. Текущий столбец становится предыдущим, и все повторяется со второго шага, до тех пор, пока не будут просчитаны все столбцы. 5. Глобальная оценка — это значение, сохраненное в самой верхней ячейке последнего столбца. Ниже показан псевдокод описанного процесса : calculate first column (predCol) for i=1 to number of input feature vector frames { curCol[0] = local cost at (i,0) + global cost at (i-1,0); for j=1 to number of template feature vector frames { curCol[j] = local cost at (i,j) + minimum of global cost at (i-1,j), (i,j-1) or (i-1,j-1); } predCol = curCol; } minimum global cost is value in curCol[number of template fea-turevector frames]. __ -------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Понятно. Ты говоришь о временной области. А я говорил о частотной. ИМХО так проще и удобнее (для моего случая). Особенно если использовать вейвлеты, т.к. они локализованы и по времени, и по полосе.
Ну а по поводу ДП вот что скажу. Алгоритмы, основанные на методе ДП, обладают абсолютной сходимостью в рамках заданных условий и ограничений. НО! У них очень низкое быстродействие при большой размерности задачи. Даже если считать на сверхбыстром процессоре, все равно мое мнение - нельзя в хорошую железяку закладывать плохую математику. Подумай хорошенько. Нельзя ли сфорулировать задачу попроще, чтобы удобнее было строить вычислительный процесс. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |