android speech to text tutorial
DESCRIPTION
ce documents présente les techniques utilisés sous android pour transformer la voix en un texteTRANSCRIPT
Android Speech To Text Tutorial42 Comments . By Ravi Tamada . on July 13, 2014Advertise Here
Android comes with an inbuilt feature speech to text through which you can provide
speech input to your app. With this you can add some of the cool features to your app
like adding voice navigation(Helpful when you are targeting disabled people), filling a
form with voice input etc.,
In the background how voice input works is, the speech input will be streamed to a
server, on the server voice will be converted to text and finally text will be sent back to
our app.
If you want to do the other way i.e converting text to speech, follow my previous
tutorial Android Text to Speech
DOWNLOAD CODE
I have created a simple app to demonstrate this tutorial. Below is the screenshot of the
app which contains a simple button to invoke speech input and a TextView to display the
converted speech text.
So let’s start by creating simple app.
Sample Application1. Create a new project in Eclipse by going to File ⇒ New ⇒ Android Application
Project and give required information.
2. Open strings.xml located under res ⇒ values and add below string values.
STRINGS.XML<?xml version="1.0" encoding="utf-8"?><resources> <string name="app_name">Speech To Text</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> <string name="speech_prompt">Say something…</string> <string name="speech_not_supported">Sorry! Your device doesn\'t support speech input</string> <string name="tap_on_mic">Tap on mic to speak</string></resources>
3. Open colors.xml located under res ⇒ values and add below colors. If you don’t see
colors.xml, create a new file and add the values.
COLORS.XML<?xml version="1.0" encoding="utf-8"?><resources> <color name="white">#ffffff</color> <color name="bg_gradient_start">#31244e</color> <color name="bg_gradient_end">#6b394c</color></resources>
4. Now open the layout file for main activity(activity_main.xml) and add below code to
create a simple layout.
ACTIVITY_MAIN.XML<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/bg_gradient" android:orientation="vertical" > <TextView android:id="@+id/txtSpeechInput" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="100dp" android:textColor="@color/white" android:textSize="26dp" android:textStyle="normal" />
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="60dp" android:gravity="center" android:orientation="vertical" > <ImageButton android:id="@+id/btnSpeak" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@null" android:src="@drawable/ico_mic" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="@string/tap_on_mic" android:textColor="@color/white" android:textSize="15dp" android:textStyle="normal" /> </LinearLayout>
</RelativeLayout>
5. Finally open your MainActivity.java and do the following changes. In simple adding
speech input will be done in two steps.
Step 1: Starting RecognizerIntent
First we need to create a RecognizerIntent by setting necessary flags such as
ACTION_RECOGNIZE_SPEECH – Simply takes user’s speech input and returns it
to same activity
LANGUAGE_MODEL_FREE_FORM – Considers input in free form English
EXTRA_PROMPT – Text prompt to show to the user when asking them to speak
Step 2: Receiving the speech response
Once the speech input is done we have to catch the response in onActivityResult and
take appropriate action needed.
MAINACTIVITY.JAVApackage info.androidhive.speechtotext; import java.util.ArrayList;import java.util.Locale; import android.app.Activity;import android.content.ActivityNotFoundException;import android.content.Intent;import android.os.Bundle;
import android.speech.RecognizerIntent;import android.view.Menu;import android.view.View;import android.widget.ImageButton;import android.widget.TextView;import android.widget.Toast; public class MainActivity extends Activity { private TextView txtSpeechInput; private ImageButton btnSpeak; private final int REQ_CODE_SPEECH_INPUT = 100; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
txtSpeechInput = (TextView) findViewById(R.id.txtSpeechInput); btnSpeak = (ImageButton) findViewById(R.id.btnSpeak);
// hide the action bar getActionBar().hide();
btnSpeak.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { promptSpeechInput(); } });
}
/** * Showing google speech input dialog * */ private void promptSpeechInput() { Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault()); intent.putExtra(RecognizerIntent.EXTRA_PROMPT, getString(R.string.speech_prompt)); try { startActivityForResult(intent, REQ_CODE_SPEECH_INPUT); } catch (ActivityNotFoundException a) { Toast.makeText(getApplicationContext(), getString(R.string.speech_not_supported), Toast.LENGTH_SHORT).show(); } }
/** * Receiving speech input * */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) { case REQ_CODE_SPEECH_INPUT: { if (resultCode == RESULT_OK && null != data) { ArrayList<String> result = data .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); txtSpeechInput.setText(result.get(0)); } break; }
} }
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; }
}
Run the app in a real device. Make sure that the device has good internet connectivity
while you are testing.
Enabling Offline ModeRight now all the devices are not supporting offline speech input. However you can follow
thisdiscussion to enable offline speech input for supported devices.
I have downloaded speech input packages on my Nexus 5 and offline speech is working
fine.
1. On your device go to Settings -> Language and Input. Click on icon on Google
voice input.
2. Under ALL tab select the language you want to download.
3. Once the language package downloaded, you can see it under INSTALLED tab.