Speech Recognition Command and Control SAPI 5.1

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Speech Recognition Command (Reconnaissance vocale)

Message par Ar-S »

Arg je n'arrive pas à le faire marcher.
Probleme avec COMatePlus ?
"L'initiation de la reconnaissance vocale à échoué :["
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Speech Recognition Command (Reconnaissance vocale)

Message par Backup »

..........
Dernière modification par Backup le mer. 13/juin/2012 18:39, modifié 2 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Speech Recognition Command (Reconnaissance vocale)

Message par Ar-S »

Dobro a écrit :questions bete ,

tu as Seven ?
tu as activé la reconnaissance vocale de Seven ? (il sert a rien de l'activer )

tu as crée le fichier XML ( "dico.xml") (utilise Notepad++ pour ça )
si tu sauve avec le Wordpad , tu vas avoir un "dico.xml.txt" ...c'est pas bon
Vivi tout de même ^^

Par contre je m'en vais tester le 1er code.

---edit----

le 1er code fonctionne pourtant bien :?

Arf je crois que j'ai trouvé, c'est bien le bloc note qui a créé des car spéciaux ... Je modifie et retest
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Speech Recognition Command (Reconnaissance vocale)

Message par Ar-S »

C'est bien mon bloc note qui avait squizzé les accents ^^
Par contre maintenant ce n'est pas Virginie qui tchatch, c'est la pauvre voix robotisée de windows.. Faut que je regarde ça de plus prés.

En tout cas, un grand merci à vous ! Y'a de quoi s'amuser comme un fou !
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Speech Recognition Command (Reconnaissance vocale)

Message par Backup »

Dobro a écrit :a ce propos , si vous installez Virginie (magnifique voix Française, en Sapi5 ) sous Win seven 64 bit

il est possible que cette vois n’apparaisse pas dans les voix disponible de Seven

pour la rendre disponible il faut allez dans :

Ordinateur > c:\ Windows > SysWOW64 > Speech >SpeechUX
et double cliquer dur le fichier "sapi.cpl" ; et voila , elle sera reconnue :)

je remet ici : le lien de la voix Virginie :
http://idee-association.org/wp-content/ ... French.zip

:)
sinon la procedure

Code : Tout sélectionner

speakk(voix,text.s,volume,vitesse)
voix = le numero de la voix disponible dans Seven
par defaut 0 c'est la voix fourni de base
sauf si tu installe virginie
( en fait faudrai vérifier dans le panneauc de config a quel emplacement est la voix )
et mettre le paramettre voix avec le numero (0,1,2,3,4..etc )

ps : j'ai fait une librairie qui permet d'afficher/recuperer le nom des voix, de parler ..etc .. lib_Speak .. faut que je la remette en ligne
le paramettre voix deviens une chaine comprenant directement le nom de la voix a faire parler ...
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Speech Recognition Command (Reconnaissance vocale)

Message par Ar-S »

Ordinateur > c:\ Windows > SysWOW64 > Speech >SpeechUX
et double cliquer dur le fichier "sapi.cpl" ; et voila , elle sera reconnue
oups :oops: meci, c'est parfait, ça marche au poil !
:mrgreen:
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Speech Recognition Command (Reconnaissance vocale)

Message par Backup »

autre exemple , utilisation avec un programme comprenant des boutons , et des case a cocher :)

il faut mettre dans le meme emplacement ceci avec comme nom "dico_choix.xml"
se sera le dictionnaire de mots reconnu dans le programme ...
contrairement a celui au dessus, ce programme ne comprends que la formulation simple

par exemple pour le bouton "ok" , il faut dire "ok" ... rien avant , rien apres ;)

dans le dico , seul les termes :"ok,annuler,nico,vache,poisson,chat,quitter" seront reconnus ..
les termes a reconnaitre dans le dico ont la forme :

