11

Google çevrimdışı konuşma tanıma konusunda araştırma yaptım. ama Samsung Galaxy S5 (OS: -5.0) uygulamak, aynı yapı o tanımıyor ve bu hata gösteriliyor: Aşağıda iseÇevrimdışı konuşma tanıma ile hata ERROR_RECOGNIZER_BUSY

8- ERROR_RECOGNIZER_BUSY.

: ama google nexus 5 (-4,4 OS) çalışıyor benim kodum referans olarak bu bağlantıyı tutarak bir değişiklikleri

internet ses tanıması gerektiğini olmadan http://www.truiton.com/2014/06/android-speech-recognition-without-dialog-custom-activity/ yaptık. Pocket sfenks üzerinde çalıştım ama çok fazla yan ses çıkardı, böylece müşteri bunu reddetti.

public class VoiceRecognitionActivity extends Activity implements RecognitionListener { 

    private TextView returnedText; 
    private static ProgressBar progressBar; 
    private static SpeechRecognizer speech = null; 
    private static Intent recognizerIntent; 
    private String LOG_TAG = "VoiceRecognitionActivity"; 
    private Button button1; 
    Activity activity = VoiceRecognitionActivity.this; 
    private TextView textView2; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     returnedText = (TextView) findViewById(R.id.textView1); 
     textView2 = (TextView) findViewById(R.id.textView2); 
     progressBar = (ProgressBar) findViewById(R.id.progressBar1); 
     button1 = (Button) findViewById(R.id.button1); 

     getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
    // toggleButton = (ToggleButton) findViewById(R.id.toggleButton1); 

     PackageManager pm = getPackageManager(); 
     List<ResolveInfo> activities = pm.queryIntentActivities(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0); 
     if (activities.size() != 0) 
     { 
      createSpeechAgain(VoiceRecognitionActivity.this); 
     } 
     else 
     { 
      textView2.setText("Recognizer_not_present"); 
     } 




