Mon problème est le suivant: Mon programme de reconnaissance SAPI inproc refuse de charger mon fichier de grammaire lorsque la langue d'affichage de Windows 10 est définie sur Anglais (UK).Problème de sous-langage Microsoft SAPI
Système Langue d'affichage définie sur UK. La langue de reconnaissance vocale est le Royaume-Uni. System Locale est le Royaume-Uni. SAPI xml-format Grammar spécifie même LANGID = 809 - autant que je sache, EVERYTHING est défini sur EN-GB, et pourtant la grammaire ne chargera toujours pas.
Mais il se charge et fonctionne très bien lorsque la langue d'affichage est définie sur Anglais (US).
Est-ce que quelqu'un sait quoi de neuf? C'est extrêmement frustrant ... J'espère que je manque quelque chose de simple.
SAPI Code Initialisation:
//////////////INITIALIZE SAPI ENGINE AND GRAMMAR//////////////////////////////
HRESULT SpeechObject::Initialize(){
//INITIALIZE SR ENGINE
if (FAILED(test=::CoInitialize(NULL)))
SRError(L"COM Initialization Fail");
//Create recognizer instance
if (FAILED(test=cpEngine.CoCreateInstance(CLSID_SpInprocRecognizer))){
SRError(L"Can't Load Reco Engine");
return test;
}
//Load the audio Input (in seperate function to facilitate reload)
LoadAudio(); //should I check this?
//load Default recognizer settings
cpEngine->SetRecognizer(NULL);
//get and load default reco profile
if (FAILED(SpGetDefaultTokenFromCategoryId(SPCAT_RECOPROFILES, &cpObjectToken)))
SRError(L"Can't Find Recognition Profile");
if (FAILED(cpEngine->SetRecoProfile(cpObjectToken)))
SRError(L"Can't Load Recognition Profile");
//create reco context
if (FAILED(test=cpEngine->CreateRecoContext(&cpContext))){
SRError(L"Can't Create Reco Context");
return test;
}
//send pSpeechObject to global callback function
cpContext->SetNotifyCallbackFunction(
(SPNOTIFYCALLBACK*)SpeechCallBack,
NULL, (LPARAM)this);
if(FAILED(cpContext->CreateGrammar(NULL, &cpGrammar)))
SRError(L"Can't Create context");
char str[80]; ////TEST
sprintf(str, "LANGID: %X", GetUserDefaultUILanguage());
MessageBoxA(GetActiveWindow(), str,0,0);
//load grammar from compiled grammar resource
if (FAILED(test = cpGrammar->LoadCmdFromResource(
hModule, MAKEINTRESOURCE(GRAMMARCFG),
L"FILE", GetUserDefaultUILanguage(), SPLO_STATIC))){
SRError(L"Can't Load Grammar. Please check language settings");
return test;
}
//(comment above and uncomment following to load from raw xml file for testing)
//cpGrammar->LoadCmdFromFile(L"Grammar.xml", SPLO_STATIC);
//Enable Engine and Reco Context
cpEngine->SetRecoState(SPRST_ACTIVE);
cpContext->SetContextState(SPCS_ENABLED);
//enable ALWAYS ACTIVE and GROUND ENGINES ON commands
return(cpGrammar->SetRuleState(NULL, NULL, SPRS_ACTIVE));
}
////////////LOAD (AND RELOAD) AUDIO INPUT//////////////////////
HRESULT SpeechObject::LoadAudio(bool dlgFlag){
if (FAILED(test = SpCreateDefaultObjectFromCategoryId(SPCAT_AUDIOIN, &cpAudioIn))){
SRError(L"Can't Find Default Audio Input");
return test;
}
if (FAILED(test = cpEngine->SetInput(cpAudioIn, TRUE))){
if (!dlgFlag)
SRError(L"Can't Set Audio Input");
return test;
}
if (pSRDisplay)
pSRDisplay->DisplayText("Audio Reloaded");
if (pDLog)
pDLog->LogEvent("Audio Reloaded");
//RecoState must be reenabled after audio reset
cpEngine->SetRecoState(SPRST_ACTIVE);
if (pDLog)
pDLog->LogEvent("SR ENABLED");
return test;
}
je reçois le « ne peut pas charger la grammaire S'il vous plaît vérifier les paramètres de langue. » Erreur chaque fois que la langue d'affichage est pas l'anglais (États-Unis), même si je confirme que tous les paramètres match de ...
apprécierions vraiment toute sorte de perspicacité des personnes plus informés que moi
Farley
Malheureusement, cela ne semble pas fonctionner. En effet, je serais très surpris si c'était le cas, étant donné que le réglage dans le panneau de commande de la parole correspondait déjà à la langue d'affichage. Tous les paramètres correspondent. J'apprécie vraiment votre aide, et j'ai hâte d'entendre d'autres idées! – lequinne
fonctionne avec la langue d'affichage 409 (US), mais pas avec 809 (UK). Ni SpFindBestToken() ni SetRecognizer() échouent. En d'autres termes, j'ai toujours exactement le même problème. – lequinne
Avez-vous, en fait, un moteur de reconnaissance installé pour en-UK? Ma machine Win10, par exemple, ne le fait pas. –