Reconnaissance vocale simplifiée avec microsoft speech

Soyez le premier à donner votre avis sur cette source.

Vue 19 918 fois - Téléchargée 1 978 fois


Description

Ce code est une routine simplifiée de reconnaissance vocale.

Pour le faire fonctionner il faudra dabord installer Microsoft Speech SDK 5.1 ( http://www.microsoft.com/downloads/details.aspx?FamilyId=5E86EC97-40A7-453F-B0EE-6583171B4530&displaylang=en ).

Alors pour commencer, faites executer le projet, et dites de façon compréhensible "Say Hi everyone". "Say Hi Everyone" devrait s'afficher. Sinon, reprononcer plus clairement. Ensuit dites "Say It works" et "Say It works" devrait aussi s'afficher.

Maintenant vous pouvez analyser le code.

Source / Exemple :


'Constante de la grammaire
Const m_GrammarId = 14
'Variables de la reconnaisance
Dim WithEvents RecoContext As SpSharedRecoContext
Dim Grammar As ISpeechRecoGrammar ' La grammaire est
'une banque de mots. Le SDK chosira toujours un mot
'faisant partit de la grammaire
Dim TopRule As ISpeechGrammarRule
Dim ListItemsRule As ISpeechGrammarRule
'Constante du mot a dire avant la commande vocale
Const m_def_PreCommandString = "Say"
Dim m_PreCommandString As String
'Collection source de la grammaire
Public GrammarSource As Collection

Sub InitReco()

'Initie les variables
Dim AfterCmdState As ISpeechGrammarRuleState
Set RecoContext = New SpSharedRecoContext
Set Grammar = RecoContext.CreateGrammar(m_GrammarId)
        
'TopRule=Le mot avant
'ListItemsRule=La règle qui détermine le 2e mot
Set TopRule = Grammar.Rules.Add("TopLevelRule", SRATopLevel Or SRADynamic, 1)
Set ListItemsRule = Grammar.Rules.Add("ListItemsRule", SRADynamic, 2)
Set AfterCmdState = TopRule.AddState

m_PreCommandString = m_def_PreCommandString
TopRule.InitialState.AddWordTransition AfterCmdState, _
            m_PreCommandString, " ", , "", 0, 0
AfterCmdState.AddRuleTransition Nothing, ListItemsRule, "", 1, 1
RebuildGrammar GrammarSource
Grammar.CmdSetRuleState "TopLevelRule", SGDSActive
        
End Sub

Sub RebuildGrammar(Source As Collection)

Dim i As Integer
For i = 1 To Source.Count
    Dim text As String
    text = Source(i)
    'Ajoute tous les mots dans la grammaire
    ListItemsRule.InitialState.AddWordTransition Nothing, text, " ", , text, i, i
Next
'Recompile la grammaire
Grammar.Rules.Commit
'Avant de recompiler la prochaine fois, il faudra
'réajouter tous les mots, alors chaque fois que l'on
'veut modifier la grammaire, il faut réappeler
'RebuildGrammar

    
End Sub

Private Sub Form_Load()
        
'La source de la gramaire
Set GrammarSource = New Collection
GrammarSource.Add "Hi everyone"
GrammarSource.Add "It works"
        
'Après avoir changer la source n'oublier jamais d'appeler
'RebuildGrammar (GrammarSource) pour mettre la grammaire a
'jour. Ici ce n'est pas nécessaire puisque InitReco
'appelle RebuildGrammar
        
'Assurez-vous de ne jamais avoir de double dans la grammaire
'sinon il y aura des erreurs
InitReco

End Sub

Private Sub RecoContext_Recognition(ByVal StreamNumber As Long, ByVal StreamPosition As Variant, ByVal RecognitionType As SpeechLib.SpeechRecognitionType, ByVal Result As SpeechLib.ISpeechRecoResult)

'Result.PhareInfo.GetText est le text lors de la reconnaissance

Print Result.PhraseInfo.GetText

'Vous pouvez écrire vos code ici; exemple:

'Text=Result.PhraseInfo.GetText
'If Text="Say Hi everyone" then
'...
'End If

End Sub

Conclusion :


Je devrais bientot faire paraitre une source pour faire parler l'ordinateur, qui fonctionne elle aussi avec Speech.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
4
Date d'inscription
samedi 14 novembre 2009
Statut
Membre
Dernière intervention
27 février 2014

MERCI BEAUCOUP !!!!!
Ca marche et c'est génial !!! :-)
Messages postés
300
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
27 mai 2012
3
bonjour,
je relance le sujet semble-t-il close depuis 2007 ^^
j'ai lancé ce code et ca marche pas mal du tout

j'ai défini dans la grammaire : "exit application", "open file", "close file", "yes", "no", "select item one", "select item twoo" ... jusqu'a 10 et "let's go"

je suis heureux que tout marche enfin presque.
il ne reconnait pas les "select item x"

sauriez vous donner une raison à cela (autre que le fait que j'ai un accent anglais fort mauvais ^^ ca j'essaye de le debuguer mais ce n'est pas facile)

il me semble également qu'on peut définir des règles, ce qui devrait permetre de faire un groupe du genre "select item n" avec n un nombre

merci pour vos réponse.
(au passage un 10/10 ^^)
Messages postés
292
Date d'inscription
samedi 25 février 2006
Statut
Membre
Dernière intervention
22 février 2009

Salut

Tu peux vérifier que la reconnaissance vocale marche en allant dans Panneau de config > Son, voix et périphériques > Voix
Là tu as un onglet Reconnaissance vocale, tu peut par exemple faire l'apprentissage. Si ça marche, le problème viens de la source (qui est pourtant largement testée). Si tu n'as pas accès à cet onglet et que tu n'as que Synthese vocale, c'est que MsSpeech est mal installé.
Messages postés
15
Date d'inscription
mardi 16 mars 2004
Statut
Membre
Dernière intervention
16 avril 2008

Eh bien l'exécution à bien lieu, le seul soucis c'est que j'ai beau tordre la langue de shakespear en passant de l'accent français à celui texan, le prog est totalement incapable de ne détecter ne serait-ce que le mot "Hi".
Cela m'effraie. Pourtant j'ai testé le micro, l'E/S du micro etc... On me reçoit 5/5 sur TeamSpeak, mais le programme non.
Voilà ;)
Messages postés
292
Date d'inscription
samedi 25 février 2006
Statut
Membre
Dernière intervention
22 février 2009

Que veux tu dire par "ça ne marche pas"? Peux-tu préciser?
Afficher les 32 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.