Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Мультимедиа
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.09.2011, 18:55
Vlad_Bohdan Vlad_Bohdan вне форума
Прохожий
 
Регистрация: 17.09.2011
Сообщения: 6
Репутация: 11
По умолчанию Примитивное распознание речи в delphi

Уважаемые господа-программисты!

Я хочу реализовать простейшее распознавание 2-3 команд в программе. То есть пользователь говорит в микрофон, а программа сравнивает записанный звук со списком команд: допустим их будет 2: старт и стоп. И в зависимости от того, что больше похоже, выполняет определённое действие.

Подскажите, как можно такое реализовать?????
Ответить с цитированием
  #2  
Старый 17.09.2011, 19:06
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

смотри в сторону Speech API.
Цитата:
Microsoft Speech Application Programming Interface (Speech API, SAPI) — библиотека программ для Windows, позволяющая распознавать и синтезировать голос в приложениях для этой операционной системы.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 17.09.2011, 19:11
Vlad_Bohdan Vlad_Bohdan вне форума
Прохожий
 
Регистрация: 17.09.2011
Сообщения: 6
Репутация: 11
По умолчанию

Это я понимаю, но не могли бы вы подробнее расписать как это осуществить???
(Все нужные компоненты уже установлены)
Ответить с цитированием
  #4  
Старый 17.09.2011, 19:18
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Читайте себе на здоровье.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 17.09.2011, 19:46
Vlad_Bohdan Vlad_Bohdan вне форума
Прохожий
 
Регистрация: 17.09.2011
Сообщения: 6
Репутация: 11
По умолчанию

Всё это конечно очень хорошо... однако там речь идёт о том, чтобы программа озвучивала текст, мне же требуется народ: не текст в речь, а речь в текст, пусть и с 2-3мя командами.
Ответить с цитированием
  #6  
Старый 17.09.2011, 20:46
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Ладно, надеюсь меня не накажут за данную ссылку. Почитайте, возможно все что вам нужно там есть. А вообще поиском пользуйтесь, почему я эту инф унашел сразу, а вы нет?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 17.09.2011, 21:28
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

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;
Для товарищей, любящих русский, можно было ввести команды "Krasnyi", "Zelyonyi", "Siniy" (я не пробовал)
Ответить с цитированием
  #8  
Старый 17.09.2011, 21:44
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

При работе с распознаванием всплывут ещё такие проблемы:
1) шум. Вы используете два режима. Для включения режима распознавания надо щёлкнуть кнопку или сказать какое-нибудь специальное слово (у MS Agent'а это может быть его имя или команда "Слушай!"). Как только команды поданы надо опять переводить компьютер в режим "глухого". Есть ещё вариант, каждую команду подтверждать, правда, я с этим замучился. Агент правильно понимал команду, но часто не не понимал подтверждения и поэтому команда не исполнялась.

2) Распознавание идёт с ошибками, поэтому надо изучить процедуру обучения (для конкретного голоса).
Ответить с цитированием
  #9  
Старый 17.09.2011, 22:40
Vlad_Bohdan Vlad_Bohdan вне форума
Прохожий
 
Регистрация: 17.09.2011
Сообщения: 6
Репутация: 11
По умолчанию

AlexSku, а какой компонент нужно вынести на форму??
Ответить с цитированием
  #10  
Старый 17.09.2011, 23:03
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Лень, конечно, двигатель прогресса, но не до такой же степени, чтобы не разобраться самому или прочитать справку.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #11  
Старый 17.09.2011, 23:42
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Цитата:
Сообщение от Vlad_Bohdan
AlexSku, а какой компонент нужно вынести на форму??
Никаких особых не нужно. Нужно только подключения к COM-объектам (интерфейсы).
Вот скриншот (кстати, в Висте надо запускать от имени Администратора):

VoiceCmd.jpg
Ответить с цитированием
  #12  
Старый 18.09.2011, 19:57
Vlad_Bohdan Vlad_Bohdan вне форума
Прохожий
 
Регистрация: 17.09.2011
Сообщения: 6
Репутация: 11
По умолчанию

Хорошо.
И ещё вопрос не по распознаванию. а по синтезу речи. скинул очень хороший исходник подобной программы. Однако проблема: в uses перечислен speech и его выделяет компилятор как ошибку, то есть что то недоустановлено. подскажите, что именно:
выводит ошибку "отсутствует файл speech.dcu"
Ответить с цитированием
  #13  
Старый 18.09.2011, 20:56
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

У Буторина есть такой файл. Вот, посылаю:

Speech.zip
Ответить с цитированием
  #14  
Старый 18.09.2011, 22:58
Vlad_Bohdan Vlad_Bohdan вне форума
Прохожий
 
Регистрация: 17.09.2011
Сообщения: 6
Репутация: 11
По умолчанию

спасибо, посмотрим)
Ответить с цитированием
  #15  
Старый 02.10.2011, 17:29
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

Speech API хорошая штука, но вот нету документации по поводу Grammar

хотелось бы использовать конструкции по сложнее простых

Цитата:
[Grammar]
LangID=1033
Type=cfg

[<Start>]
<Start> = слово1
<Start> = слово2
<Start> = слово3...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:27.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter