Reemplazamos el Asistente de Google con la red neuronal Porfirevich y el troll Alice


¿Ya has visto lo que hace Porfirievich ? Ella agrega el texto a cualquiera de tus frases. Y salen cosas realmente divertidas, porque fue entrenada en los libros de Dostoievski, Tolstoi, Pushkin, Bulgakov, Gogol y Pelevin.

"Expresar todo esto con la voz de Levitan sería un excelente sustituto del asistente de Google para la fiesta de Año Nuevo ..." , pensé. Y decidí no posponer este evento para el post-Año Nuevo (porque tú mismo lo entiendes).

Debajo del corte: todo el proceso de creación de un asistente de voz de código abierto Porfirievich en el marco de Aimybox de código abierto exclusivo, y su lanzamiento en lugar del asistente de Google habitual. Bueno, al mismo tiempo, puedes trollear a Alice .

Si quiere probar de inmediato todo esto en la práctica, puede instalar la última versión desde aquí

API de Porfirievich


Recientemente apareció un artículo en el centro que cuenta cómo Mikhail Grankin enseñó a la red neuronal GPT-2 a agregar textos "significativos" a cualquier frase. Resultó gracioso. Además, el acceso a la red neuronal está abierto a través de la API HTTP normal.

Vamos al sitio web a través del cual puede realizar solicitudes a Porfiryevich, abrir el inspector y ver a dónde van las solicitudes y qué formato.



No hay límites para esta API, pero el desarrollador aún recomienda descargar el modelo Porfiryevich e implementarlo en su servidor.


Aimybox sdk


Tenemos la API Porfirievich! Ahora era necesario cortar la aplicación de voz real para teléfonos inteligentes, que reconocería y sintetizaría el habla.

Una excelente solución para esto es el marco abierto de Aimbox , sobre el cual ya escribieron en Habré aquí y aquí . Le permite crear rápidamente una aplicación de voz o integrar funciones de voz en un proyecto existente. Al mismo tiempo, ya hay una hermosa GUI que se puede personalizar.

Puede clonarse una aplicación de muestra y crear un proyecto sobre la base.
Por cierto, la primera versión del SDK de iOS ha aparecido recientemente, por lo que todo se puede repetir para iOS.
Aimybox puede funcionar con cualquier motor de diálogo, por ejemplo , Aimylogic, Rasa o Dialogflow , y también le permite implementar una conexión a cualquier otro. En nuestro caso, debemos enviar solicitudes directamente a la API de Porfirevich y analizar las respuestas. Para esto, no se necesita nada: escribir las clases correspondientes de Solicitud , Respuesta y la implementación de DialogAPI , que en realidad envía solicitudes y analiza las respuestas.

Reconocimiento y síntesis.


En cualquier dispositivo Android listo para usar, el reconocimiento de voz gratuito y la síntesis de voz de Google funcionan, por lo que no puede preocuparse por eso. Esa es solo la voz, por supuesto, quería cambiar por algo más adecuado para la sílaba literaria de Porfirevich ...

Voz de levitan


Anteriormente, Yandex Speechkit-a (solución basada en la nube para reconocer y sintetizar el habla) tenía una maravillosa voz levitana, perfectamente adecuada para nuestro proyecto. Ahora todo se ha trasladado a Yandex Cloud , todo se ha pagado (sin ninguna solicitud de prueba de 10k), por lo que tuve que buscar alternativas.

Hay un gran servicio de prueba de habilidades para Alice: station.aimylogic.com . En él, puede seleccionar la voz que sintetiza las respuestas y probar su habilidad directamente en el navegador. Buscamos en su API y encontramos el punto final al que van las solicitudes de síntesis de voz.



Aquí puede ver que si sustituye levitan en el parámetro de altavoz en esta URL, puede obtener el resultado deseado. ¡Esto es lo que necesitamos!

En realidad, la clase PorfirResponse simplemente sustituye esta URL con los parámetros necesarios para que el sintetizador de voz simplemente reproduzca el mp3 generado en lugar de pronunciar el texto de respuesta de Porfirevich.

Reemplazar el Asistente de Google con Porfiryevich


Puede iniciar nuestra voz Porfiryevich simplemente abriendo la aplicación y tocando el botón del micrófono. Pero es mucho más agradable ejecutarlo en lugar del asistente regular de Google, porque muchos teléfonos inteligentes tienen soporte de asistente incorporado (por ejemplo, en mi Oneplus 7 puede mantener presionado el botón de encendido para activar el asistente desde cualquier pantalla).

Para hacer esto, solo necesita registrar un filtro de intención más android.intent.action.ASSIST en AndroidManifest , coloque el indicador android: launchMode = "singleTop" e implemente el método onNewIntent en MainActivity , para iniciar el reconocimiento de voz cuando se llama a la aplicación en modo asistente.

override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) if (intent?.action == Intent.ACTION_ASSIST) { val aimybox = (application as PorfirApplication).aimybox val channel = aimybox.stateChannel.openSubscription() launch { channel.consume { aimybox.startRecognition() } }.invokeOnCompletion { channel.cancel() } } } 

En la configuración del teléfono inteligente, debe seleccionar Porfirevich como el asistente predeterminado. Configuración -> Aplicaciones -> Aplicaciones predeterminadas

Colorear


En los archivos styles.xml y strings.xml, puede cambiar los colores de la GUI estándar de Aimybox y al mismo tiempo especificar la frase de inicio que se mostrará en la pantalla cuando se inicie nuestro asistente.

Lanzamos


En realidad todo! Después del lanzamiento, puedes observar estas perlas.



Si colocas al lado de otro teléfono inteligente con Yandex Alice y mantienes un chat sobre él, entonces puedes obtener un diálogo "sano" de dos personas no muy sanas



Que sigue


Estas son las ideas que hasta ahora me vienen a la mente

  • En la pantalla principal de la aplicación, muestre el historial de respuestas de Porfirevich con la posibilidad de compartir.
  • Haga una pantalla con ajustes: modo de diálogo, duración de respuesta, selección de voz, etc.

Si tiene mejores ideas o encontró un error, no dude en usar Github , donde ahora se encuentra todo el código del proyecto. También puede donar (escriba un código).

Enlaces utiles


Source: https://habr.com/ru/post/482416/


All Articles