Como hacer una aplicación reconocimiento de voz en kotlin

Hola amigos hoy veremos como crear una aplicación de reconocimiento de voz en kotlin
la idea de este ejercicio es que nosotros hablemos cualquier frase y la app reconozca lo que hablamos y luego lo muestre por pantalla del móvil.
Este ejercicio lo habíamos tocado muchos meses atrás y estaba construido en java, en aquel entonces no existía aun kotlin en fin si quieres echarle un vistazo te dejo el enlace: Como hacer una aplicación reconocimiento de voz en android studio

Primero necesitamos agregar un textview y un imagebutton, para que sea vea la imagen del micrófono, no se preocupen también les dejare la imagen del micrófono esta debe estar guardad en la carpeta Drawable.

 

Imagen del micrófono:

Te dejo el modo texto de la parte gráfica por si te interesa.

 

activity_main

 

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.androfast.server.appconvertiraudioletrakotlin.MainActivity">

    <TextView
        android:id="@+id/txtMostrar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.48"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.156" />

    <ImageButton
        android:id="@+id/btnMostrar"
        android:layout_width="156dp"
        android:layout_height="149dp"
        android:layout_marginTop="92dp"
        android:background="@drawable/microfono"
        android:onClick="hablar"
        android:text="Button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/txtMostrar" />


</android.support.constraint.ConstraintLayout>

 

Ahora te dejo la clase mainActivity

MainActivity

import android.app.Activity
import android.content.ActivityNotFoundException
import android.content.Intent
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.speech.RecognizerIntent
import android.view.View
import android.widget.TextView
import android.widget.Toast


class MainActivity : AppCompatActivity() {

    var grabar: TextView? = null

    private val RECOGNIZE_SPEECH_ACTIVITY = 1
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        grabar = findViewById(R.id.txtMostrar)


    }

    override fun onActivityResult(requestCode: Int, resultCode: Int,
                                  data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        when (requestCode) {
            RECOGNIZE_SPEECH_ACTIVITY ->

                if (resultCode == Activity.RESULT_OK && null != data) {

                    val speech = data
                            .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS)
                    val strSpeech2Text = speech[0]

                    grabar?.setText(strSpeech2Text)
                }
            else -> {
            }
        }
    }

    fun hablar(v: View) {

        val intentActionRecognizeSpeech = Intent(
                RecognizerIntent.ACTION_RECOGNIZE_SPEECH)

        // Configura el Lenguaje (Español-México)
        intentActionRecognizeSpeech.putExtra(
                RecognizerIntent.EXTRA_LANGUAGE_MODEL, "es-MX")
        try {
            startActivityForResult(intentActionRecognizeSpeech,
                    RECOGNIZE_SPEECH_ACTIVITY)
        } catch (a: ActivityNotFoundException) {
            Toast.makeText(applicationContext,
                    "Tú dispositivo no soporta el reconocimiento por voz",
                    Toast.LENGTH_SHORT).show()
        }

    }
}

 

Ahora debemos ir a  nuestro AndroidManifest y agregar algunos permisos

 

AndroidManifest

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.androfast.server.appconvertiraudioletrakotlin">
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
    <uses-permission android:name="android.permission.CALL_PHONE"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Y el resultado seria algo como esto, todo lo que hablen en la app android lo convertirá a letras

Si te interesa también tenemos el mismo ejercicio en java para Android:

Como hacer una aplicacion reconocimiento de voz en android studio

 

0

Hola soy Alex Céspedes  fundador de ANDROFAST, programo algunas cosas por diversión, me gusta aprender cosas nuevas y estoy pendiente de todo lo que tenga que ver con tecnología. Este blog lo cree para todas las personas que tengan dificultades en la programación, para ser sincero nunca fui bueno y reprobé algunos cursos de programación, pero mis ganas de aprender pudieron más. SI YO PUEDO TU PUEDES ANIMO!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

WhatsApp chat