2013-05-16 2 views
6

"google now"의 멋진 음성 활성화 기능을 자신의 응용 프로그램에서 사용할 수 있습니까?android에서 키워드 활성화 된 음성 인식

그래서 내가 원하는 것은 사용자가 버튼이나 sth를 눌러 활성화를 트리거 할 필요가 없다는 것입니다. 그런 식으로.

저는 자동 음성 인식을 키워드로 활성화하고 싶습니다. 예 : 'google now'가 열리면 "google"이라고 말하면됩니다. 이 명령 다음에 시스템은 실제 입력을 인식합니다.

android API를 사용하면 가능합니까? 아니면이 동작을 제공하는 오픈 소스 라이브러리가 있습니까?

나는 이것이 "열린 귀"로 가능하지만 안타깝게도 열린 귀는 안드로이드에는 사용할 수 없다는 것을 알고 있습니다.

+0

http://stackoverflow.com/questions/10182893/can-i-keep을 청취를 시작합니다) 3 그것을 이름을 지정할 수 있습니다 - the-speech-recognizer-listening-indefinitely –

+0

http://stackoverflow.com/questions/14940657/android-speech-recognitio n-as-a-service-on-android-4-1-4-2/​​14950616 # 14950616 –

답변

1

나는 CMU 스핑크스를 사용하는 것이 좋습니다, 아니면 그냥 모든 "onResults"와 "의 OnError"함수 호출에 인식기를 다시 시작합니다.

오프라인 모드에서 작동
0

사용 CMUSphinx 라이브러리, 버튼의 필요를 발동 할 당신은 그것을 이름을 지정할 수 있습니다 아래는 전체 소스 코드

1을 찾을 수 있습니다 링크에서 이름을 사용하여 당신은 인식 모듈을 트리거 할 수 있습니다) 그것은 오프라인 모드에서 작동 2) 당신은 당신이 그의 이름을 부를 때 그것은

private static final String KEYPHRASE = "ok computer"; 
    private static final int PERMISSIONS_REQUEST_RECORD_AUDIO = 1; 
    private SpeechRecognizer recognizer; 
     public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    captions = new HashMap<String, Integer>(); 
    captions.put(KWS_SEARCH, R.string.kws_caption); 
    captions.put(MENU_SEARCH, R.string.menu_caption); 
    setContentView(R.layout.activity_maini); 
    } 
    private void runRecognizerSetup() { 
    // Recognizer initialization is a time-consuming and it involves IO, 
    // so we execute it in async task 
    new AsyncTask<Void, Void, Exception>() { 
     @Override 
     protected Exception doInBackground(Void... params) { 
      try { 
       Assets assets = new Assets(MainActivity.this); 
       File assetDir = assets.syncAssets(); 
       setupRecognizer(assetDir); 
      } catch (IOException e) { 
       return e; 
      } 
      return null; 
     } 
     @Override 
     protected void onPostExecute(Exception result) { 
      if (result != null) { 
       ((TextView) findViewById(R.id.caption_text)) 
         .setText("Failed to init recognizer " + result); 
      } else { 
       switchSearch(KWS_SEARCH); 
      } 
     } 
    }.execute(); 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, 
             String[] permissions, int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 

    if (requestCode == PERMISSIONS_REQUEST_RECORD_AUDIO) { 
     if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      runRecognizerSetup(); 
     } else { 
      finish(); 
     } 
    } 
} 
    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(); 
    }}