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/
см. также статью http://en.wikipedia.org/wiki/Speech_recognition
вы должны использовать SpeechRecognitionEngine
. Чтобы использовать волновой файл, вызовите SetInputToWaveFile
. Я хотел бы помочь тебе больше, но я не эксперт.
О, и если ваше слово действительно triskaidekaphobia
, Я не думаю, что даже механизм распознавания человеческой речи распознает это...
я протестировал ваш код, но он не захватывает файл wave должным образом. Это ловить
Если Не OpenFileDialog1.имя файла.Содержит ("wav") затем Функции MessageBox.Show ("неверный файл") Еще Поля textbox1.Text = OpenFileDialog1.имя файла Конец, Если
Не условие else. Я пробовал использовать .помашите и в струне.
Мне также нужен пример кода для транскрибирования wav-файла в текст не с микрофона. Пожалуйста, если вы пришли к хорошему решению, пожалуйста, разместите его здесь.