VR
Virtual Reality On-line   Visual Basic
Новости   |     Журнал    |    Хаkер   |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]
[ Download  ]
[  Конкурс  ]
[  Анекдоты ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
Visual Basic.
Распознование речи
:

Распознавание речи. Перевод статьи John T Yung "Speech Recognition". Оригинал - DeveloperFusion

  Совсем недавно я начал работу над програмой, которая выполняет различные действия в среде Windows без ввода с клавиатуры или мыши. Принцип ее действия основывается на восприятии компьютером речи (Voice&Speech Recognition). Сначала я предполагал, что задание это будет не из легких, но после скоротечного знакомства с этой технологией я понял, что это совсем не так.

  Микрософт уже достаточно долго занимается разработками в области речевых технологий. На официальном сайте корпорации был даже открыт целый раздел (http://www.microsoft.com/speech), посвященный проблемам распознавания голоса и речи. Для работы с Voice Recognition вам потребуется установить Microsoft Speech Recognition Engine. Скачать его можно с http://www.microsoft.com/products/msagent/downloads.htm. Да, не забудьте взять Microsoft Agent and language support там же.

  Создаем новый VB-проект. Переходим на вкладку Project/Components. Поключим к нашему проекту Microsoft Direct Speech Recognition. Помните, этот компонент отображается(а, следовательно и существует) только если вы установили Microsoft Speech Engine. После выбора компонент Speech Recognition должен появиться на панели компонентов. Визуально он очень напоминает ухо, правда немного усохшее. Поместим этот компонент на форму. При этом он получает внутрисистемное имя DirectSR, что обозначает Direct Speech Recognition. Приступим непосредственно к программированию. Выбираем все тот же компонент DirectSR1 и пишем процедуру PhraseFinish.

Private Sub DirectSR1_PhraseFinish(ByVal flags As Long, _
ByVal beginhi As Long, ByVal beginlo As Long, ByVal endhi As Long, _
ByVal endlo As Long, ByVal Phrase As String, ByVal parsed As String, _
ByVal results As Long)
Да, параметров много. Но не пугайтесь! Единственно важный для нас параметр - это Phrase. Он будет содержать слово, фразу или голосовую команду.

  Теперь нам необходимо задать слова, которые Speech Engine будет узнавать. Для этого подправим процедуру Form Onload. Как же это сделать? А очень просто!

Private Sub Form_Load()
  Dim totaldata As String
  '[Grammar], отвечает за установку кодировки. (1033) - английский
  '[], команды для распознавания
  totaldata = "[Grammar]" & vbCrLf & _
  "langid = 1033" & vbCrLf & _
  "type=cfg" & vbCrLf & _
  "[]" & vbCrLf & _
  "=Notepad" & vbCrLf & _
  "=Volume" & vbCrLf & _
  "=Media Player" & vbCrLf 

DirectSR1.GrammarFromString (totaldata)
dim engine 
engine = DirectSR1.Find("MfgName=Microsoft") 
DirectSR1.Select engine 
DirectSR1.Activate
В исходном коде трех строчек посередине не было. Их добавил комментарием к этой статье kevin8084, ссылаясь на то, что без кода определения отдельного движка ничего работать не будет.

  Каждая строка, начинающаяся со "=, содержит слово, которое DirectSR будет распознавать. Для примера мы взяли слова Notepad, Volume и Media Player. Знаете почему? Конечно, проговаривая эти слова мы будем запускать соответствующие программы. DirectSR1.Activate включает движок VR. DirectSR1.Deactivate - выключает.

  Практически все готово. Теперь оперируем процедуру PhraseFinish.

Dim sFile As String
Dim noth As Long
Select Case Phrase
Case "Notepad"
sFile = "\system32\notepad.exe"
noth = ShellExecute(0, "OPEN", Environ("SystemRoot") & sFile, "", "", 1) 
Case "Volume"
sFile = "\system32\sndvol32.exe"
noth = ShellExecute(0, "OPEN", Environ("SystemRoot") & sFile, "", "", 1)
Case "Media Player:
sFile = "C:\Program Files\Windows Media Player\mplayer2.exe"
noth = ShellExecute(0, "OPEN", sFile, "", "", 1)
End Select
Для запуска программ мы используем Апи функцию ShellExecute(). Объявим ее:
Option Explicit

Private Declare Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal _
lpOperation As String, ByVal lpFile As String, ByVal _
lpParameters As String, ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
 Разберемся с интерфейсом. Вешаем на форму две кнопки для включения и выключения VR-движка. Ну и Label для того, чтобы прога могла туда писать все, что она о нас думает.
Private Sub Command1_Click()
Select Case Command1.Caption
Case "Disable"
DirectSR1.Deactivate
Command1.Caption = "Enable"
Label1 = "Disabled"
Case "Enable"
dim engine 
engine = DirectSR1.Find("MfgName=Microsoft") 
DirectSR1.Select engine 
DirectSR1.Activate
Command1.Caption = "Disable"
Label1 = "Ready"
End Select
End Sub
Для пущей красоты добавим это в PhraseFinish:
If Phrase <> "" Then 
Label1.caption = "Matched word is " & Phrase
' Мы что-то сказали.  
Else
label1.caption = "No word matched"
' Ничего не слышу 
End If
 Програма complete. Спешу всех огорчить - у меня она не работала. Ссылалась на бажный engine. На бурю вопросов "нафига писал", "зачем надо" и т.д. отвечу, разобраться в принципах работы и отдеббагить прогу будет вашим доашним заданием. Ведь кодер должен разбираться в алгоритмах програмы сам. Happy radiation.

  Written by U1traDIMM 28/09/2002


Copyright©: Horrific aka Флёнов Михаил
Design by FMk group©