C#: транскрибируйте WAV-файл в текст (речь в текст) с помощью системы.Пространства имен речи

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

Я ищу некоторые образцы учебников.

обновление

найден образец кода здесь. Но когда я попробовал, это дало неверные результаты. Ниже приведен пример кода vb, который я принял. (На самом деле я не против lang, пока его либо vb/c#...). Это не дает мне правильное результаты. Я предполагаю, что если мы поместим правильную грамматику - то есть слова, которые мы ожидаем в записи, - мы должны получить текстовый результат этого. Сначала я попробовал с образцами слов, которые находятся в вызове. Иногда он печатал только это (одно) слово и ничего больше. Затем я попробовал слова, которых мы совершенно не ожидаем в записи...К сожалению, это тоже распечатали... :(

Imports System
Imports System.Speech.Recognition

Public Class Form1

    Dim WithEvents sre As SpeechRecognitionEngine

    Private Sub btnLiterate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLiterate.Click
        If TextBox1.Text.Trim.Length = 0 Then Exit Sub
        sre.SetInputToWaveFile(TextBox1.Text)
        Dim r As RecognitionResult
        r = sre.Recognize()
        If r Is Nothing Then
            TextBox2.Text = "Could not fetch result"
            Return
        End If
        TextBox2.Text = r.Text
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBox1.Text = String.Empty
        Dim dr As DialogResult
        dr = OpenFileDialog1.ShowDialog()
        If dr = Windows.Forms.DialogResult.OK Then
            If Not OpenFileDialog1.FileName.Contains("wav") Then
                MessageBox.Show("Incorrect file")
            Else
                TextBox1.Text = OpenFileDialog1.FileName
            End If
        End If
    End Sub

    Public Sub New()

        ' This call is required by the Windows Form Designer.
        InitializeComponent()

        sre = New SpeechRecognitionEngine()

    End Sub

    Private Sub sre_LoadGrammarCompleted(ByVal sender As Object, ByVal e As System.Speech.Recognition.LoadGrammarCompletedEventArgs) Handles sre.LoadGrammarCompleted

    End Sub

    Private Sub sre_SpeechHypothesized(ByVal sender As Object, ByVal e As System.Speech.Recognition.SpeechHypothesizedEventArgs) Handles sre.SpeechHypothesized
        System.Diagnostics.Debug.Print(e.Result.Text)
    End Sub

    Private Sub sre_SpeechRecognitionRejected(ByVal sender As Object, ByVal e As System.Speech.Recognition.SpeechRecognitionRejectedEventArgs) Handles sre.SpeechRecognitionRejected
        System.Diagnostics.Debug.Print("Rejected: " & e.Result.Text)
    End Sub

    Private Sub sre_SpeechRecognized(ByVal sender As Object, ByVal e As System.Speech.Recognition.SpeechRecognizedEventArgs) Handles sre.SpeechRecognized
        System.Diagnostics.Debug.Print(e.Result.Text)
    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim words As String() = New String() {"triskaidekaphobia"}
        Dim c As New Choices(words)
        Dim grmb As New GrammarBuilder(c)
        Dim grm As Grammar = New Grammar(grmb)
        sre.LoadGrammar(grm)
    End Sub

End Class

обновление (после 28 ноября)

нашел способ загрузить грамматику по умолчанию. Это звучит примерно так: это:

sre.LoadGrammar(New DictationGrammar)

здесь еще есть проблемы. Признание не является точным. Результат-мусор. Для файла 6min он дает, вероятно, 5-6 слов текста, совершенно не относящегося к голосовому файлу.

5 ответов


классы в системе.Речь предназначена для текста в речь (в первую очередь, функция доступности).

вы ищете для распознавания голоса. Есть система.Речь.Признание пространство имен доступно с .Net 3.0. Он использует речевой движок рабочего стола Windows. Это может заставить вас начать, но я думаю, что есть лучшие двигатели.

распознавание голоса очень сложно и трудно сделать правильно, есть также некоторые коммерческие продукты доступны.


Я понимаю, что это старый вопрос, но есть лучшая информация, доступная в более поздних вопросах и ответах. Например, см. каков наилучший вариант для транскрибирования речи в текст в asp.net веб-приложение?

вместо вызова SetInputToDefaultAudioDevice () можно вызвать SetInputToWaveFile () для чтения из аудиофайла.

механизм распознавания рабочего стола, который поставляется в Windows Vista и Windows 7, включает грамматику диктовки, как показано в ссылочный ответ.


вам действительно нужен инструментарий естественного языка. В python я использовал NTLK http://www.nltk.org/

в .Сети я нашла антилопу https://stackoverflow.com/questions/1762040/natural-language-toolkit-equivalent-in-c

см. также статью http://en.wikipedia.org/wiki/Speech_recognition


вы должны использовать SpeechRecognitionEngine. Чтобы использовать волновой файл, вызовите SetInputToWaveFile. Я хотел бы помочь тебе больше, но я не эксперт.

О, и если ваше слово действительно triskaidekaphobia, Я не думаю, что даже механизм распознавания человеческой речи распознает это...


я протестировал ваш код, но он не захватывает файл wave должным образом. Это ловить

Если Не OpenFileDialog1.имя файла.Содержит ("wav") затем Функции MessageBox.Show ("неверный файл") Еще Поля textbox1.Text = OpenFileDialog1.имя файла Конец, Если

Не условие else. Я пробовал использовать .помашите и в струне.

Мне также нужен пример кода для транскрибирования wav-файла в текст не с микрофона. Пожалуйста, если вы пришли к хорошему решению, пожалуйста, разместите его здесь.