![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Уважаемые господа-программисты!
Я хочу реализовать простейшее распознавание 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
|
||||
|
||||
|
Лень, конечно, двигатель прогресса, но не до такой же степени, чтобы не разобраться самому или прочитать справку.
|
|
#11
|
|||
|
|||
|
Цитата:
Вот скриншот (кстати, в Висте надо запускать от имени Администратора): VoiceCmd.jpg |
|
#12
|
|||
|
|||
|
Хорошо.
И ещё вопрос не по распознаванию. а по синтезу речи. скинул очень хороший исходник подобной программы. Однако проблема: в uses перечислен speech и его выделяет компилятор как ошибку, то есть что то недоустановлено. подскажите, что именно: выводит ошибку "отсутствует файл speech.dcu" |
|
#13
|
|||
|
|||
|
|
|
#14
|
|||
|
|||
|
спасибо, посмотрим)
|
|
#15
|
||||
|
||||
|
Speech API хорошая штука, но вот нету документации по поводу Grammar
хотелось бы использовать конструкции по сложнее простых Цитата:
|