     button1.setOnClickListener(new OnClickListener() {   
      @Override 
      public void onClick(View arg0) { 

       speech.stopListening(); 
       speech.destroy(); 

       createSpeechAgain(VoiceRecognitionActivity.this); 
      } 
     }); 

    } 

    private void createSpeechAgain(VoiceRecognitionActivity voiceRecognitionActivity) { 
     progressBar.setVisibility(View.INVISIBLE); 
     speech = SpeechRecognizer.createSpeechRecognizer(voiceRecognitionActivity); 
     speech.setRecognitionListener(voiceRecognitionActivity); 
     recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
     recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "en-US"); 
     recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, voiceRecognitionActivity.getPackageName()); 
     recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH); 
     recognizerIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3); 
     //recognizerIntent.putExtra(RecognizerIntent.EXTRA_PREFER_OFFLINE, Boolean.FALSE); 
     recognizerIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS, 20000); 
     recognizerIntent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS, 20000); 
     // EXTRA_PREFER_OFFLINE 

     progressBar.setVisibility(View.VISIBLE); 
     progressBar.setIndeterminate(true); 
     speech.startListening(recognizerIntent); 

    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     /*if (speech != null) { 
      speech.destroy(); 
      Log.i(LOG_TAG, "destroy"); 
     }*/ 

    } 

    @Override 
    public void onBeginningOfSpeech() { 
     Log.i(LOG_TAG, "onBeginningOfSpeech"); 
     progressBar.setIndeterminate(false); 
     progressBar.setMax(10); 
    } 

    @Override 
    public void onBufferReceived(byte[] buffer) { 
     Log.i(LOG_TAG, "onBufferReceived: " + buffer); 
    } 

    @Override 
    public void onEndOfSpeech() { 
     Log.i(LOG_TAG, "onEndOfSpeech"); 
     progressBar.setIndeterminate(false); 
     progressBar.setVisibility(View.INVISIBLE); 
     speech.stopListening(); 
    } 

    @Override 
    public void onError(int errorCode) { 


     String errorMessage = getErrorText(errorCode); 
     Log.d(LOG_TAG, "FAILED " + errorMessage); 
     textView2.setText(errorMessage); 


    } 

    @Override 
    public void onEvent(int arg0, Bundle arg1) { 
     Log.i(LOG_TAG, "onEvent"); 
    } 

    @Override 
    public void onPartialResults(Bundle arg0) { 
     Log.i(LOG_TAG, "onPartialResults"); 
    } 

    @Override 
    public void onReadyForSpeech(Bundle arg0) { 
     Log.i(LOG_TAG, "onReadyForSpeech"); 
    } 

    @Override 
    public void onResults(Bundle results) { 
     Log.i(LOG_TAG, "onResults"); 
     ArrayList<String> matches = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); 
     String text = ""; 
     for (String result : matches) 
      text += result + "\n"; 

     returnedText.setText(text); 
     Log.v(LOG_TAG, "onResults---> " + text); 
     progressBar.setVisibility(View.VISIBLE); 
     progressBar.setIndeterminate(true); 
     speech.startListening(recognizerIntent); 

    } 

    @Override 
    public void onRmsChanged(float rmsdB) { 
     //Log.i(LOG_TAG, "onRmsChanged: " + rmsdB); 
     progressBar.setProgress((int) rmsdB); 
    } 

    public String getErrorText(int errorCode) { 
     String message; 
     switch (errorCode) { 
     case SpeechRecognizer.ERROR_AUDIO: 
      message = "Audio recording error"; 
      Log.v("LOG_TAG", message); 

      progressBar.setVisibility(View.VISIBLE); 
      progressBar.setIndeterminate(true); 
      speech.startListening(recognizerIntent); 

      break; 
     case SpeechRecognizer.ERROR_CLIENT: 
      message = "Client side error"; 
      Log.v("LOG_TAG", message); 

      progressBar.setVisibility(View.VISIBLE); 
      progressBar.setIndeterminate(true); 
      speech.startListening(recognizerIntent); 

      break; 
     case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS: 
      message = "Insufficient permissions"; 

      Log.v("LOG_TAG", message); 

      progressBar.setVisibility(View.VISIBLE); 
      progressBar.setIndeterminate(true); 
      speech.startListening(recognizerIntent); 

      break; 
     case SpeechRecognizer.ERROR_NETWORK: 
      message = "Network error"; 
      Log.v("LOG_TAG", message); 
      break; 
     case SpeechRecognizer.ERROR_NETWORK_TIMEOUT: 
      message = "Network timeout"; 
      Log.v("LOG_TAG", message); 
      break; 
     case SpeechRecognizer.ERROR_NO_MATCH: 
      message = "No match"; 
      Log.v("LOG_TAG", message); 

      progressBar.setVisibility(View.VISIBLE); 
      progressBar.setIndeterminate(true); 
      speech.startListening(recognizerIntent); 

      break; 
     case SpeechRecognizer.ERROR_RECOGNIZER_BUSY: 
      message = "RecognitionService busy"; 

      Log.v("LOG_TAG", message); 
      speech.stopListening(); 
      speech.destroy(); 

      createSpeechAgain(VoiceRecognitionActivity.this); 

      break; 
     case SpeechRecognizer.ERROR_SERVER: 
      message = "error from server"; 
      Log.v("LOG_TAG", message); 
      break; 
     case SpeechRecognizer.ERROR_SPEECH_TIMEOUT: 
      message = "No speech input"; 
      Log.v("LOG_TAG", message); 


      progressBar.setVisibility(View.VISIBLE); 
      progressBar.setIndeterminate(true); 
      speech.stopListening(); 
      speech.destroy(); 

      createSpeechAgain(VoiceRecognitionActivity.this); 

      break; 
     default: 
      message = "Didn't understand, please try again."; 
      break; 
     } 
     return message; 
    } 
    } 

Xml: -

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:src="@drawable/ic_launcher" /> 

    <ProgressBar 
     android:id="@+id/progressBar1" 
     style="?android:attr/progressBarStyleHorizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/toggleButton1" 
     android:layout_marginTop="28dp" 
     android:paddingLeft="10dp" 
     android:paddingRight="10dp" /> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/progressBar1" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="47dp" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/imageView1" 
     android:layout_alignLeft="@+id/imageView1" 
     android:text="Restart" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/button1" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="19dp" 
     android:text="" /> 

    </RelativeLayout> 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.offlinegooglespeechtotext" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="19" 
     android:targetSdkVersion="19" /> 

    <uses-permission android:name="android.permission.RECORD_AUDIO" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".VoiceRecognitionActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

Logcat: - Eğer proprely SpeechRecognizer yakın vermedi zaman

