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.

  • Wie benutzt man ADB, um Berührungsereignisse mit dem Sendevent-Befehl an das Gerät zu senden?
  • AlertDialog setCustomTitle Styling entspricht dem Standard AlertDialog Titel
  • Wie zu hemmen "Laute Musik kann dein Gehör schaden ..." Warnung in Android
  • Wann man handler.post () & wann zum neuen Thread ()
  • Fortsetzen der Aktivität in Android
  • Kann das GooglePlayServicesClient nicht auf dem neuen Android Studio-Projekt auflösen
  • 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 …

  • App-Implementierung Parse Unity Plugin stürzt auf Android-Gerät, sondern funktioniert gut im Editor
  • OnItemClickListener funktionierte nicht mit dem Kontrollkästchen?
  • Android Microsoft Office Library (.doc, .docx, .xls, .ppt, etc.)
  • Android Autocomplete TextView Dropdown-Breite
  • Wie kann ich wissen, wann eine Aktivität einen Layout-Pass beendet hat?
  • Übertragen von Android-Apps mit Abonnement auf ein anderes Konto
  • 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.