2016-06-04 1 views
0

저는 매우 새롭게 다녀 왔습니다.
는 내가하고 싶은 것은 : 그것은 인정포켓 스핑크스에 새 키워드를 정의하십시오.

  • 은 사용자가 엔진
  • 을 텍스트로 음성에서 KEYWORD를 정의하기, 내 응용 프로그램은 내가 PocketSphinix를 읽고 수없는 무언가를

을한다 내 찾기, 도 어렵다는 것을 알았 기 때문에 나는 그것을 바꾸고 기본 것을 사용하는 것을 선호한다.

내 문제는 다음과 같습니다. 어떻게 * .gram 파일에 새 키워드 "my phone"을 정의 할 수 있습니까?

이 내 코드입니다 - 나는 그것을 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); 
} 
} 

어떻게 처음을 할 수 있습니까?
도와주세요!

답변

3

사용

recognizer.addGrammarSearch(DIGITS_SEARCH, digitsGrammar); 

대신

recognizer.addKeywordSearch(DIGITS_SEARCH, digitsGrammar); 

또한 파일 이름에 따라 assests.lst을 수정합니다.

+0

두 줄은 실제로 비슷하게 보입니다. 나는 차이점이 두 번있는 것을보아야 만했다 : 메소드의 이름에서 .addGrammarSearch'와'.addKeywordSearch'. 나는 당신이 당신의 대답에 그것에 대해 정교 할 수 있었다고 생각합니다. 그건 그렇고 환영합니다! ;) –

관련 문제