android speech to text tutorial

10
Android Speech To Text Tutorial 42 Comments . By Ravi Tamada . on July 13, 2014 Advertise 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.

Upload: mohamed-bouasria

Post on 22-Jan-2016

27 views

Category:

Documents


0 download

DESCRIPTION

ce documents présente les techniques utilisés sous android pour transformer la voix en un texte

TRANSCRIPT

Page 1: Android Speech to Text Tutorial

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.

Page 2: Android Speech to Text Tutorial
Page 3: Android Speech to Text Tutorial

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&#8230;</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" /> 

Page 4: Android Speech to Text Tutorial

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

Page 5: Android Speech to Text Tutorial

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);

Page 6: Android Speech to Text Tutorial

         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.

Page 7: Android Speech to Text Tutorial
Page 8: Android Speech to Text Tutorial
Page 9: Android Speech to Text Tutorial