Creando el kiosco del mañana

 

Prototipo de Kiosco con asesor virtual para la venta de comidas rápidas

Siempre me he preguntado, cómo será hacer un sistema o dispositivo cognitivo que sea capaz de asistir a un ser humano en cualquier actividad cotidiana que realizamos.

Por ejemplo, algo como una especie de kiosco cognitivo que pueda tomar la orden de un menú de comidas rápidas y que pueda ayudar en la creación de la misma para el consumidor. Y cuando digo kiosco … me imagino una especie de cajón metálico o plástico con cosas electrónicas conectadas, como un cajero automático con una pantalla táctil.

Tan solo imagínense algo así ubicado en lugares estratégicos, por ejemplo en centros comerciales o en el parque de diversiones, donde las personas se acerquen, soliciten lo que desean comer, y continúe disfrutando de las atracciones y luego, tan solo van a retirar la comida, lista para ser degustada.


Pues manos a la obra … primero pensemos qué se necesitaría para desarrollar un dispositivo como este.

¿Qué ocupamos?

Por supuesto, lo primero que ocupamos es un computador que se encargue de ejecutar la aplicación, y como se quiere bajar los costos del proyecto, vamos a usar un sistema empotrado, como lo es una Raspberry Pi; además, se ocupa una pantalla táctil donde los consumidores puedan visualizar y tocar los elementos que tiene la interfaz gráfica del kiosco. No puede faltar un micrófono para hablarle al sistema y unos parlantes para escuchar lo que este nos pueda responder. Adicionalmente, se podría requerir de botones físicos y sensores para detectar la presencia de un cliente, así como una cámara para analizar al mismo, como determinar el género, la edad o incluso el estado de ánimo de él.

Generar contenido al chatbot

Seguidamente, si queremos que este dispositivo se comunique y hable con un humano, tenemos que generar contenido y ser casi expertos en el tema de las comidas rápidas. Para esto vayamos a los centros comerciales, restaurantes … observemos qué hace el camarero, cómo reacciona a las preguntas que le hace el consumidor, qué preguntan usualmente los clientes …

Ahora bien, ya que tenemos más conocimiento del tema, plasmemos esta información en posts, en la pizarra … agrupemos la información, observemos las relaciones que existen entre los temas más importantes que usualmente menciona el cliente.

En hora buena … es momento de aplicar técnicas de Design Thinking. Hagamos una actividad donde simulamos el proceso de compra que hace normalmente un consumidor de comidas rápidas … donde uno pide lo que quiere (consumidor) y el otro le ofrece y le responde (camarero y el futuro chatbot del kiosco). Esto nos permite validar el contenido que ya se tiene agrupado y organizado en la etapa anterior, ya que es acá donde todo mundo participa, dando opiniones, sugerencias y mejoras al kiosco del mañana.

Entrenar y darle vida al chatbot

Listo … ya tenemos gran parte de la información que debe saber un bot para atender y comunicarse con un consumidor  de comidas rápidas. Es momento de crear un chatbot y entrenarlo, existen en la actualidad muchas plataformas que ofrecen este servicio, por ejemplo: IBM tiene a Watson Conversation, Google cuenta con Dialogflow, Microsoft tiene a LUIS y Facebook a Wit.

Por ahora usemos Watson, tanto para entrenar y crear el bot, como para hacer transcripciones de voz a texto y viceversa. Primero, entrenemos al bot con una parte de la información que ya tenemos recolectada, la otra parte será usada para probar que el chatbot esté respondiendo de forma adecuada.

Para continuar con las pruebas, lo recomendado es compartir ese chatbot a nuestros compañeros de trabajo y amigos, para tener varios puntos de vista y monitorear las respuestas del bot. En este proceso nos daremos cuenta que hay muchos casos que hay que entrenar y cambiar, también existirán escenarios que por alguna razón se salen del alcance del conocimiento del bot, las cuales también se deben controlar y mostrarle el mensaje correcto al cliente.

Diseñemos el kiosco

¡Excelente! ya tenemos el chatbot que va atender al consumidor, ahora bien, ocupamos por supuesto una interfaz donde este se pueda visualizar, todo lo que este responda, así como los productos que vamos a vender, para que el cliente seleccione cúal desea comer y proceda con el pago de la orden.

Continuemos usando técnicas de diseño ágil, ocupamos que todos participen. Se hace una propuesta y los compañeros nos hacen retroalimentaciones de la misma. Se busca llegar a un diseño ligero, agradable a la vista y súper intuitivo para el consumidor.

Al final la interfaz que se decidió implementar cuenta con una pantalla de bienvenida, que consta de varias imágenes y animaciones atractivas y apetitosas, que incitan al cliente a comprar. Seguido de una pantalla con todos los productos a comprar; y a un costado, aparecerá toda la interacción que realizará el chatbot.

Arquitectura del sistema

Antes de empezar con la implementación del sistema, primero debemos diseñar y tener claro todas las partes que se van a integrar y cómo se van a relacionar entre ellas. Se necesita diagramar bases de datos, diagramas de clases, diagramas de actividad, hacer mockups, definir cómo va a ser el modelo de pruebas a seguir, entre otras.

