reconnaissance vocale SAPI delphi
-
27-09-2019 - |
Question
I besoin de créer un équivalent de programmation en utilisant le langage delphi ... ou quelqu'un pourrait poster un lien sur la façon de faire dans peech recogniton grammaires utilisant le delphi. Ou des exemples de grammaire XML qui a équivalent programmatique en Delphi. désolé pour mon anglais.
**Programmatic Equivalent **
Ref: http: // msdn. microsoft.com/en-us/library/ms723634(v=VS.85).aspx
SPSTATEHANDLE hsHelloWorld;
hr = cpRecoGrammar->GetRule(L"HelloWorld", NULL,
SPRAF_TopLevel | SPRAF_Active, TRUE,
&hsHelloWorld);
hr = cpRecoGrammar->AddWordTransition(hsHelloWorld, NULL,
L"hello world", L" ",
SPWT_LEXICAL, NULL, NULL);
hr = cpRecoGrammar->AddWordTransition(hsHelloWorld, NULL,
L"hiya|there", L"|",
SPWT_LEXICAL, NULL, NULL);
hr = cpRecoGrammar->Commit(NULL);
XML grammaire exemples (s):
<GRAMMAR>
<!-- Create a simple "hello world" rule -->
<RULE NAME="HelloWorld" TOPLEVEL="ACTIVE">
<P>hello world</P>
</RULE>
<RULE NAME="HelloWorld_Disp" TOPLEVEL="ACTIVE">
<P DISP="Hiya there!">hello world</P>
</RULE>
<RULE NAME="Question_Pron" TOPLEVEL="ACTIVE">
<P DISP="I don't understand" PRON="eh">what</P>
</RULE>
<RULE NAME="NurseryRhyme" TOPLEVEL="ACTIVE">
<P>hey</P>
<P MIN="2" MAX="2">diddle</P>
</RULE>
<RULE NAME="UseWeights" TOPLEVEL="ACTIVE">
<LIST>
<P WEIGHT=".95">recognize speech</P>
<P WEIGHT=".05">wreck a nice beach</P>
</LIST>
</RULE>
<RULE NAME="UseProps" TOPLEVEL="ACTIVE">
<P PROPNAME="NOVALUE">one</P>
<P PROPNAME="NUMBER" VAL="2">two</P>
<P PROPNAME="STRING" VALSTR="three">three</P>
</RULE>
</GRAMMAR>
La solution 2
Je Guy enfin en mesure d'obtenir la réponse ....
Cela pourrait être utile aux autres ... :)
c'est la composante réelle que j'ai créé. il suffit de modifier pour vos besoins.
Function TSRRule.AddWord (Word : String; Value : string = ''; Separator : char = '|') : integer;
var
OleValue : OleVariant;
begin
result := 0;
if Fwordlist.IndexOf(Word) = -1 then
begin
OleValue := Value;
Fwordlist.Add(Word);
FRule.InitialState.AddWordTransition(nil, word, Separator, SPWT_LEXICAL, FRuleName+'_value',Fwordlist.Count, OleValue, 1.0);
FWordCount := Fwordlist.Count;
result := FWordCount;
end;
end;
Fonction d'appel ...
FSpRunTimeGrammar := SpInProcRecoContext.CreateGrammar(2); // we assign another grammr on index 2
SrRule1 := TSRRule.Create(1,'Rule1',FSpRunTimeGrammar);
with SrRule1 do
begin
AddWord('Maxtor');
AddWord('Open NotePad','Notepad.exe');
AddWord('Maxtor Dexter TrandPack','',' ');
commit;
end;
SrRule2 := TSRRule.Create(2,'Rule2',FSpRunTimeGrammar);
with SrRule1 do
begin
AddWord('the box');
AddWord('WeLcOmE SaPi');
AddWord('Halo World');
commit;
end;
FSpRunTimeGrammar.CmdSetRuleState('Rule1',SGDSActive);
FSpRunTimeGrammar.CmdSetRuleState('Rule2',SGDSActive);
Laisser un commentaire S'il vous plaît des éclaircissements .... bonne chance!
Autres conseils
Il y a une enveloppe directe pour la api vocale fait par l'équipe de jedi, vous devriez être en mesure de trouver le code d'ici http://www.delphi-jedi.org/apilibrary.html mais je viens de vérifier et le lien vers le fichier sapi.zip semble être cassé, peut-être un e-mail à l'équipe de jedi cède la parole pour vous.
Si vous obtenez la main sur l'emballage, et étant donné que c'est une pellicule directe de l'API, alors les MDSN docs sont ce que vous voulez, remplacer simplement la syntaxe Delphi pour 99% C ++ syntaxe sera simple, ce qui est pas , juste poser la question spécifique ici (ou sur les newsgroups Embarcadero)