Bonjour,
J'ai reussi à faire une transcription en VB.NET du tutoriel présent à cette adresse :
http://lgmorand.developpez.com/dotnet/syntrecovocale/La synthèse vocale fonctionne très bien. En revanche j'ai quelques soucis avec la reconnaissance vocale. La méthode « HandlerReco » est bien appelée à chaque fois que je prononce un mot. En revanche, il n'arrive pas à afficher la règle déclenchée (retour d'une chaîne vide dans la variable « regle »).
Et en ce qui la variable « entree », j'ai affiché ce qu'elle contenait avec une MessageBox et il me retourne pas le mot identifié mais à chaque fois le mot « blah ».
Alors je voudrais savoir si vous pourriez tester ce code et si vous obteniez la même chose ?
Pour que le code fonctionne fonctionne bien, il faut :
1° Installer Microsoft Speech SDK 5.1 (disponible à cette adresse :
[ Lien ] >>> Nom du fichier : SpeechSDK51.exe 68.0 MB
2° Ajouter une référence avec le fichier
sapi.dll se trouvant dans ce répertoire : "C:\Program Files\Fichiers communs\Microsoft Shared\Speech"
3° Configurer Windows pour qu'il utilise le moteur du Speech SDK "SAPI Developer Sample Engine"
Panneau de configuration > Voix
Voici le code en VB.NET :
Code :
Private
Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Button1.Click
test(TextBox1.Text)' TestBox1.Text contient le texte que l'utilisateur veut entendreEndSub
Sub test(ByVal phrase AsString)' Synthèse vocaleDim voix AsNew SpVoice
Dim flags As SpeechVoiceSpeakFlags
If ComboBox1.SelectedItem = ""Then
MsgBox("Veuillez sélectionner le type de voix !!!", MsgBoxStyle.OkOnly)ExitSubEndIf
voix.Voice = voix.GetVoices("", "").Item(Convert.ToInt32(ComboBox1.SelectedIndex))If TextBox1.Text = ""Then
MsgBox("Veuillez entrer une phrase !!!", MsgBoxStyle.OkOnly)ExitSubEndIf
voix.Speak(phrase, flags)
voix.Volume = 50EndSub
--------------------------------------------------------------------------
PrivateSub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles Button2.Click
test2()EndSub
Sub test2()' Reconnaissance vocaleDim monRecoContext AsNew SpSharedRecoContext
Dim maGrammaire As ISpeechRecoGrammar = monRecoContext.CreateGrammar(0)
maGrammaire.CmdLoadFromFile("C:\grammaire.xml", SpeechLoadOption.SLODynamic)
maGrammaire.DictationSetState(SPRULESTATE.SPRS_ACTIVE)
AddHandler monRecoContext.Recognition, AddressOf HandlerReco
EndSub
#Region"HandlerReco"PrivateSub HandlerReco(ByVal StreamNumber AsInteger, ByVal StreamPosition AsObject, ByVal RecognitionType As SpeechRecognitionType, ByVal result As ISpeechRecoResult)Dim entree AsString = result.PhraseInfo.GetText(0, -1, True)Dim regle AsString = result.PhraseInfo.Rule.Name
MsgBox(entree)Dim precision AsDouble = CDbl(result.PhraseInfo.Elements.Item(0).ActualConfidence)Dim precision2 AsDouble = CDbl(result.PhraseInfo.Elements.Item(0).ActualConfidence)
If precision <= -1ThenSelectCase regle
Case"message" : MessageBox.Show("Nouveau message")Case"exit" : MessageBox.Show("L'application va être fermée")EndSelectEndIfEndSub#End Region
Voici le contenu du fichier "Grammaire.XML"
Citation:
<GRAMMAR LANGID="409"> <RULE NAME="developpez" TOPLEVEL="ACTIVE"> <P>developpez</P> </RULE> <RULE NAME="message" TOPLEVEL="ACTIVE"> <P>message</P> </RULE> <RULE NAME="hide" TOPLEVEL="ACTIVE"> <P>hide </P> </RULE> <RULE NAME="exit" TOPLEVEL="ACTIVE"> <L> <P>exit</P> <P>close</P> </L> </RULE> </GRAMMAR> |
Merci à tous ceux qui prêteront un peu d'attention à mon post.