You can use Pocketsphinx to accomplish this task. Check Pocketsphinx android demo for example how to listen for keyword efficiently in offline and react on the specific commands like a key phrase "oh mighty computer". The code to do that is simple:
you create a recognizer and just add keyword spotting search:
recognizer = SpeechRecognizerSetup.defaultSetup()
.setAcousticModel(new File(modelsDir, "hmm/en-us-semi"))
.setDictionary(new File(modelsDir, "lm/cmu07a.dic"))
.setKeywordThreshold(1e-40f)
.getRecognizer();
recognizer.addListener(this);
recognizer.addKeyphraseSearch("keywordSearch", "oh mighty computer");
recognizer.startListening("keywordSearch);
and define a listener:
@Override
public void onPartialResult(Hypothesis hypothesis) {
if (hypothesis == null)
return;
String text = hypothesis.getHypstr();
if (text.equals(KEYPHRASE)) {
// do something and restart listening
recognizer.cancel();
doSomething();
recognizer.startListening("keywordSearch");
}
}
You can adjust keyword threshold for the best detection/false alarm match. For the ideal detection accuracy keyword should have at least 3 syllables, better 4 syllables.