Как программно обучить SpeechRecognitionEngine и конвертировать аудио файл в текст на c# или vb.net

можно ли программно обучить распознаватель, дающий .помахать вместо того, чтобы говорить с микрофоном?

если да, то как это сделать? в настоящее время у меня есть код, который выполняет распознавание аудио в 0.WAV и file и записывает распознанный текст на консоль.

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:UsersMEv02.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

редактировать

Я понимаю, что использование мастера обучения полезно для этого

выполнено путем открытия распознавания речи, нажав кнопку Пуск кнопка- > Панель управления - >простота доступа - >распознавание речи

.

как пользовательское обучение распознаванию речи с помощью пользовательских wav или даже mp3-файлов?

при использовании мастера обучения (UI тренировки панели управления) учебные файлы хранятся в {AppData}LocalMicrosoftSpeechFilesTrainingAudio.

Как я могу использовать или сделать пользовательское обучение вместо использования мастера обучения?

Панель управления речью создает записи реестра для учебных аудиофайлов в разделе HKCUSoftwareMicrosoftSpeechRecoProfilesTokens{ProfileGUID}{00000000-0000-0000-0000-0000000000000000}Files

должны ли быть помещены записи реестра, созданные кодом?

причина этого в том, что я хочу настроить поезд с моими собственными файлами wav и списком слов и фраз, а затем перенести все в другие системы.

2 ответов


вы можете создать пользовательское обучение с помощью SAPI engine (не управляемый api)

здесь ссылке о том, как это сделать (хотя и немного расплывчато)


конечно, можно обучить SAPI с помощью C#. вы можете использовать обертки speechlib вокруг SAPI для доступа к API режима обучения из C#.вот!--2-- > @Eric Brown ответил на процедуру

  • создайте распознаватель inproc и свяжите соответствующий аудиовход.
  • убедитесь, что вы сохраняете звук для ваших распознаваний; он понадобится вам позже.
  • создайте грамматику, содержащую текст для обучения.
  • установить грамматика состояние приостановить распознаватель при возникновении распознавания. (Это также помогает при обучении из аудиофайла.)

    когда происходит распознавание:

  • получить распознанный текст и сохранить аудио.

  • создайте объект stream с помощью CoCreateInstance (CLSID_SpStream).
  • создайте обучающий аудиофайл с помощью ISpRecognizer:: GetObjectToken и ISpObjectToken:: GetStorageFileName и привяжите его к потоку (используя ISpStream:: BindToFile ).
  • скопируйте сохраненный звук в объект stream.
  • QI объект stream для интерфейса ISpTranscript и используйте ISpTranscript:: AppendTranscript для добавления распознанного текста в поток.
  • обновите грамматику для следующего высказывания, возобновите распознаватель и повторяйте, пока вы не закончите учебный текст.

другой вариант может быть обучение sapi один раз с желаемым выходом, а затем получить профили с кодом и транспортируйте это в другие системы, следующий код возвращает объект ISpeechObjectTokens.:

метод GetProfiles возвращает выбор пользователя доступны профили речи. Профили сохраняются в конфигурации речи база данных в виде серии токенов, каждый из которых представляет один профиль. GetProfiles извлекает все доступные маркеры профиля. Этот возвращаемый список является объектом ISpeechObjectTokens. Дополнительные или более подробная информация о токенах доступно в методах связано с ISpeechObjectTokens. Поиск токенов может быть продолжен уточнено с помощью поиска RequiredAttributes и OptionalAttributes атрибуты. Только маркеры, соответствующие указанным RequiredAttributes атрибуты поиска. Из тех жетонов, которые соответствуют RequiredAttributes ключ, OptionalAttributes перечисляет устройства в порядке сопоставление OptionalAttributes. Если атрибуты поиска не предлагаются, все жетоны не возвращаются. Если аудиоустройства не соответствуют критерий, GetAudioInputs возвращает пустой выбор, то есть Коллекция ISpeechObjectTokens с ISpeechObjectTokens:: количество свойство нуля. см. раздел маркеры объектов и параметры реестра для списка 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