0

Erstens: Ich weiß bereits, dass es eine kontinuierliche 65-Sekunden-Spracherkennung mit dieser API gibt. Mein Ziel ist es NICHT, diese 65 Sekunden zu verlängern. Meine App: Es nutzt Google Streaming-Spracherkennung, basierte ich meinen Code auf diesem Beispiel: https://github.com/GoogleCloudPlatform/android-docs-samples/tree/master/speech Die App funktioniert ziemlich gut, ich bekomme ASR Ergebnisse und zeigen sie auf dem Bildschirm, wie der Benutzer spricht, Siri Stil.Google Speech Cloud-Fehler bei Android: OUT_OF_RANGE: Überschreitung der maximal zulässigen Stream-Dauer von 65 Sekunden

Das Problem: Mein Problem kommt, nachdem die ASR-Taste auf meiner app mehr tippte, Stoppen und die ASR SpeechService Neustart ist ein bisschen unzuverlässig. Schließlich bekomme ich diesen Fehler:

io.grpc.StatusRuntimeException: OUT_OF_RANGE: Exceeded maximum allowed stream duration of 65 seconds. 

... als ob die SpeechService wurde nicht ordnungsgemäß heruntergefahren nach mehreren stoppen, neu starten Zyklen.

Mein Code: Ich stoppe meinen Code so, ich vermute das Problem irgendwo in der Implementierung meiner StopStreamingASR-Methode. Ich laufe es auf einem separaten Thread, weil ich glaube, dass die Leistung verbessern kann (in der Hoffnung ich bin nicht falsch):

static void StopStreamingASR(){ 
    loge("stopGoogleASR_API"); 
    //stopMicGlow(); 

    //Run on separate thread to keep UI thread light. 
    Thread thread = new Thread() { 
     @Override 
     public void run() { 
      if(mSpeechService!=null) { 
       mSpeechService.finishRecognizing(); 
       stopVoiceRecorder(); 
       // Stop Cloud Speech API 
       if(mServiceConnection!=null) { 
        try { 
         app.loge("CAUTION, attempting to stop service"); 
         try { 
         mSpeechService.removeListener(mSpeechServiceListener); 
          //original mActivity.unbindService(mServiceConnection); 
          app.ctx.unbindService(mServiceConnection); 
          mSpeechService = null; 
         } 
         catch(Exception e){ 
          app.loge("Service Shutdown exception: "+e); 
         } 
        } 
        catch(Exception e){ 
         app.loge("CAUTION, attempting to stop service FAILED: "+e.toString()); 
        } 
       } 
      } 
     } 
    }; 
    thread.start(); 
} 

private static void stopVoiceRecorder() { 
     loge("stopVoiceRecorder"); 
     if (mVoiceRecorder != null) { 
      mVoiceRecorder.stop(); 
      mVoiceRecorder = null; 
     } 
    } 

Bin ich den Dienst richtig, um Anhalten der 65 zweite Grenz Fehler zu vermeiden? Irgendwelche Empfehlungen?

+0

ich das gleiche Problem bin zu stoßen. Hast du irgendwann etwas gefunden? – Frank

+0

@Frank Noch nicht! Ich löse einige leichtere Fehler, während ich mir eine Idee für dieses 65-sekündige Problem einstelle. Lass es mich wissen, wenn du etwas entdeckst, werde ich auch! – Josh

Antwort

0

schaffe ich es zu lösen, indem die finishRecognizing Zugabe() innerhalb des OnNext() -Methode von der streamObserver:

public void onNext(StreamingRecognizeResponse response) { 
      String text = null; 
      boolean isFinal = false; 
      if (response.getResultsCount() > 0) { 
       final StreamingRecognitionResult result = response.getResults(0); 
       isFinal = result.getIsFinal(); 
       if (result.getAlternativesCount() > 0) { 
        final SpeechRecognitionAlternative alternative = result.getAlternatives(0); 
        text = alternative.getTranscript(); 
       } 
      } 
      if (text != null) { 
       for (Listener listener : mListeners) { 
        listener.onSpeechRecognized(text, isFinal); 
       } 
       if(isFinal) 
       { 
        finishRecognizing(); 
       } 
      } 
     } 
Verwandte Themen