Reconnaissance vocale simplifiée avec microsoft speech


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

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.