Voice to text on Android in offline mode

28,095

I think you have two problems. First, yes the recognizer functionality is not available on all devices. Make sure you install and update the latest Google Voice Search for Android. I believe it installs the latest recognizer. See http://www.google.com/mobile/voice-actions/ it may be helpful.

As Dante Jiang said in Converting speech to text, According to this article, Google Voice Search is what you actually need.

The Android SDK makes it easy to integrate speech input directly into your own application—just copy and paste from this sample application to get started. Android is an open platform, so your application can potentially make use of any speech recognition service on the device that's registered to receive a RecognizerIntent. Google's Voice Search application, which is pre-installed on many Android devices, responds to a RecognizerIntent by displaying the "Speak now" dialog and streaming audio to Google's servers—the same servers used when a user taps the microphone button on the search widget or the voice-enabled keyboard. (You can check if Voice Search is installed in Settings ➝ Applications ➝ Manage applications.)

In code, you should check to see if the recognition activity is present. I have the following snippet I've used:

// Check to see if a recognition activity is present
PackageManager pm = getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(
        new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
if (activities.size() != 0) 
{
    speakButton.setOnClickListener(this);
} 
else 
{
    speakButton.setEnabled(false);
    speakButton.setText(R.string.recognizer_not_present);
}

The second problem is that the Android voice recognition requires Internet connectivity. The recognition is not performed on the device, but rather uses Google web services. So, you must be online. Some info on the web services is available at http://waxy.org/2008/11/deconstructing_google_mobiles_voice_search_on_the_iphone/.

Share:
28,095
amiekuser
Author by

amiekuser

:)

Updated on May 09, 2020

Comments

  • amiekuser
    amiekuser almost 4 years

    Is there anyway in which I can use the Voice to Text feature of Android in offline mode.

    In the given example VoiceRecognition.java, it starts and activity with the intent RecognizerIntent.ACTION_RECOGNIZE_SPEECH.

    Does it mean that any other apk needs to be installed before hand for this to work or do I need to write my own application to launch on this intent.

    I have been searching for this for a long time but is getting confused...

    Here is the code I used..

    private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;
    
    private ListView mList;
    
    /**
     * Called with the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        // Inflate our UI from its XML layout description.
        setContentView(R.layout.voice_recognition);
    
        // Get display items for later interaction
        Button speakButton = (Button) findViewById(R.id.btn_speak);
    
        mList = (ListView) findViewById(R.id.list);
    
        // Check to see if a recognition activity is present
        PackageManager pm = getPackageManager();
        List<ResolveInfo> activities = pm.queryIntentActivities(
                new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
        if (activities.size() != 0) {
            speakButton.setOnClickListener(this);
        } else {
            speakButton.setEnabled(false);
            speakButton.setText("Recognizer not present");
        }
    }
    
    /**
     * Handle the click on the start recognition button.
     */
    public void onClick(View v) {
        if (v.getId() == R.id.btn_speak) {
            startVoiceRecognitionActivity();
        }
    }
    
    /**
     * Fire an intent to start the speech recognition activity.
     */
    private void startVoiceRecognitionActivity() {
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo");
        startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
    }
    
    /**
     * Handle the results from the recognition activity.
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) {
            // Fill the list view with the strings the recognizer thought it could have heard
            ArrayList<String> matches = data.getStringArrayListExtra(
                    RecognizerIntent.EXTRA_RESULTS);
            mList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,
                    matches));
        }
    
        super.onActivityResult(requestCode, resultCode, data);
    }
    

    On running this code it gives Recognizer not present which means no such activity is present. How to resolve this?

  • Deepak Goel
    Deepak Goel about 10 years
    Offline voice to text is now available on Jelly Beans.
  • Rao's
    Rao's over 8 years
    @deepakgoel did u have sample of google Offline voice to text. for me it is taking voice to text in nexus 5. Same code is not working in Samsung galaxy s5.. can u help me
  • Rao's
    Rao's over 8 years
    @deepakit is take unnecessary words and it matchs atomatically near by content, it effects lot to my app. so it got rejected from client.
  • Rao's
    Rao's over 8 years
    here i have added my code of google stackoverflow.com/questions/32866239/…