Reconhecimento de fala no Android!

O reconhecimento de voz é sem dúvida uma funcionalidade muito interessante no mundo dos aplicativos para dispositivos móveis.
Além de ser uma maneira interessante de propiciar ao usuário uma forma de imersão no seu app, também pode ser de grande ajuda para auxiliar usuários com alguma deficiência física (tanto na visão quanto na coordenação motora) a navegarem na aplicação.
Como de custume no Android, essa funcionalidade também é muito simples de ser implementada.
Então vamos a prática. No eclipse vamos criar um projeto Android, esse projeto basicamente terá uma tela com um botão e um TextView. Ao clicar no botão o usuário estará apto a começar a falar próximo ao dispositivo, as palavras que forem ditas serão identificadas e exibidas no TextView.

O nosso layout ficará assim:


<LinearLayout 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:orientation="vertical">

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClickVoice"
        android:text="Press to Talk" />

    <TextView
        android:id="@+id/textViewPalavras"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         />

</LinearLayout>


Logo abaixo, podemos observar a implementação da nossa Activity. Veja, que conseguimos alcançar a funcionalidade de reconhecimento de fala, através da classe RecognizerIntent. Esta classe provê algumas informações importantes para montar uma Intent que chama essa funcionalidade do Android. Após o disparo dessa Intent, a aplicação do Android para reconhecimento da fala será iniciada. A medida que palavras forem identificadas poderão ser tratadas no onActivityResult.


public class MainActivity extends Activity {

	private static final int REQUEST_CODE = 1234;

	private TextView textViewWords;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		textViewWords = (TextView) findViewById(R.id.textViewPalavras);
		showMessageIfThereIsNoVoiceRecognition();
	}
	
	private void showMessageIfThereIsNoVoiceRecognition() {
		PackageManager pm = getPackageManager();
		List<ResolveInfo> activities = pm.queryIntentActivities(
				new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
		if (activities.size() == 0) {
			Toast.makeText(this, "Your devices doesn`t have voice recognition service!",Toast.LENGTH_LONG).show();
		}
	}


	public void onClickVoice(View view) {
		startVoiceRecognitionActivity();	
	}

	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, "Voice recognition Demo...");
		startActivityForResult(intent, REQUEST_CODE);
	}


	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
			ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
			for(String match : matches) {
				String currentWord = textViewWords.getText().toString();
				textViewWords.setText(currentWord.concat(match));
			}
		}
		
		super.onActivityResult(requestCode, resultCode, data);
	}

}

Testei esse código em dois dispositivos diferentes, e obtive resultados diferentes. Então, penso que essa funcionalidade varia muito com a qualidade do Hardware. Mas no geral, não obtive resultados completamente iguais ao que eu falei. Apenas resultados aproximados.
Espero que atenda as suas necessidades.

Anúncios
  1. Deixe um comentário

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s

%d bloggers like this: