2013-05-16 10 views
6

Czy można korzystać z tej fajnej funkcji aktywacji głosowej "google teraz" we własnej aplikacji?Słowo kluczowe aktywowane rozpoznawanie mowy na Androidzie

Chcemy tylko, aby użytkownik nie musiał aktywować aktywacji przez naciśnięcie przycisku lub czegoś. tak.

Chciałbym mieć automatyczne rozpoznawanie mowy aktywowane przez słowo kluczowe. Na przykład: Po otwarciu "google now" wystarczy powiedzieć: "google". Po tym poleceniu system nasłuchuje rzeczywistego wejścia.

Czy jest to możliwe przy użyciu interfejsu API Androida? Czy istnieje biblioteka Open Source, która zapewnia takie zachowanie?

Wiem, że jest to możliwe dzięki "otwartym uszom", ale niestety otwarte uszy nie są dostępne dla Androida.

+0

http://stackoverflow.com/questions/10182893/can-i-keep -także rozpoznawanie mowy-słuchanie-w nieskończoność –

+0

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

Odpowiedz

1

Proponuję za pomocą CMU Sphinx, albo po prostu ponowne uruchomienie rozpoznawania na każdy „onResults” i „onError” wywołania funkcji.

0

Zastosowanie CMUSphinx biblioteka, w której będzie pracować w trybie offline, bez konieczności przycisków, aby ją wywołać można nazwać go i za pomocą nazwy można wywołać moduł rozpoznawania W linku poniżej można znaleźć pełny kod źródłowy

1) To będzie pracować w trybie offline 2) można wymienić go 3) rozpocznie Słuchacze gdy nadasz imię

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