2013-05-16 9 views
6

「google now」のこのクールな音声アクティベーション機能を自分のアプリケーションで使用することはできますか?アンドロイドでキーワードを有効にした音声認識

私が望むのは、ユーザーがボタンまたはsthを押して起動をトリガーする必要がないということです。そうですね。

私はむしろキーワードで自動音声認識を有効にしたいと思っています。 例:「google now」が開かれているときは、「google」と言うだけです。そのコマンドの後、システムは実際の入力を待ち受けています。

これはAndroid APIを使用して可能ですか?または、この動作を提供するオープンソースライブラリがありますか?

私はこれが「開かれた耳」で可能であることを知っていますが、残念ながら開かれた耳はアンドロイドにはありません。

+0

http://stackoverflow.com/questions/10182893/can-i-keepリッスンを開始します) 3をそれを名前を付けることができます - 音声認識装置 - リスニング - 無期限 –

+0

http://stackoverflow.com/questions/14940657/android-speech-recognitioサービスとしてのn-as-a-android-4-1-4-2/14950616#14950616 –

答えて

1

音声認識をアクティビティではなくサービスとして実行する必要があります。

はこれを行う方法上のサンプルコードは、このgitのチェックアウト: ​​

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(); 
    }}