2013-05-16 2 views
6

Возможно ли использовать эту классную функцию активации голоса «google now» в вашем собственном приложении?Ключевое слово активированное распознавание речи на android

Так что я хочу, чтобы пользователь не запускал активацию нажатием кнопки или кнопки. как это.

Я хотел бы иметь автоматическое распознавание речи, активируемое ключевым словом. Например: Когда открывается «google now», вы должны только сказать: «google». После этой команды система прослушивает фактический ввод.

Возможно ли это с помощью API android? Или есть ли библиотека с открытым исходным кодом, которая обеспечивает такое поведение?

Я знаю, что это возможно с помощью «открытых ушей», но, к сожалению, открытые уши недоступны для Android.

+0

http://stackoverflow.com/questions/10182893/can-i-keep -ответчик-распознаватель-прослушивание-неопределенно –

+0

http://stackoverflow.com/questions/14940657/android-speech-recognitio п-а-а-сервис на андроид-4-1-4-2/​​14950616 # 14950616 –

ответ

1

Вы должны запустить распознавание речи как услугу, а не как действие.

Заканчивать этот мерзавец для образца кода о том, как это сделать: https://github.com/gast-lib/gast-lib

1

Я предложил бы использовать CMU Sphinx, или просто перезагрузить распознаватель на каждый «onResults» и вызов функции «OnError».

0

Использование CMUSphinx библиотека, где он будет работать в автономном режиме, без необходимости кнопок, чтобы вызвать его можно назвать его и с помощью имени вы можете запустить модуль распознавания В ссылке ниже вы можете найти полный исходный код

1) Она будет работать в автономном режиме 2) вы можете назвать его 3) Он начнет слушает, когда вы называете его имя

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