|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Примитивное распознание речи в delphi
Уважаемые господа-программисты!
Я хочу реализовать простейшее распознавание 2-3 команд в программе. То есть пользователь говорит в микрофон, а программа сравнивает записанный звук со списком команд: допустим их будет 2: старт и стоп. И в зависимости от того, что больше похоже, выполняет определённое действие. Подскажите, как можно такое реализовать????? |
#2
|
||||
|
||||
смотри в сторону Speech API.
Цитата:
Пишу программы за еду. __________________ |
#3
|
|||
|
|||
Это я понимаю, но не могли бы вы подробнее расписать как это осуществить???
(Все нужные компоненты уже установлены) |
#5
|
|||
|
|||
Всё это конечно очень хорошо... однако там речь идёт о том, чтобы программа озвучивала текст, мне же требуется народ: не текст в речь, а речь в текст, пусть и с 2-3мя командами.
|
#6
|
||||
|
||||
Ладно, надеюсь меня не накажут за данную ссылку. Почитайте, возможно все что вам нужно там есть. А вообще поиском пользуйтесь, почему я эту инф унашел сразу, а вы нет?
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#7
|
|||
|
|||
SpeechAPI работает в обоих направлениях. И они описаны в книге Буторина (у меня книжный вариант "MS Agent и SpeechAPI в Delphi"). Правда, говорить компьютер может на любом языке, а вот распознавание (dll сторонних фирм) предлагается пока только на английском (плюс китайский, японский). Поэтому у вас два варианта: или говорить по-английски "Stop", "Start" (к счастью, отличий нет кроме акцента), ну и добавим "Hello" или ввести в словарь свои слова (для последнего случая): "Privet".
Вот, кстати, фрагмент программы из книги Буторина, которая по командам "red", "green", "blue" меняет цвет формы: Код:
function TVCmdNotifySink.CommandRecognize(dwID: DWORD; pvCmdName: PVCmdNameA; pdwFlags: PDWORD; dwActionSize: DWORD; pAction: pointer; dwNumLists: DWORD; pszListValues: PAnsiChar; pszCommand: PAnsiChar): HResult; stdcall; begin Result := S_OK; fForm.AddLog(Format('Команда: App = %s, State = %s, Cmd = %s, Id = %d', [pvCmdName.szApplication, pvCmdName.szState, pszCommand, dwId])); case dwID of 1: fForm.Color := clRed; 2: fForm.Color := clGreen; 3: fForm.Color := clBlue; end end; |
#8
|
|||
|
|||
При работе с распознаванием всплывут ещё такие проблемы:
1) шум. Вы используете два режима. Для включения режима распознавания надо щёлкнуть кнопку или сказать какое-нибудь специальное слово (у MS Agent'а это может быть его имя или команда "Слушай!"). Как только команды поданы надо опять переводить компьютер в режим "глухого". Есть ещё вариант, каждую команду подтверждать, правда, я с этим замучился. Агент правильно понимал команду, но часто не не понимал подтверждения и поэтому команда не исполнялась. 2) Распознавание идёт с ошибками, поэтому надо изучить процедуру обучения (для конкретного голоса). |
#9
|
|||
|
|||
AlexSku, а какой компонент нужно вынести на форму??
|
#10
|
||||
|
||||
Лень, конечно, двигатель прогресса, но не до такой же степени, чтобы не разобраться самому или прочитать справку.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#11
|
|||
|
|||
Цитата:
Вот скриншот (кстати, в Висте надо запускать от имени Администратора): VoiceCmd.jpg |
#12
|
|||
|
|||
Хорошо.
И ещё вопрос не по распознаванию. а по синтезу речи. скинул очень хороший исходник подобной программы. Однако проблема: в uses перечислен speech и его выделяет компилятор как ошибку, то есть что то недоустановлено. подскажите, что именно: выводит ошибку "отсутствует файл speech.dcu" |
#13
|
|||
|
|||
|
#14
|
|||
|
|||
спасибо, посмотрим)
|
#15
|
||||
|
||||
Speech API хорошая штука, но вот нету документации по поводу Grammar
хотелось бы использовать конструкции по сложнее простых Цитата:
|