C #: transcribir archivo WAV a texto (de voz a texto) con espacios de nombres System.Speech
-
21-09-2019 - |
Pregunta
¿Cómo se utiliza la clase de espacio de nombres del habla .NET para convertir audio en un WAV archivo a forma textual que puedo mostrar en la pantalla o guardar en el archivo?
Busco a algunas muestras de tutoría.
ACTUALIZACIÓN
Encontrados un ejemplo de código aquí . Pero cuando lo probé da resultados incorrectos. A continuación se muestra el ejemplo de código VB que he adoptado. (En realidad no me importa el idioma, siempre y cuando sea su VB / C # ...). No me está dando resultados adecuados. Asumo que si ponemos la gramática correcta - es decir, las palabras que esperamos en la grabación - deberíamos obtener la salida textual de eso. En primer lugar he intentado con palabras de la muestra que se encuentran en la llamada. A veces se imprime sólo que (una) palabra y nada más. Luego probé palabras que totalmente no esperamos en la grabación ... Por desgracia, impreso que también ...: (
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
ACTUALIZACIÓN (después Nov 28ª)
encontrado una forma de cargar una gramática por defecto. Es algo parecido a esto:
sre.LoadGrammar(New DictationGrammar)
Todavía hay problemas aquí. El reconocimiento no es exacta. La salida es basura. Para un archivo de 6min da probablemente 5-6 palabras de texto totalmente irrelevante para el archivo de voz.
Solución
Las clases en System.Speech son para el texto a voz (principalmente una característica apartamentos Acceso).
Se busca el reconocimiento de voz. Existe la System.Speech.Recognition espacio de nombres disponibles desde .Net 3.0. Utiliza el motor de escritorio de Windows del habla. Esto podría ayudarle a empezar, pero creo que hay mejores motores que hay.
El reconocimiento de voz es muy complicado y difícil hacerlo bien, también hay algunos productos comerciales disponibles.
Otros consejos
Me di cuenta que es una vieja pregunta, pero hay una mejor información disponible en preguntas y respuestas posteriores. Por ejemplo, véase ¿Cuál es la mejor opción para la transcripción de voz a texto en una aplicación asp.net web?
En lugar de llamar SetInputToDefaultAudioDevice () se puede llamar SetInputToWaveFile () para leer de un archivo de audio.
El motor de reconocimiento de escritorio que viene en Windows Vista y Windows 7 incluye una gramática de dictado como se muestra en la respuesta se hace referencia.
En realidad se necesita kit de herramientas de lenguaje natural. En Python he utilizado NTLK http://www.nltk.org/
ver el artículo, así http://en.wikipedia.org/wiki/Speech_recognition
Se debe utilizar la SpeechRecognitionEngine
. Para utilizar un archivo de onda, llamada SetInputToWaveFile
. Me gustaría poder ayudar más, pero no soy un experto.
Ah, y si su palabra es muy triskaidekaphobia
, no creo que incluso un motor de reconocimiento de voz humana reconocería que ...
He probado el código, pero no es agarrar archivo de onda adecuada. Se está imponiendo
Si no OpenFileDialog1.FileName.Contains ( "WAV") A continuación, MessageBox.Show ( "archivo incorrecto") Más TextBox1.Text = OpenFileDialog1.FileName End If
No es la condición más. He intentado utilizar .wav en la cadena también.
También estoy en necesidad de un código de ejemplo para la transcripción de archivos WAV a texto no desde el micrófono. Por favor, si u llegaron a una buena solución para publicarlo aquí.