[Ex] Reconnaissance Vocale avec SAPI

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

[Ex] Reconnaissance Vocale avec SAPI

#1

Message par timmalos »

Matériel/Softwares nécessaires pour utilisation du script
  • Pour que ce qui suive marche, vous devez avoir un microphone installé sur votre machine.
  • Le script utilise SAPI, vous pouvez telecharger la version 5.1 ici :
    http://www.microsoft.com/downloads/deta ... layLang=en
    Il semble cependant que SAPI est maintenant distribué avec Vista et Win7, donc testez le script avant d'installer SAPI, vous pourriez avoir une bonne surprise.
Principe
Le script écoute ce que vous dites dans le micro, puis grâce à la reconnaissance vocale SAPI, va écrire le message dans la console. Plus vous utilisez la reconnaissance vocale, plus les résultats sont bon. Vous pouvez avoir d'excellentes réponses après 1 heure d'utilisation. La reconnaissance vocale utilise un moteur de reconnaissance vocale différent de celui utilisé par Vista/7, ce qui veut dire que vous pouvez utiliser la reconnaissance vocale dans votre script pour vos propres commandes sans interferer avec la reconnaissance vocale déjà mise en place (si c'est le cas) par Vista/7.


Script

Code : Tout sélectionner

Global $h_Context = ObjCreate("SAPI.SpInProcRecoContext")
Global $h_Recognizer = $h_Context.Recognizer
Global $h_Grammar = $h_Context.CreateGrammar(1)
$h_Grammar.Dictationload
$h_Grammar.DictationSetState(1)

;Create a token for the default audio input device and set it
Global $h_Category = ObjCreate("SAPI.SpObjectTokenCategory")
$h_Category.SetId("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\AudioInput\TokenEnums\MMAudioIn\")
Global $h_Token = ObjCreate("SAPI.SpObjectToken")
$h_Token.SetId("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\AudioInput\TokenEnums\MMAudioIn\")
$h_Recognizer.AudioInput = $h_Token

Global $i_ObjInitialized = 0

Global $h_ObjectEvents = ObjEvent($h_Context, "SpRecEvent_")
If @error Then
    ConsoleWrite("ObjEvent error: " & @error & @CRLF)
    $i_ObjInitialized = 0
Else
    ConsoleWrite("ObjEvent created Successfully!" & @CRLF)
    $i_ObjInitialized = 1
EndIf

While $i_ObjInitialized
    Sleep(5000)
    ;Allow the Audio In to finalize processing on the last 5 second capture
    $h_Context.Pause
    ;Resume audio in processing
    $h_Context.Resume
    ;Reset event function allocation (what is this? I think its garbage collection or something, needs clarification)
    $h_ObjectEvents = ObjEvent($h_Context, "SpRecEvent_")
WEnd

Func SpRecEvent_Hypothesis($StreamNumber, $StreamPosition, $Result)
    ConsoleWrite("Hypothesis(): Hypothized text is: " & $Result.PhraseInfo.GetText & @CRLF)
EndFunc ;==>SpRecEvent_Hypothesis

Func SpRecEvent_Recognition($StreamNumber, $StreamPosition, $RecognitionType, $Result)
    ConsoleWrite($RecognitionType & "||" & $Result.PhraseInfo.GetText & @CRLF)
EndFunc ;==>SpRecEvent_Recognition

Func SpRecEvent_SoundStart($StreamNumber, $StreamPosition)
    ConsoleWrite("Sound Started" & @CRLF)
EndFunc ;==>SpRecEvent_SoundStart

Func SpRecEvent_SoundEnd($StreamNumber, $StreamPosition)
    ConsoleWrite("Sound Ended" & @CRLF)
EndFunc ;==>SpRecEvent_SoundEnd
 
 
Informations supplémentaires
L'event SoundEnd semble ne pas marcher, mais tout le reste est ok. Ne pas s'inquieter a propos du Sleep(5000), il n'interfere pas avec l'opération de reconnaissance vocale.
Le lien suivant est la documentation SAPI si besoin est :
http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Have fun!
Avatar du membre
SrBelial
Niveau 7
Niveau 7
Messages : 335
Enregistré le : jeu. 22 juil. 2010 11:29
Localisation : 81 et 31
Status : Hors ligne

Re: [Ex] Reconnaissance Vocale avec SAPI

#2

Message par SrBelial »

excellent, je vais tester ça !
.-SrB-. The One
  • NON ! AutoIt n'est PAS un langage réservé à la réalisation de bots !
  • OUI ! AutoIt est un langage à part entière !
  • Dans SciTE sélectionnez 1 mot puis F1
  • Don't want english doc ?? go to documentation française !! >>ICI<<
[/size]
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [Ex] Reconnaissance Vocale avec SAPI

#3

Message par pierrotm777 »

Trouvé sur le site us, peut être un peu plus complet !
► Afficher le texte
mdanielm
Membre émérite
Membre émérite
Messages : 254
Enregistré le : mer. 11 déc. 2013 19:48
Status : Hors ligne

Re: [Ex] Reconnaissance Vocale avec SAPI

#4

Message par mdanielm »

Dans les exemples ci dessus QUI FONCTIONNENT, vous utilisez chaque fois une grammaire de dictée (dictation) qui reconnaît tous les mots du dictionnaire avec plus ou moins de succès. C'est amusant!
Dans les applications sérieuses, on a besoin d'analyser le discours d'entrée pour accroître le succès de la reconnaissance. On utilise une grammaire qui est faite d'états et de transitions entre les états.

Ex 1:
Je dis dans le micro: "trois cent vingt et un plus deux cents" et j'entends une voix de synthèse me répondre: "cinq cent vingt et un"

Ex 2:
Réservation par téléphone des billets d'avion. Il faut reconnaître, avant de demander confirmation, des phrases du type:
"Je souhaite un vol de Nice à Paris", "Je voudrais un billet de Bordeaux à la ville de Strasbourg", .....

Ex 3:
Je veux reconnaître des phrases: "Hier, il était Dimanche", "Aujourd'hui il est Lundi", "Demain il sera Mardi"
et refuser les phrases: "Hier il sera Dimanche", ....
Il ne s'agit pas de tester la valeur de vérité de la proposition mais bien la syntaxe grammaticale.
Bonne réflexion.
Répondre