C #: transcrivent fichier WAV au texte (speech-to-text) avec System.Speech namespaces
-
21-09-2019 - |
Question
Comment utilisez-vous les classes d'espace de noms de la parole .NET pour convertir l'audio dans un fichier WAV forme textuelle que je peux afficher sur l'écran ou enregistrer le fichier?
Je cherche quelques exemples de travaux dirigés.
UPDATE
Trouver un exemple de code . Mais quand je l'ai essayé, il donne des résultats incorrects. Ci-dessous l'exemple de code vb Je l'ai adopté. (En fait, je ne me dérange pas le lang tant que son soit vb / c # ...). Il ne me donne pas des résultats corrects. Je suppose que si nous mettons la grammaire à droite - à savoir les mots que nous attendons dans l'enregistrement - nous devrions obtenir la sortie textuelle de cela. D'abord, je l'ai essayé avec des échantillons des mots qui sont dans l'appel. Parfois imprimé seulement (un) mot et rien d'autre. Alors j'ai essayé des mots que nous ne prévoyons pas tout à fait dans l'enregistrement ... Malheureusement, il imprimé que trop ...: (
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
Mise à jour (après le 28 novembre)
trouvé un moyen de charger une grammaire par défaut. Il va quelque chose comme ceci:
sre.LoadGrammar(New DictationGrammar)
Il y a encore des problèmes ici. La reconnaissance est pas exact. La sortie est de la foutaise. Pour un fichier 6min il donne probablement 5-6 mots de texte tout à fait hors de propos dans le fichier vocal.
La solution
Les classes System.Speech sont pour le texte à la parole (principalement une caractéristique de Acessibilité).
Vous êtes à la recherche de reconnaissance vocale. Il y a l'espace de noms System.Speech.Recognition disponible depuis .Net 3.0. Il utilise le moteur Speech bureau Windows. Cela pourrait vous aider à démarrer, mais je pense qu'il ya de meilleurs moteurs là-bas.
La reconnaissance vocale est très compliquée et difficile à faire droit, il y a aussi des produits commerciaux disponibles.
Autres conseils
Je sais que c'est une vieille question, mais il y a plus d'informations disponibles dans les questions et les réponses plus tard. Par exemple, voir Quelle est la meilleure option pour transcrivant speech-to-text dans une application web asp.net?
Au lieu d'appeler SetInputToDefaultAudioDevice (), vous pouvez appeler SetInputToWaveFile () pour lire un fichier audio.
Le moteur de reconnaissance de bureau qui vient dans Windows Vista et Windows 7 comprend une grammaire de dictée comme indiqué dans la réponse référencée.
Vous avez besoin réellement boîte à outils de langage naturel. En python, je l'ai utilisé NTLK http://www.nltk.org/
voir l'article ainsi http://en.wikipedia.org/wiki/Speech_recognition
Vous devez utiliser le SpeechRecognitionEngine
. Pour utiliser un fichier wave, appelez SetInputToWaveFile
. Je voudrais pouvoir vous aider plus, mais je ne suis pas expert.
Oh, et si votre mot est vraiment triskaidekaphobia
, je ne pense même pas un moteur de reconnaissance de la parole humaine reconnaîtrait que ...
Je l'ai testé votre code, mais il est pas saisir fichier wave correctement. Il est contagieux
Si non OpenFileDialog1.FileName.Contains ( ".wav") Then MessageBox.Show ( "fichier incorrect") Autre TextBox1.Text = OpenFileDialog1.FileName End If
Pas la condition else. J'ai essayé d'utiliser .wav dans la chaîne aussi.
Je suis aussi besoin d'un exemple de code pour transcrivant fichier wav au texte pas de microphone. S'il vous plaît si u est venu à une bonne solution si s'il vous plaît poster ici.