¿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