09-30 18:05:54.732: D/ResourcesManager(3941): creating new AssetManager and set to /data/app/com.example.offlinegooglespeechtotext-2/base.apk 
09-30 18:05:54.772: V/BitmapFactory(3941): DecodeImagePath(decodeResourceStream3) : res/drawable-xxhdpi-v4/sym_def_app_icon.png 
09-30 18:05:54.772: V/BitmapFactory(3941): DecodeImagePath(decodeResourceStream3) : res/drawable-xxhdpi/ic_launcher.png 
09-30 18:05:54.787: V/BitmapFactory(3941): DecodeImagePath(decodeResourceStream3) : res/drawable-xxhdpi-v4/ic_ab_back_holo_dark_am.png 
09-30 18:05:54.797: V/BitmapFactory(3941): DecodeImagePath(decodeResourceStream3) : res/drawable-xxhdpi-v4/sym_def_app_icon.png 
09-30 18:05:54.817: D/Activity(3941): performCreate Call secproduct feature valuefalse 
09-30 18:05:54.817: D/Activity(3941): performCreate Call debug elastic valuetrue 
09-30 18:05:54.827: D/OpenGLRenderer(3941): Render dirty regions requested: true 
09-30 18:05:54.867: I/(3941): PLATFORM VERSION : JB-MR-2 
09-30 18:05:54.867: I/OpenGLRenderer(3941): Initialized EGL, version 1.4 
09-30 18:05:54.877: I/OpenGLRenderer(3941): HWUI protection enabled for context , &this =0xb39090d8 ,&mEglDisplay = 1 , &mEglConfig = -1282088012 
09-30 18:05:54.887: D/OpenGLRenderer(3941): Enabling debug mode 0 
09-30 18:05:54.957: V/LOG_TAG(3941): No match 
09-30 18:05:54.957: D/VoiceRecognitionActivity(3941): FAILED No match 
09-30 18:05:54.982: I/Timeline(3941): Timeline: Activity_idle id: [email protected] time:5837375 
09-30 18:05:55.607: I/VoiceRecognitionActivity(3941): onReadyForSpeech 
09-30 18:05:55.947: I/VoiceRecognitionActivity(3941): onBeginningOfSpeech 
09-30 18:05:57.252: I/VoiceRecognitionActivity(3941): onEndOfSpeech 
09-30 18:05:57.322: V/LOG_TAG(3941): No match 
09-30 18:05:57.322: D/VoiceRecognitionActivity(3941): FAILED No match 
09-30 18:05:57.332: V/LOG_TAG(3941): No match 
09-30 18:05:57.332: D/VoiceRecognitionActivity(3941): FAILED No match 
09-30 18:05:57.347: V/LOG_TAG(3941): No match 
09-30 18:05:57.347: D/VoiceRecognitionActivity(3941): FAILED No match 
09-30 18:05:57.367: V/LOG_TAG(3941): RecognitionService busy 
09-30 18:05:57.392: D/VoiceRecognitionActivity(3941): FAILED RecognitionService busy 
09-30 18:05:57.392: E/SpeechRecognizer(3941): not connected to the recognition service 
09-30 18:05:58.232: I/VoiceRecognitionActivity(3941): onReadyForSpeech 
09-30 18:06:03.287: V/LOG_TAG(3941): No speech input 
09-30 18:06:03.302: D/VoiceRecognitionActivity(3941): FAILED No speech input 
09-30 18:06:03.302: E/SpeechRecognizer(3941): not connected to the recognition service 
+0

Merhaba sonunda sonuca vardım http://stackoverflow.com/questions/17616994/offline-speech-recognition-in-android-jellybean 1. Varsayılan çevrimdışı Android Voice Recogniser öğesinin Google ürününe ayarlanmadığından emin olun. Samsung/Vlingo diğer u bazı küçük hake yapabilirsiniz çevrimdışı istiyorum 2.If. Kısmi sonuçtan veri alacaksınız. Bu ya –

+0

3. Özellikle çevrimdışı = true istemek için komut maç olabilir veya olmayabilir, u burada linki http://developer.android görebilirsiniz 4.EXTRA_PREFER_OFFLINE desteği mevcut API 23 (6.0 +) bulunan bu özelliği kontrol yapar. com/başvuru/android/konuşma/Uzun ilgili RecognizerIntent.html –

+0

https://stackoverflow.com/questions/5810942/how-to-handle-error-recognizer-busy –

cevap

0

ERROR_RECOGNIZER_BUSY sen onun zaten çalıştırırken tekrar konuşma tanıyıcı başlattığınızda atılmış olsun bakın. yine zaten çalışıyor başlatmak için gerek yoktur gibi kodunuzda gibi

case SpeechRecognizer.ERROR_RECOGNIZER_BUSY: 
     message = "RecognitionService busy"; 

     Log.v("LOG_TAG", message); 
     speech.stopListening(); 
     speech.destroy(); 

     createSpeechAgain(VoiceRecognitionActivity.this); 

     break; 

Basitçe

case SpeechRecognizer.ERROR_RECOGNIZER_BUSY: 

      break; 

ile yukarıdaki kodu düzenleyin. Tanıma yeniden başlayacaksanız, aynı hatayı atar. ve döngüye girecek.

İlgili konular