2016-06-04 2 views
0

Je suis très nouveau à ce sujet.
Ce que je veux faire est:Définir un nouveau mot-clé dans le sphinx de poche

  • Obtenez un utilisateur défini KEYWORD du moteur parole au texte
  • comme il reconnu, mon application fait quelque chose

Je lis PocketSphinix et ne peut pas trouver le mien, aussi je trouve que c'est difficile, donc je préfère le changer et utiliser celui par défaut.

Maintenant, mon problème est: comment puis-je définir un nouveau mot-clé "mon téléphone" dans le fichier * .gram?

Ceci est mon code - je l'ai pris here:

import android.app.Activity; 
import android.os.Bundle; 
import android.speech.RecognitionListener; 
import android.speech.SpeechRecognizer; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.io.File; 
import java.io.IOException; 

import edu.cmu.pocketsphinx.Assets; 
import edu.cmu.pocketsphinx.Hypothesis; 
import edu.cmu.pocketsphinx.SpeechRecognizerSetup; 

/** 
* Created by Mina Joon jooni on 6/4/2016. 
*/ 
public class PracticeActivity extends Activity implements RecognitionListener, edu.cmu.pocketsphinx.RecognitionListener { 

private static final String DIGITS_SEARCH = "digits"; 
    private edu.cmu.pocketsphinx.SpeechRecognizer recognizer; 

    @Override 
public void onCreate(Bundle state) 
{ 
    super.onCreate(state); 

    setContentView(R.layout.practice); 

    ((TextView) findViewById(R.id.caption_text)).setText("Preparing the recognizer"); 

    try 
    { 
     Assets assets = new Assets(PracticeActivity.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) 
{//DO STH 
} 

@Override 
public void onResult(Hypothesis hypothesis) 
{ 
    ((TextView) findViewById(R.id.result_text)).setText(""); 

    if (hypothesis != null) 
    { 
     String text = hypothesis.getHypstr(); 
     Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show(); 
    } 
} 

@Override 
public void onError(Exception e) { 

} 

@Override 
public void onTimeout() { 

} 

@Override 
public void onReadyForSpeech(Bundle params) { 

} 

@Override 
public void onBeginningOfSpeech() 
{ 
} 

@Override 
public void onRmsChanged(float rmsdB) { 

} 

@Override 
public void onBufferReceived(byte[] buffer) { 

} 

@Override 
public void onEndOfSpeech() 
{ 
    reset(); 
} 

@Override 
public void onError(int error) { 

} 

@Override 
public void onResults(Bundle results) { 

} 

@Override 
public void onPartialResults(Bundle partialResults) { 

} 

@Override 
public void onEvent(int eventType, Bundle params) { 

} 

private void setupRecognizer(File assetsDir) throws IOException { 
    File modelsDir = new File(assetsDir, "models"); 

    recognizer = SpeechRecognizerSetup.defaultSetup() 
      .setAcousticModel(new File(modelsDir, "en-us-ptm")) 
      .setDictionary(new File(modelsDir, "cmudict-en-us.dict")) 
      .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); 
} 
} 

Comment puis-je faire le premier?
S'il vous plaît aidez-moi!

Répondre

3

Utilisez

recognizer.addGrammarSearch(DIGITS_SEARCH, digitsGrammar); 

Au lieu de

recognizer.addKeywordSearch(DIGITS_SEARCH, digitsGrammar); 

également modifier les paramètres assests.lst selon le nom du fichier.

+0

Ces deux lignes ressemblaient vraiment à la même chose. J'ai dû regarder deux fois où la différence est: dans le nom des méthodes '.addGrammarSearch' vs' .addKeywordSearch'. Je pense que vous auriez pu développer cela dans votre réponse. Bienvenue à SO en passant! ;) –