2016-07-04 4 views
1

Ich versuche, Continues Speech Recognition in meiner Android-Anwendung zu implementieren. Ich habe diese Link Codierung gefolgt. Dies funktioniert weiter vor zwei Tagen. Aber jetzt, wenn die Spracherkennung nicht gut funktioniert, wird es mehr Zeit für das Sprachhören brauchen. wie man dieses Problem löst. Bitte führen Sie mich. DankWie füge ich die kontinuierliche Spracherkennung in meine Android-Anwendung ein?

Recognition Codierung:

// starts the service 
    protected void startListening() { 
     try { 
      initSpeech(); 
      Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
      //intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH); 
      intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US"); 
      if (!intent.hasExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE)) 
      { 
       intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, 
         "com.dummy"); 
      } 
      sr.startListening(intent); 
     } catch(Exception ex) { 
      Log.d("SpeechRecognitionService", "Bei der Initialisierung des SpeechRecognizers ist ein Fehler aufgetreten"); 
     } 
    } 

    // stops the service 
    protected void stopListening() { 
     if (sr != null) { 
      sr.stopListening(); 
      sr.cancel(); 
      sr.destroy(); 
     } 
     sr = null; 
    } 

    protected void initSpeech() { 
     if (sr == null) { 
      sr = SpeechRecognizer.createSpeechRecognizer(this); 
      if (!SpeechRecognizer.isRecognitionAvailable(context)) { 
       Toast.makeText(context, "Speech Recognition is not available", 
         Toast.LENGTH_LONG).show(); 
       finish(); 
      } 
      sr.setRecognitionListener(VoiceRecognitionListener.getInstance()); 
     } 
    } 

Benutzer beginnt zu sprechen

public void onBeginningOfSpeech() { 
      System.out.println("Starting to listen"); 
     } 

     public void onBufferReceived(byte[] buffer) { } 

     // User finished speaking 
     public void onEndOfSpeech() { 
      System.out.println("Waiting for result..."); 
     } 
+0

Wird ein Fehler angezeigt? In welchem ​​Fall, welcher Fehler? – Zoe

+0

kein Fehler .. aber Sprachhören dauert mehr Zeit @ Polarbear – Raj

+0

nehmen mehr Zeit wie? – Zoe

Antwort

2

ich die Lösung zur Verringerung der Zeit zwischen Sprechen und Empfangen der Ergebnisse.

PARTIELLE ERGEBNISSE anfordern, da diese vor den VOLLEN ERGEBNISSEN geliefert werden.

benutzte ich diese EXTRAS: -

mRecognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
mRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, Locale.getDefault().getLanguage().trim()); 
mRecognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, this.getPackageName()); 
mRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
mRecognizerIntent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true); 
mRecognizerIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS, 100); 

mRecognizerIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3); 

mSongSpeechRecognitionListener = new SongSpeechRecognitionListener(mRippleBackground, mFloatingActionButton); 

mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this); 
mSpeechRecognizer.setRecognitionListener(mSongSpeechRecognitionListener); 

Dann in Teilergebnisse

public void onPartialResults(final Bundle partialResults) { 
    Log.i(LOG_TAG, "onPartialResults()"); 

    final List<String> partialResultList = partialResults.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); 

for (final String result : partialResultList) { 

    if (result.isEmpty()) { 
    } else { 
     mPartialResults++; 
     if (mPartialResults == mPartialResultsMAX) { 
      Log.i(LOG_TAG, "onPartialResults() EXECUTE"); 
      mFloatingActionButton.setEnabled(true); 
      mAsyncTask.execute(result); 
       break; 
      } 
     } 
    } 
} 

I mPartialResultsMAX-2 gesetzt, wie es das erste Teilergebnis schien immer nur ein einziges Wort

war

Wenn Sie TEILERGEBNISSE erhalten, möchten Sie möglicherweise den Spracherkenner abbrechen.

+0

danke für Ihre Codierung. Ich werde diesen Beitrag überprüfen und aktualisieren .... thx – Raj

+0

danke für Ihre Codierung. Ich habe Ihre Codierung in unserer Anwendung aktualisieren wird es gut funktionieren .. – Raj

Verwandte Themen