Diagrama de arquitectura

Del lado del backend vamos a ocupar una base de datos para guardar toda la información, así como un servidor FTP para guardar todos los archivos multimedia, como imágenes y audios. Adicionalmente, se requerirá de acceso a servicios cognitivos en la nube, como Watson IBM. También del lado del backend se debe desarrollar una lógica que permita controlar los flujos de los diálogos del chatbot y desarrollar una serie de servicios para exponer el sistema al frontend (interfaz del kiosco) y a la Raspberry Pi.

La Raspberry Pi deberá estar conectada con tres módulos: un módulo de sonido, encargado de reproducir los audios que el chatbot expresa, así como de un micrófono para capturar lo que el cliente expresa cuando este presiona un botón físico; también contará con una parte visual, conectada a una pantalla táctil, para facilitar la interacción con el consumidor; y por último, el módulo encargado de determinar el género de la persona con una cámara (realizando procesamiento de imágenes)  y un sensor infrasonido para determinar cuando una persona está al frente del kiosco para activar este módulo, así como cuando se aleja del mismo.

Arquitectura del la RPI

Implementación e integración de componentes

Del lado de la Raspberry el primer módulo que se desarrolló fue el reconocimiento de género.  Esto implicó conectar una cámara y un sensor infrasonido a la RPI, además de programar una lógica en Python para monitorear cuando hay una persona usando el kiosco y activar el módulo de captura de imágenes.

Seguidamente, cuando ya se tenía la imagen se debía analizar el género, para ello se uso el SDK de IBM, especificamente el módulo es Image Recognition.

Posteriormente, se trabajó en la parte del sonido. Se conectaron los parlantes al sistema empotrado (Raspberry Pi), así como un micrófono. Para activar este módulo se conectó adicionalmente un botón físico, y se programó una funcionalidad en Python para que inicie la grabación del audio cuando este botón es presionado y termine de hacerlo cuando el mismo se deja de presionar (se suelta). Seguidamente se envía este audio al servicio de STT (Speech to Text) de IBM para obtener el texto del audio que expresó el usuario.

Una vez que se contaba con el texto, se programaron servicios del lado del backend en Java, esto para poder enviarle ese texto al chatbot que corre el servidor.

Es momento de trabajar en el frontend … Primero se trabajó en una interfaz de bienvenida, usando animaciones e imágenes grandes, llamativas y atractivas para el cliente. Esta interfaz será la primera interacción que tendrá el cliente con el kiosco, antes de proceder con la creación del menú.

Para vender ocupamos una plataforma que brinde el servicio (a menos que desee hacer una usted solo). En nuestro caso usaremos Nimbus, que es una plataforma en línea que facilita la venta de productos o servicios a sus clientes. Seguidamente, agregamos en esta plataforma todos los productos que requerimos de comidas  rápidas, buscamos imágenes adecuadas a cada artículo y atractivas para el consumidor.

Luego, integramos la tienda en nuestra interfaz. También creamos la interacción del chatbot con el kiosco, se integró la visualización de las respuestas que retorna el chatbot.

El controlador de la UI se encarga de estar consultando al backend si hay mensajes nuevos con el identificador de ese kiosco, si es así, muestra los mensajes de texto en un panel y reproduce los audios. Adicionalmente, en el mensaje también puede venir información para Nimbus y/o viñetas HTML: los datos para Nimbus generalmente son productos que quiere el usuario, y para ayudarle al mismo a ubicarlos, el sistema le asiste en esta labor, mostrándole el producto que quiere de una vez y que está listo para comprar, así el cliente no invertirá tiempo buscándolo; los resultados en viñetas son usualmente botones precargados, correspondientes a preguntas que hace el chatbot, permitiendo agilizar el proceso de interacción con el sistema.

Al fin … es hora de integrar todos los componentes, ver los frutos del arduo trabajo y hacer pruebas de control de calidad al kiosco cognitivo.

Conclusiones

  • El chatbot es funcional, sin embargo, no es perfecto.
  • No deberían existir intenciones similares en el chatbot.
  • El módulo de reconocimiento del género de la persona es funcional, siempre y cuando la imagen que se captura contenga por lo menos el rostro completo de la persona.
  • La UI del kiosco integrada con Nimbus, demostró ser amigable, sin embargo en ocasiones el tiempo de respuesta no es instantáneo.
  • La integración de todos los componentes del kiosco fue exitosa, pero el tiempo de respuesta es prolongada.
  • Se demostró que si es posible crear un kiosco cognitivo que pueda asistir a los consumidores por sí solo.

Recomendaciones

  • Mejorar el contenido del chatbot.
  • Agregar al chatbot la capacidad de recomendar productos al consumidor.
  • Se recomienda explorar otras opciones de componentes electrónicos.
  • Agregar una interfaz de configuración de parámetros que requiere el kiosco.
  • Enviar imágenes del reconocimiento del género y audios de la transcripción al FTP.
  • Incluir un módulo que permita una comunicación más cercana entre el chatbot y el servicio de STT.
  • Agregar más componentes electrónicos, así como crear una PCB.