Можно ли загружать тему диктовки только при использовании Shared Recogniser, но не с помощью Inproc reconizer в sapi?

Когда я использую общий распознаватель для ранее зарегистрированной темы медицинского диктовки, грамматика диктовки загружается без ошибок, но когда я меняю свой распознаватель на распознаватель Inproc, он не может загрузить тему диктовки. Есть ли способ загрузить тему диктовки, продолжая использовать ее в распознавателе процессов?

Мой код для загрузки грамматики выглядит так:

      CComPtr<ISpObjectToken>      cpObjectToken;
      CComPtr<ISpAudio>            cpAudio;
      CComPtr<ISpRecognizer> cpEngine;
      CComPtr<ISpRecoContext> cpRecoCtx;
      CComPtr<ISpRecoGrammar> cpGram;
      hr = cpEngine.CoCreateInstance(CLSID_SpInprocRecognizer);
      hr = SpGetDefaultTokenFromCategoryId(SPCAT_AUDIOIN, &cpObjectToken);
      hr = cpEngine->SetInput(cpObjectToken, TRUE);
      hr = SpCreateDefaultObjectFromCategoryId(SPCAT_AUDIOIN, &cpAudio);
      hr = cpEngine->SetInput(cpAudio, TRUE);
      hr = cpEngine->CreateRecoContext(&cpRecoCtx);
      hr = cpEngine->SetRecognizer(NULL);
      hr = cpRecoCtx->CreateGrammar(1, &cpGram);
      hr = cpGram->LoadDictation(L"Medical", SPLO_STATIC);

person phoenix11    schedule 25.06.2014    source источник
comment
Вы должны иметь возможность использовать тему из движка внутрипроцесса. Вы можете показать свой код?   -  person Eric Brown    schedule 25.06.2014
comment
Распознаватели Inproc - это оболочки. Вам необходимо указать механизм распознавания и источник ввода. Скорее всего, вы на самом деле не привязываете механизм распознавания перед загрузкой темы диктовки, что приведет к ошибке.   -  person Eric Brown    schedule 25.06.2014
comment
Я добавил свой код.   -  person phoenix11    schedule 26.06.2014


Ответы (1)


Распознаватели Inproc не имеют механизма SR по умолчанию, поэтому вызов

hr = cpEngine->SetRecognizer(NULL);

фактически не нагружает двигатель. Я написал простую функцию для загрузки распознавателя по умолчанию; код длинный, поэтому я не буду вставлять его в строку, но вы можете найти его здесь.

Кроме того, в вашем другой вопрос, у вас была тема под названием «Медицина», а здесь она называется «Медицина»; они действительно должны быть такими же.

person Eric Brown    schedule 26.06.2014