De voz SAPI delphi reconocimiento
-
27-09-2019 - |
Pregunta
I tiene por qué crear un equivalente de programación utilizando un lenguaje Delphi ... o alguien podría enviar un enlace sobre cómo hacerlo en las gramáticas Recogniton Peech utilizando el Delphi. O algún ejemplo de la gramática XML que tiene el equivalente de programación en Delphi. lo siento por mi Inglés.
**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 Gramática de ejemplo (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>
Solución 2
de Guy finalmente capaz de obtener la respuesta ....
Esto podría ser útil a los demás ... :)
Este es el componente real que he creado. simplemente modificarlo para sus necesidades.
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;
Función Llamando ...
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);
Dejar comentario para aclaraciones .... buena suerte!
Otros consejos
Hay un envoltorio directa para la API de voz realizado por el equipo del jedi, usted debería ser capaz de encontrar el código de aquí http://www.delphi-jedi.org/apilibrary.html sin embargo acabo de comprobar y el enlace al archivo sapi.zip parece estar roto, tal vez un correo electrónico al equipo de Jedi a su vez, para arriba para usted.
Si lo hace controlar la envoltura, y dado que esto es envoltura directa de la API, a continuación, los documentos MDSN son los deseados, simplemente sustituir la sintaxis de Delphi para sintaxis de C ++ 99% será sencillo, lo que no es , acaba de hacer la pregunta específica de aquí (o en los grupos de noticias de Embarcadero)