Ответ 1
Вы можете создавать настраиваемое обучение с использованием механизма SAPI (а не управляемого api)
Здесь ссылка о том, как это сделать (хотя и немного расплывчато)
Можно ли программно тренировать распознаватель, дающий .wavs вместо разговора с микрофоном?
Если это так, как это сделать?, в настоящее время у меня есть код, который выполняет распознавание аудио в файле 0.wav и записывает распознанный текст в консоль.
Imports System.IO
Imports System.Speech.Recognition
Imports System.Speech.AudioFormat
Namespace SampleRecognition
Class Program
Shared completed As Boolean
Public Shared Sub Main(ByVal args As String())
Using recognizer As New SpeechRecognitionEngine()
Dim dictation As Grammar = New DictationGrammar()
dictation.Name = "Dictation Grammar"
recognizer.LoadGrammar(dictation)
' Configure the input to the recognizer.
recognizer.SetInputToWaveFile("C:\Users\ME\v02\0.wav")
' Attach event handlers for the results of recognition.
AddHandler recognizer.SpeechRecognized, AddressOf recognizer_SpeechRecognized
AddHandler recognizer.RecognizeCompleted, AddressOf recognizer_RecognizeCompleted
' Perform recognition on the entire file.
Console.WriteLine("Starting asynchronous recognition...")
completed = False
recognizer.RecognizeAsync()
' Keep the console window open.
While Not completed
Console.ReadLine()
End While
Console.WriteLine("Done.")
End Using
Console.WriteLine()
Console.WriteLine("Press any key to exit...")
Console.ReadKey()
End Sub
' Handle the SpeechRecognized event.
Private Shared Sub recognizer_SpeechRecognized(ByVal sender As Object, ByVal e As SpeechRecognizedEventArgs)
If e.Result IsNot Nothing AndAlso e.Result.Text IsNot Nothing Then
Console.WriteLine(" Recognized text = {0}", e.Result.Text)
Else
Console.WriteLine(" Recognized text not available.")
End If
End Sub
' Handle the RecognizeCompleted event.
Private Shared Sub recognizer_RecognizeCompleted(ByVal sender As Object, ByVal e As RecognizeCompletedEventArgs)
If e.[Error] IsNot Nothing Then
Console.WriteLine(" Error encountered, {0}: {1}", e.[Error].[GetType]().Name, e.[Error].Message)
End If
If e.Cancelled Then
Console.WriteLine(" Operation cancelled.")
End If
If e.InputStreamEnded Then
Console.WriteLine(" End of stream encountered.")
End If
completed = True
End Sub
End Class
End Namespace
Я понимаю, что использование мастера обучения полезно для этого
Для этого нажмите "Пуск" button-> "Управление" Panel-> "Простота Access-"> "Распознавание речи".
,
Как настроить распознавание речи с помощью пользовательских файлов WAV или даже mp3?
При использовании мастера обучения (обучающий интерфейс панели управления) обучающие файлы сохраняются в {AppData}\Local\Microsoft\Speech\Files\TrainingAudio.
Как я могу использовать или сделать индивидуальное обучение вместо использования Мастера обучения?
Панель управления речью создает записи реестра для обучающих аудиофайлов в ключе HKCU\Software\Microsoft\Speech\RecoProfiles\Tokens {ProfileGUID} {00000000-0000-0000-0000-0000000000000000}\Files
Должны ли записи реестра, созданные кодом, быть там?
Причина для этого заключается в том, что я хочу настраивать свои собственные файлы wav и список слов и фраз, а затем переносить все в другие системы.
Вы можете создавать настраиваемое обучение с использованием механизма SAPI (а не управляемого api)
Здесь ссылка о том, как это сделать (хотя и немного расплывчато)
Конечно, можно обучить SAPI с помощью С#. вы можете использовать обломоки talklib вокруг SAPI для доступа к API-интерфейсам режима обучения из С#.here @Эрик Браун ответил на процедуру
Установите состояние грамматики для приостановки распознавателя при возникновении распознавания. (Это также помогает в обучении из аудиофайла.)
Когда происходит распознавание:
Получить распознанный текст и сохраненный звук.
Другим вариантом может быть обучение sapi один раз с желаемым выходом, затем получение профилей с кодом и перенос их в другие системы, следующий код Возвращает объект ISpeechObjectTokens.:
Метод GetProfiles возвращает выбор доступного пользователя речевые профили. Профили хранятся в конфигурации речи база данных как серия токенов, каждый маркер, представляющий один профиль. GetProfiles извлекает все доступные токены профиля. Возвращенный список - это объект ISpeechObjectTokens. Дополнительные или более подробная информация о токенах доступна в методах связанных с ISpeechObjectTokens. Поиск токена может быть дополнительно с помощью поиска RequiredAttributes и OptionalAttributes атрибутов. Только токены, соответствующие указанным RequiredAttributes возвращаются атрибуты поиска. Из тех токенов, которые соответствуют Ключ RequiredAttributes, OptionalAttributes перечисляет устройства в порядке соответствие необязательным атрибутам. Если нет атрибутов поиска, все возвращаются токены. Если аудиоустройства не соответствуют критериям, GetAudioInputs возвращает пустой выбор, то есть Коллекция ISpeechObjectTokens с ISpeechObjectTokens:: Count свойство нуля. См. "Значки объектов" и "Настройки реестра" . для списка атрибутов, определяемых SAPI 5.
Public SharedRecognizer As SpSharedRecognizer
Public theRecognizers As ISpeechObjectTokens
Private Sub Command1_Click()
On Error GoTo EH
Dim currentProfile As SpObjectToken
Dim i As Integer
Dim T As String
Dim TokenObject As ISpeechObjectToken
Set currentProfile = SharedRecognizer.Profile
For i = 0 To theRecognizers.Count - 1
Set TokenObject = theRecognizers.Item(i)
If tokenObject.Id <> currentProfile.Id Then
Set SharedRecognizer.Profile = TokenObject
T = "New Profile installed: "
T = T & SharedRecognizer.Profile.GetDescription
Exit For
Else
T = "No new profile has been installed."
End If
Next i
MsgBox T, vbInformation
EH:
If Err.Number Then ShowErrMsg
End Sub
Private Sub Form_Load()
On Error GoTo EH
Const NL = vbNewLine
Dim i, idPosition As Long
Dim T As String
Dim TokenObject As SpObjectToken
Set SharedRecognizer = CreateObject("SAPI.SpSharedRecognizer")
Set theRecognizers = SharedRecognizer.GetProfiles
For i = 0 To theRecognizers.Count - 1
Set TokenObject = theRecognizers.Item(i)
T = T & TokenObject.GetDescription & "--" & NL & NL
idPosition = InStrRev(TokenObject.Id, "\")
T = T & Mid(TokenObject.Id, idPosition + 1) & NL
Next i
MsgBox T, vbInformation
EH:
If Err.Number Then ShowErrMsg
End Sub
Private Sub ShowErrMsg()
' Declare identifiers:
Dim T As String
T = "Desc: " & Err.Description & vbNewLine
T = T & "Err #: " & Err.Number
MsgBox T, vbExclamation, "Run-Time Error"
End
End Sub