C #: transcribir archivo WAV a texto (de voz a texto) con espacios de nombres System.Speech

StackOverflow https://stackoverflow.com/questions/1768679

  •  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.

¿Fue útil?

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.

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í.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top