Erkennen von mehreren Keywords mit PocketSphinx

Ich habe die PocketSphinx Demo installiert und es funktioniert gut unter Ubuntu und Eclipse, aber trotz des Versuches kann ich nicht herausfinden, wie ich die Anerkennung von mehreren Wörtern hinzufügen würde.

Alles was ich will ist für den Code, um einzelne Wörter zu erkennen, die ich dann switch() innerhalb des Codes switch() kann, zB "up", "down", "left", "right". Ich will keine Sätze erkennen, nur einzelne Worte.

Jede Hilfe dazu wäre Ihnen dankbar. Ich habe andere Benutzer mit ähnlichen Problemen entdeckt, aber niemand kennt die Antwort so weit.


Eine Sache, die mich verwirrt ist, warum müssen wir die "Wakeup" konstant überhaupt nutzen?

 private static final String KWS_SEARCH = "wakeup"; private static final String KEYPHRASE = "oh mighty computer"; . . . recognizer.addKeyphraseSearch(KWS_SEARCH, KEYPHRASE); 

Was hat wakeup mit irgendetwas zu tun?


Ich habe einige Fortschritte gemacht (?): Mit addGrammarSearch ich eine .gram Datei verwenden, um meine Worte .gram , zB up,down,left,right,forwards,backwards , was scheint gut zu funktionieren, wenn alles, was ich sage, sind diese besonders Wörter. Jedoch werden alle anderen Worte dazu führen, dass das System mit dem, was zu dem "nächsten" Wort von den angegebenen angegeben wird, übereinstimmt. Idealerweise möchte ich keine Anerkennung finden, wenn die Worte nicht in der .gram Datei sind …

  • Beispiel für AlwaysOnHotwordDetector in Android
  • Android-Spracherkennung App ohne Pop Up
  • Android App integriert mit OK Google
  • Android Wear Custom Voice Actions
  • Pocket Sphinx auf Android
  • Wie verwende ich Sprachsuche und VoiceRecognition auf Android?
  • Android SpeechRecognizer erkennt seinen eigenen Signalton als Sprache und Exits
  • Verwenden Sie Offline-Voice-to-Text in Android 4.1 (Jelly Bean) aus meiner Anwendung?
  • 2 Solutions collect form web for “Erkennen von mehreren Keywords mit PocketSphinx”

    Sie können addKeywordSearch verwenden, die Dateien mit Schlüsselpunkten verwendet. Eine Phrase pro Zeile mit Schwelle für jede Phrase in //, zum Beispiel

     up /1.0/ down /1.0/ left /1.0/ right /1.0/ forwards /1e-1/ 

    Der Schwellenwert muss ausgewählt werden, um Fehlalarme zu vermeiden.

    Danke an Nikolays Tip (siehe oben), habe ich den folgenden Code entwickelt, der gut funktioniert und keine Worte erkennt, wenn sie nicht auf der Liste sind. Sie können diese direkt über die Hauptklasse im PocketSphinxDemo-Code kopieren und einfügen:

     public class PocketSphinxActivity extends Activity implements RecognitionListener { private static final String DIGITS_SEARCH = "digits"; private SpeechRecognizer recognizer; @Override public void onCreate(Bundle state) { super.onCreate(state); setContentView(R.layout.main); ((TextView) findViewById(R.id.caption_text)).setText("Preparing the recognizer"); try { Assets assets = new Assets(PocketSphinxActivity.this); File assetDir = assets.syncAssets(); setupRecognizer(assetDir); } catch (IOException e) { // oops } ((TextView) findViewById(R.id.caption_text)).setText("Say up, down, left, right, forwards, backwards"); reset(); } @Override public void onPartialResult(Hypothesis hypothesis) { } @Override public void onResult(Hypothesis hypothesis) { ((TextView) findViewById(R.id.result_text)).setText(""); if (hypothesis != null) { String text = hypothesis.getHypstr(); makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show(); } } @Override public void onBeginningOfSpeech() { } @Override public void onEndOfSpeech() { reset(); } private void setupRecognizer(File assetsDir) { File modelsDir = new File(assetsDir, "models"); recognizer = defaultSetup().setAcousticModel(new File(modelsDir, "hmm/en-us-semi")) .setDictionary(new File(modelsDir, "dict/cmu07a.dic")) .setRawLogDir(assetsDir).setKeywordThreshold(1e-20f) .getRecognizer(); recognizer.addListener(this); File digitsGrammar = new File(modelsDir, "grammar/digits.gram"); recognizer.addKeywordSearch(DIGITS_SEARCH, digitsGrammar); } private void reset() { recognizer.stop(); recognizer.startListening(DIGITS_SEARCH); } } 

    Ihre digits.gram Datei sollte so etwas wie:

     up /1e-1/ down /1e-1/ left /1e-1/ right /1e-1/ forwards /1e-1/ backwards /1e-1/ 

    Sie sollten mit den Schwellen in den Doppelschrägstrichen // für die Leistung experimentieren, wobei 1e-1 0,1 (glaube ich) darstellt. Ich denke, das Maximum ist 1.0 .

    Und es ist 17.30 Uhr so ​​kann ich jetzt aufhören zu arbeiten. Ergebnis.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.