11

मैंने Google ऑफ़लाइन भाषण मान्यता पर शोध किया है। लेकिन एक ही निर्माण करता है, तो मैं Samsung Galaxy S5 (ओएस: -5.0) में लागू पहचान नहीं कर रहा है और यह इस त्रुटि दिखा रहा है:त्रुटि ERROR_RECOGNIZER_BUSY ऑफ़लाइन भाषण मान्यता

8- ERROR_RECOGNIZER_BUSY.

नीचे है: लेकिन यह गूगल नेक्सस 5 (-4.4 ओएस) में ठीक काम करता है मेरा कोड इस लिंक को संदर्भ के रूप में रखते हुए मैंने http://www.truiton.com/2014/06/android-speech-recognition-without-dialog-custom-activity/

इंटरनेट आवाज के बिना पहचान करनी चाहिए। मैंने पॉकेट स्फिंक्स पर काम किया है लेकिन इसमें बहुत सी आवाज आवाज है इसलिए ग्राहक ने इसे खारिज कर दिया है।

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: -

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

हाय अंततः मैं निष्कर्ष पर आया http://stackoverflow.com/questions/17616994/offline-speech-recognition-in-android-jellybean यहाँ 1. सुनिश्चित करें कि डिफ़ॉल्ट ऑफ़लाइन एंड्रॉइड वॉयस रिकग्निज़र Google उत्पाद पर सेट नहीं है सैमसंग/विलिंगो अन्य 2. अगर आप ऑफ़लाइन चाहते हैं तो आप कुछ मामूली हेक बना सकते हैं। आपको आंशिक परिणाम से डेटा मिलेगा। यह आपके आदेश –

+0

से मेल नहीं खा सकता है 3. विशिष्ट रूप से ऑफलाइन = सत्य का अनुरोध करता है, एपीआई 23 (6.0 +) में उपलब्ध इस सुविधा को नियंत्रित करता है 4.EXTRA_PREFER_OFFLINE समर्थन उपलब्ध है आप यहां लिंक देख सकते हैं http://developer.android। कॉम/संदर्भ/एंड्रॉइड/भाषण/RecognizerIntent.html –

+0

लंबे समय से संबंधित https://stackoverflow.com/questions/5810942/how-to-handle-error-recognizer-busy –

उत्तर

3

ERROR_RECOGNIZER_BUSY अक्सर फेंक दिया जाता है जब आप SpeechRecognizer proprely बंद नहीं किया । यो शायद पहले से ही SpeechRecognizer के एक उदाहरण का उपयोग कर रहे हैं।

देखें इस http://developer.android.com/reference/android/speech/SpeechRecognizer.html

0

ERROR_RECOGNIZER_BUSY फेंक दिया हो जब आप फिर से अपने भाषण पहचानकर्ता शुरू जब इसकी पहले से ही चल रहा है। अपने कोड में के रूप में

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

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

     createSpeechAgain(VoiceRecognitionActivity.this); 

     break; 

सीधे शब्दों में

case SpeechRecognizer.ERROR_RECOGNIZER_BUSY: 

      break; 

के साथ अपने ऊपर कोड को संपादित फिर से यह पहले से ही चल रहा है इसे शुरू करने की जरूरत नहीं है के रूप में। यदि आप फिर से पहचान शुरू करेंगे तो यह वही त्रुटि फेंक देगा। और यह लूप में जाएगा।

संबंधित मुद्दे