Я скачал демо pocketsphinx-android-demo с Github и сделал некоторые модификации для своих собственных целей.
Я создал новый my-en-us.dict
(словарь) файл для слов моего приложения и добавил следующие слова
hey HH EY
smarty S M AA R T IY
login L AA G IH N
Затем я создал файл login.gram
(Grammer) с кодом ниже
#JSGF V1.0;
grammar login;
public <item> = login;
Затем я выполнил инициализацию распознавателя в своей активности следующим образом
public static final String KWS_SEARCH = "wakeup";
public static final String LOGIN_SEARCH = "login";
/* Keyword we are looking for to activate menu */
public static final String KEYPHRASE = "hey smarty";
private void setupRecognizer(File assetsDir) throws IOException {
recognizer = SpeechRecognizerSetup.defaultSetup()
.setAcousticModel(new File(assetsDir, "en-us-ptm"))
.setDictionary(new File(assetsDir, "my-en-us.dict"))
.getRecognizer();
recognizer.addListener(this);
recognizer.addKeyphraseSearch(KWS_SEARCH, KEYPHRASE);
File loginGrammar = new File(assetsDir, "login.gram");
recognizer.addGrammarSearch(LOGIN_SEARCH, loginGrammar);
}
Остальная часть кода такая же, как у pocketsphinx-android-demo для запуска распознавателя, прослушивания слов и т. Д.
После запуска приложения для Android я сказал «эй, умник», чтобы активировать распознавание слова «логин». Когда я говорю «логин», он возвращает «логин», но когда я говорю любое другое слово, такое как «привет», «настройки» и т. Д., Он возвращает только «логин».
Я не знаю, почему это происходит. Я делаю что-то не так, если да, то как правильно добавить только определенные слова для точного распознавания?
Другой вопрос: как проверить процент точности «частичного результата» или «результата»?