मैंने 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
हाय अंततः मैं निष्कर्ष पर आया http://stackoverflow.com/questions/17616994/offline-speech-recognition-in-android-jellybean यहाँ 1. सुनिश्चित करें कि डिफ़ॉल्ट ऑफ़लाइन एंड्रॉइड वॉयस रिकग्निज़र Google उत्पाद पर सेट नहीं है सैमसंग/विलिंगो अन्य 2. अगर आप ऑफ़लाइन चाहते हैं तो आप कुछ मामूली हेक बना सकते हैं। आपको आंशिक परिणाम से डेटा मिलेगा। यह आपके आदेश –
से मेल नहीं खा सकता है 3. विशिष्ट रूप से ऑफलाइन = सत्य का अनुरोध करता है, एपीआई 23 (6.0 +) में उपलब्ध इस सुविधा को नियंत्रित करता है 4.EXTRA_PREFER_OFFLINE समर्थन उपलब्ध है आप यहां लिंक देख सकते हैं http://developer.android। कॉम/संदर्भ/एंड्रॉइड/भाषण/RecognizerIntent.html –
लंबे समय से संबंधित https://stackoverflow.com/questions/5810942/how-to-handle-error-recognizer-busy –