Code : Tout sélectionner

 <item>
        [b]quitter[/b] [color=#004000]<<<<<<< ici le terme a reconnaitre[/color]
        <tag>$.mouskie={}; $.mouskie._value=[b]"quitter"[/b];</tag> [color=#004000]<<<<< ici le terme qui sera envoyé au prg[/color]
      </item>
voici le dictionnaire "dico_choix.xml"

Code : Tout sélectionner

<GRAMMAR LANGID="40C">
<RULE NAME="interface" TOPLEVEL="ACTIVE">
    <L>
   <P>ok</P>
   <P>quitter</P> 
   <P>annuler</P>
   <P>nono</P>
    <P>nico</P>
    </L>
</RULE>
<RULE NAME="choix" TOPLEVEL="ACTIVE">
    <L>
     <P>vache</P>
     <P>poisson</P>
	 <P>chat</P>
    </L>
</RULE>
</GRAMMAR> 
voici le code :

Code : Tout sélectionner

XIncludeFile "COMatePLUS.pbi"



;{ **************** init synthese Vocale ***************************************
;-init synthese vocale
Procedure Speak2(Text$)
	Interface ISpNotifySource Extends IUnknown
		SetNotifySink(a)
		SetNotifyWindowMessage(a,b,c,d)
		SetNotifyCallbackFunction(a,b,c)
		SetNotifyCallbackInterface(a,b,c)
		SetNotifyWin32Event()
		WaitForNotifyEvent(a)
		GetNotifyEventHandle()
	EndInterface
	
	Interface ISpEventSource Extends ISpNotifySource
		SetInterest(a,b)
		GetEvents(a,b,c)
		GetInfo(a)
	EndInterface
	
	Interface ISpVoice Extends ISpEventSource
		SetOutput(a,b)
		GetOutputObjectToken(a)
		GetOutputStream(a)
		Pause()
		Resume()
		SetVoice(a)
		GetVoice(a)
		Speak(a,b,c)
		SpeakStream(a,b,c)
		GetStatus(a,b)
		Skip(a,b,c)
		SetPriority(a)
		GetPriority(a)
		SetAlertBoundary(a)
		GetAlertBoundary(a)
		SetRate(a)
		GetRate(a)
		SetVolume(a)
		GetVolume(a)
		WaitUntilDone(a)
		SetSyncSpeakTimeout(a)
		GetSyncSpeakTimeout(a)
		SpeakCompleteEvent()
		IsUISupported(a,b,c,d)
		DisplayUI(a,b,c,d,e)
	EndInterface
	
	#CLSCTX_INPROC_SERVER  = $1
	#CLSCTX_INPROC_HANDLER = $2
	#CLSCTX_LOCAL_SERVER   = $4
	#CLSCTX_REMOTE_SERVER  = $10
	#CLSCTX_ALL = (#CLSCTX_INPROC_SERVER|#CLSCTX_INPROC_HANDLER|#CLSCTX_LOCAL_SERVER|#CLSCTX_REMOTE_SERVER)
	
	Global VoiceObject.ISpVoice
	
	
	
	length = Len(Text$)*2+10
	*mem = AllocateMemory(length)
	MultiByteToWideChar_(#CP_ACP ,0,Text$,-1,*mem, length)
	VoiceObject\Speak(*mem,0,0)
	
	DataSection
		CLSID_SpVoice:
		;96749377-3391-11D2-9EE3-00C04F797396
		Data.l $96749377
		Data.w $3391,$11D2
		Data.b $9E,$E3,$00,$C0,$4F,$79,$73,$96
		IID_ISpVoice:
		;6C44DF74-72B9-4992-A1EC-EF996E0422D4
		Data.l $6C44DF74
		Data.w $72B9,$4992
		Data.b $A1,$EC,$EF,$99,$6E,$04,$22,$D4
	EndDataSection
	
	
EndProcedure
;} 
; **********************************************************************




;{ ************ init reconnaissance Vocale **************************************************************
;-init reconaissance Vocale
#CLSCTX_INPROC_SERVER  = $1
#CLSCTX_INPROC_HANDLER = $2
#CLSCTX_LOCAL_SERVER   = $4
#CLSCTX_REMOTE_SERVER  = $10
#CLSCTX_ALL = (#CLSCTX_INPROC_SERVER|#CLSCTX_INPROC_HANDLER|#CLSCTX_LOCAL_SERVER|#CLSCTX_REMOTE_SERVER)
enumeration
	#window
endenumeration



Structure Parametres
	SpRecoContext.i
	SpeechRecoGrammar.i
EndStructure


;Global VoiceObject.ISpVoice


Declare  OpenWindow_Window_0()
Declare  SpeechRecoContextEvents(event.COMateObject, event$, parameterCount)
Declare  Load_Speech_Recognition(*Speech_Recognition.Parametres, File.s)
Declare  Load_Speech_Recognition2(*Speech_Recognition.Parametres)
Declare  Finish_Speech_Recognition(*Speech_Recognition.Parametres)
Declare  Desactive_Recognition(*Speech_Recognition.Parametres, Valeur.l)
Declare  speakk(voix,text.s,volume,vitesse)





CoInitialize_(0)

; **********  chargement du Dico ************************
File.s = "dico_choix.xml"
If Load_Speech_Recognition(@Speech_Recognition.Parametres, File.s) = 0
	MessageRequester("Erreur", "L'initialisation du moteur de la reconnaissance vocale à échoué!")
	End
EndIf
;}
; ***************************************************************************************************




;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Button_0
  #Button_1
  #Button_2
  #CheckBox_3
  #CheckBox_4
  #CheckBox_5
  #Button_6
EndEnumeration
;}
;}
Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 488, 218, 490, 244, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    If CreateGadgetList(WindowID(#Window_0))
      ButtonGadget(#Button_0, 21, 16, 76, 40, "Ok")
      ButtonGadget(#Button_1, 114, 17, 76, 40, "annuler")
      ButtonGadget(#Button_2, 202, 17, 76, 40, "Nico")
      CheckBoxGadget(#CheckBox_3, 38, 110, 163, 24, "vache")
      CheckBoxGadget(#CheckBox_4, 38, 133, 163, 24, "poisson")
      CheckBoxGadget(#CheckBox_5, 38, 156, 163, 24, "chat")
      ButtonGadget(#Button_6, 392, 187, 76, 40, "quitter")
    EndIf
  EndIf
EndProcedure

OpenWindow_Window_0()

;{- Event loop
Repeat
  Select WaitWindowEvent(2)
    ; ///////////////////
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Button_0
        Case #Button_1
        Case #Button_2
        Case #CheckBox_3
        Case #CheckBox_4
        Case #CheckBox_5
        Case #Button_6
      EndSelect
    ; ////////////////////////
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Window_0
          CloseWindow(#Window_0)
          Break
      EndSelect
  EndSelect
Forever
;
;}


;{ ******************** zone procedure Reconnaissance vocale ****************************************
;- procedure reconnaissance vocale
Macro GUID(iid, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, b0)
	DataSection
		IID:
		Data.l $a0
		Data.w $a1, $a2
		Data.b $a3, $a4, $a5, $a6, $a7, $a8, $a9, $b0
	EndDataSection
EndMacro

GUID(IID_ISpeechRecoGrammar ,B6D6F79F,2158,4E50,B5,BC,9A,9C,CD,85,2A,09)
GUID(IID_ISpeechRecognizer, 2D5F1C0C, BD75, 4B08, 94, 78, 3B, 11, FE, A2, 58, 6C) 


Procedure SpeechRecoContextEvents(event.COMateObject, event$, parameterCount)
	Protected iParam.iUnknown
	Protected SpeechRecoResult.COMateObject
	Protected SpeechPhraseInfo.COMateObject
	Protected Texte.s
	
	;Debug("EVT " + Str(parameterCount) + " " + event$)
	
	Select event$
		Case "FalseRecognition"
		;SetGadgetText(#String, "<Phrase ou mot non reconnu>")
		
		Case "Recognition"
		Debug "-------------Recognition-----------------"
		iParam = event\GetObjectEventParam(4)
		If iParam
			SpeechRecoResult = COMate_WrapCOMObject(iParam)
			If SpeechRecoResult
				SpeechPhraseInfo = SpeechRecoResult\GetObjectProperty("PhraseInfo()")
				If SpeechPhraseInfo
					mem_text.s=texte.s ; on retient le mot qui viens d'etre reconnu
					
					Texte.s = SpeechPhraseInfo\GetStringProperty("GetText(0, -1, 1)")  ; on recupere le mot entendu
					
					if mem_text<>texte.s ; ajout du teste qui empeche la diction du meme mot reconnu ..; ajout du teste qui empeche la diction du meme mot reconnu ; on parle seulement si ce n'est pas le meme mot que tout a l'heure
						
						;SetGadgetText(#String, Texte)
						debug texte
						Select Texte
							case "ok" ; terme reçu par la reconnaissance vocale
							MessageRequester("info","tu as choisi 'OK'")
							
							Case "annuler"; terme reçu par la reconnaissance vocale
							MessageRequester("info","tu as choisi 'ANNULER'")
							
							Case "nico"; terme reçu par la reconnaissance vocale
							MessageRequester("info","tu as choisi 'NICO'")
							
							case "vache"; terme reçu par la reconnaissance vocale
							SetGadgetState(#CheckBox_3, 1)
							SetGadgetState(#CheckBox_4, 0)
							SetGadgetState(#CheckBox_5, 0)
							
							case "poisson"; terme reçu par la reconnaissance vocale
							SetGadgetState(#CheckBox_3, 0)
							SetGadgetState(#CheckBox_4, 1)
							SetGadgetState(#CheckBox_5, 0)
							
							case "chat"; terme reçu par la reconnaissance vocale
							SetGadgetState(#CheckBox_3, 0)
							SetGadgetState(#CheckBox_4, 0)
							SetGadgetState(#CheckBox_5, 1)
							
							case "quitter"; terme reçu par la reconnaissance vocale
							CoUninitialize_() ; sert a quitter le moteur de reconnaissance vocale
							end
						EndSelect
						Texte=" "
						
						SpeechPhraseInfo\Release()
					endif
				EndIf
				SpeechRecoResult\Release()
			EndIf
			iParam\Release()
		EndIf
		
		Case "Hypothesis"
		;{
		;Debug "------------Hypothesis------------------"
		; 
		; SetGadgetText(#Text_Message, "Enregistrement en cours...")
		; 
		; iParam = event\GetObjectEventParam(3)
		; If iParam
		; SpeechRecoResult = COMate_WrapCOMObject(iParam)
		; If SpeechRecoResult
		; SpeechPhraseInfo = SpeechRecoResult\GetObjectProperty("PhraseInfo()")
		; If SpeechPhraseInfo
		; Texte = SpeechPhraseInfo\GetStringProperty("GetText(0, -1, 1)")
		; 
		; SetGadgetText(#Editor, Texte + Chr(13) + GetGadgetText(#Editor))
		; 
		; SpeechPhraseInfo\Release()
		; EndIf
		; SpeechRecoResult\Release()
		; EndIf
		; iParam\Release()
		; EndIf
		;}
		
		Case "SoundStart"
		Debug "SoundStart"
		;SetGadgetText(#String, "")
		
		Case "SoundEnd"
		Debug "SoundEnd"
		;SetGadgetText(#Text_Message, "Parler")
		
		Case "StartStream"
		; Debug "StartStream"
		
		
		Case "EndStream"
		; Debug "EndStream"
		ProcedureReturn
	EndSelect
	
EndProcedure



Procedure Load_Speech_Recognition(*Speech_Recognition.Parametres, File.s)
	Protected SpRecoContext.COMateObject
	Protected SpRecoGrammar.COMateObject
	Protected Init_Recognition.l = 0
	
	Protected SpRecognizer.COMateObject
	Protected SpeechRecognizer.COMateObject
	Protected SpObjectTokenCategory.COMateObject
	Protected SpObjectToken.COMateObject
	
	
	SpRecoContext = COMate_CreateObject("SAPI.SpInProcRecoContext")
	Debug COMate_GetLastErrorDescription()
	If SpRecoContext = 0 : Goto Clean : EndIf
	
	
	SpRecoGrammar = SpRecoContext\GetObjectProperty("CreateGrammar(0)")
	If SpRecoGrammar = 0 : Goto Clean : EndIf
	
	RecoGrammar.idispatch = SpRecoGrammar\GetCOMObject()
	If RecoGrammar = 0 : Goto Clean : EndIf
	
	RecoGrammar\QueryInterface(?IID_ISpeechRecoGrammar, @SpeechRecoGrammar_)
	If SpeechRecoGrammar_= 0 : Goto Clean : EndIf
	
	SpeechRecoGrammar.COMateObject = COMate_WrapCOMObject(SpeechRecoGrammar_)
	Debug COMate_GetLastErrorDescription()
	If SpeechRecoGrammar = 0 : Goto Clean : EndIf
	
	#SLOStatic = 0
	#SLODynamic = 1
	If SpeechRecoGrammar\invoke("CmdLoadFromFile('" + File + "', " + Str(#SLODynamic) + ")") <> 0
		Debug COMate_GetLastErrorDescription()
		Goto Clean
	EndIf
	
	If SpRecoContext\SetEventHandler(#COMate_CatchAllEvents, @SpeechRecoContextEvents()) <> 0
		Debug COMate_GetLastErrorDescription()
		Goto Clean
	EndIf
	
	SpRecognizer = SpRecoContext\GetObjectProperty("Recognizer()")
	If SpRecognizer = 0 : Goto Clean : EndIf
	
	
	Recognizer.idispatch = SpRecognizer\GetCOMObject()
	If Recognizer = 0 : Goto Clean : EndIf
	
	Recognizer\QueryInterface(?IID_ISpeechRecognizer, @SpeechRecognizer_)
	If SpeechRecognizer_ = 0 : Goto Clean : EndIf
	
	SpeechRecognizer.COMateObject = COMate_WrapCOMObject(SpeechRecognizer_)
	If SpeechRecognizer = 0 : Goto Clean : EndIf
	
	SpObjectTokenCategory = COMate_CreateObject("SAPI.SpObjectTokenCategory")
	If SpObjectTokenCategory = 0 : Goto Clean : EndIf
	
	#SpeechCategoryAudioIn="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\AudioInput"
	If SpObjectTokenCategory\invoke("SetId('"+ #SpeechCategoryAudioIn +"', 0)") <> 0
		Debug comate_getlasterrordescription()
		Goto Clean
	EndIf
	
	SpObjectToken = COMate_CreateObject("SAPI.SpObjectToken")
	If SpObjectToken = 0 : Goto Clean : EndIf
	
	Audio$=SpObjectTokenCategory\GetStringProperty("Default()")
	Debug audio$
	If SpObjectToken\invoke("SetId('"+ Audio$ + "')") <> 0
		Goto Clean
	EndIf
	
	If SpeechRecognizer\Setpropertyref("AudioInput(" + Str(SpObjectToken) + " as COMateObject)") <> 0
		Goto Clean
	EndIf
	
	; La Règle de grammaire est active.
	#SGDSActive = 1
	If SpeechRecoGrammar\invoke("CmdSetRuleIdState(0, " + Str(#SGDSActive) + ")") <> 0
		Goto Clean
		Else
		Init_Recognition = 1
	EndIf
	
	Clean:
	
	If Init_Recognition = 0
		If SpRecoContext <> 0 : SpRecoContext\Release() : EndIf
		If SpRecoGrammar <> 0 : SpRecoGrammar\Release() : EndIf
		If SpeechRecoGrammar <> 0 : SpeechRecoGrammar\Release() : EndIf
		Else
		*Speech_Recognition\SpRecoContext = SpRecoContext
		*Speech_Recognition\SpeechRecoGrammar = SpeechRecoGrammar
	EndIf
	
	ProcedureReturn Init_Recognition
EndProcedure


Procedure Finish_Speech_Recognition(*Speech_Recognition.Parametres)
	Protected SpRecoContext.COMateObject
	Protected SpeechRecoGrammar.COMateObject
	
	SpRecoContext = *Speech_Recognition\SpRecoContext
	SpeechRecoGrammar = *Speech_Recognition\SpeechRecoGrammar
	
	If SpeechRecoGrammar <> 0
		; La Règle de grammaire est inactive.
		#SGDSInActive = 0
		SpeechRecoGrammar\invoke("CmdSetRuleIdState(0, " + Str(#SGDSInActive) + ")")
		SpeechRecoGrammar\Release()
	EndIf
	
	If SpRecoContext <> 0
		SpRecoContext\SetEventHandler(#COMate_CatchAllEvents, 0)
		SpRecoContext\Release()
	EndIf
	
EndProcedure

Procedure Desactive_Recognition(*Speech_Recognition.Parametres, Valeur.l)
	Protected SpeechRecoGrammar.COMateObject
	SpeechRecoGrammar = *Speech_Recognition\SpeechRecoGrammar
	
	#SGDSInActive = 0
	#SGDSActive = 1
	If Valeur = 0
		SpeechRecoGrammar\invoke("CmdSetRuleIdState(0, " + Str(#SGDSActive) + ")")
		Debug COMate_GetLastErrorDescription()
		ElseIf Valeur = 1
		SpeechRecoGrammar\invoke("CmdSetRuleIdState(0, " + Str(#SGDSInActive) + ")")
		Debug COMate_GetLastErrorDescription()
	EndIf
	
EndProcedure
;}
; *****************************************************************************************************


Dernière modification par Backup le mer. 13/juin/2012 18:40, modifié 2 fois.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Speech Recognition Command (Reconnaissance vocale)

Message par nico »

Je viens de saisir l'histoire des deux formats, celle que j'ai posté est pour le SAPI 5.1, pour le 5.3, une norme à été pondu, on y parle de sémantique, il faut faire appel à d'autres interfaces pour récupérer ces valeurs avec l'interface ISpXMLRecoResult apparemment, il faudrait donc adapté le code pour le nouveau format.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Speech Recognition Command (Reconnaissance vocale)

Message par Backup »

.............
Dernière modification par Backup le mer. 13/juin/2012 18:42, modifié 1 fois.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Speech Recognition Command (Reconnaissance vocale)

Message par nico »

De toute façon, c'est clair qu'il faudrait utiliser le dernier format, mais j'ai voulu tester ce que tu dis et ça marche très bien, voici le fichier:

Code : Tout sélectionner

<GRAMMAR LANGID="40C">
 <RULE NAME="cacher" TOPLEVEL="ACTIVE">
    <L>
	<P>cacher</P> 
	<P>disparaitre</P> 
    </L>
 </RULE>
 <RULE NAME="montrer" TOPLEVEL="ACTIVE">
    <L>
	<P>montrer</P> 
	<P>afficher</P> 
    </L>
 </RULE>
 <RULE NAME="programmation" TOPLEVEL="ACTIVE">
	<P>coder </P>  
 </RULE>
 <RULE NAME="fermer" TOPLEVEL="ACTIVE">
    <L>
     <P>sortir</P> 
     <P>terminer</P>
    </L>
 </RULE>
 <RULE NAME="fruits" TOPLEVEL="ACTIVE">
    <L>
     <P>orange</P> 
     <P>pomme</P>
    </L>
 </RULE>
</GRAMMAR>
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Speech Recognition Command (Reconnaissance vocale)

Message par Backup »

ha mais oui , mais moi je partait sur la structure que tu avait mis en topic page 1 :lol:

là c'est deja plus la meme chose ;)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Speech Recognition Command (Reconnaissance vocale)

Message par Backup »

faudra faire gaffe pour les anglais
cette ligne semble poser probleme

Code : Tout sélectionner

xml:lang="fr-FR" mode="voice" tag-format="semantics-ms/1.0" 
c'est
xml:lang="en-GB" mode="voice" tag-format="semantics-ms/1.0"
je pense ;)

et
<GRAMMAR LANGID="409">
pour l'ancien format
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Speech Recognition Command (Reconnaissance vocale)

Message par nico »

Oui, c'est sûr, en plus toutes les langues ne sont pas forcément implémentées,
j'ai vu que c'était bon pour l'anglais british et us, le français et l'espagnol mais pour le reste je ne sais pas.

J'ai updaté le code, j'ai ajouté la possibilité de récupérer le niveau de reconnaissance (-1,0,1) correspondant à bas, normal et haut, il ne faut utiliser que le retour de texte en niveau normal, voir même priviligier le niveau 1.
Il faudrait faire un petit algorithme lorsqu'on met une phrase au lieu d'un mot pour déterminer un seuil acceptable.

De plus, j'affiche aussi le nom du rule; c'est plus simple pour le codage; ça permet de mettre plusieurs textes pour une même commande, donc au lieu de travailler avec le texte, on travaille avec le nom du rule.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Speech Recognition Command (Reconnaissance vocale)

Message par Backup »

nico a écrit : j'ai vu que c'était bon pour l'anglais british et us, le français et l'espagnol mais pour le reste je ne sais pas.
j'ai lu que ce n'etait tout simplement pas pris en charge !
J'ai updaté le code, j'ai ajouté la possibilité de récupérer le niveau de reconnaissance (-1,0,1) correspondant à bas, normal et haut, il ne faut utiliser que le retour de texte en niveau normal, voir même priviligier le niveau 1.
ha ! ça c'est enorme ! :)
ça permet carrement de na pas tenir compte lorsqu'on est pas sur !
Il faudrait faire un petit algorithme lorsqu'on met une phrase au lieu d'un mot pour déterminer un seuil acceptable.
facile si <1 say (avec la voix de thierry Bourdon dans inconnu ) " Vous pouvez répéter la question ?" :lol:
De plus, j'affiche aussi le nom du rule; c'est plus simple pour le codage; ça permet de mettre plusieurs textes pour une même commande, donc au lieu de travailler avec le texte, on travaille avec le nom du rule.
ce qui permettrai de faire réagir le programme sur "Fruit"
alors que l'orateur dit "pomme" ou "orange" ... c'est bien ça ?

si oui, ça ouvre carrément les choix :)

sacres boulot ! 8O

et encore Désolé , pour le forum anglais ..
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Speech Recognition Command (Reconnaissance vocale)

Message par nico »

Code : Tout sélectionner

facile si <1 say (avec la voix de thierry Bourdon dans inconnu ) " Vous pouvez répéter la question ?"
oui mais le truc, c'est qu'on a un niveau pour chaque mot, donc si au lieu de mettre un mot comme "ouvrir", on met "ouvrir fichier préférence", on pourrait admettre que l'addition 2/3 au total est correct si seulement aucun niveau est égale à -1.
Répondre