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

Можно ли программно тренировать распознаватель, дающий .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 и список слов и фраз, а затем переносить все в другие системы.

Ответ 1

Вы можете создавать настраиваемое обучение с использованием механизма SAPI (а не управляемого api)

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

Ответ 2

Конечно, можно обучить SAPI с помощью С#. вы можете использовать обломоки talklib вокруг SAPI для доступа к API-интерфейсам режима обучения из С#.here @Эрик Браун ответил на процедуру

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

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

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

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

Другим вариантом может быть обучение 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