Skip to main content

El kiosco del manaña

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 al 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, continúan disfrutando de las atracciones y luego, tan solo van a retirar la comida, lista para ser degustada.

Pues manos a la obra … primero pensemos que se necesitaría para desarrollar un dispositivo como ese.

¿Que 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, y 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 casí expertos en el tema de las comidas rápidas. Para esto, vayamos a los centros comerciales, restaurantes … observemos que hace el camarero, cómo reacciona a las preguntas que le hace el consumidor, qué pregunta usualmente los clientes …


Ahora bien, ya que tenemos más conocimiento del tema, plasmemos esa información es posts, en la pizarra … agrupemos la información, observemos las relaciones que hay 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, para ello en la actualidad hay 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 tal, como para hacer transcripciones de voz a texto y viceversa. Primero, entrenemos al bot con una parte de toda 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 muchas 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 core del chatbot que va atender al consumidor, ahora bien, ocupamos por supuesto una interfaz donde se pueda visualizar el chatbot, todo lo que este responde así como los productos que vamos a vender, para que el cliente seleccione cual desea comer y procesa con el pago de la orden.




Continuemos usando técnicas de diseño agil, ocupamos que todos participen. Se hace una propuesta de diseño, y los compañeros nos hacen retroalimentaciones de la misma.  Se busca llegar a un diseño ligero, agradable a la vista y super 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.  Seguida de una pantalla con todos los productos a comprar; y a un costado, aparecera 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.





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 con el 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 éste presiona un botón físico; también contará con un parte visual, conectado 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.

Implementación e Integración de componentes 

Del lado de la Raspberry el primer módulo que se desarrolló fue el del 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 envia 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 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 imagenes grandes, llamativas y atractivas para el cliente (para que  este le dé ganas de comer y comprar). 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 quieras 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 todos los productos que requerimos de comidas  rápidas en esta plataforma, busquemos imágenes adecuadas a cada artículo y que sean 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 listo para comprar, para que el cliente no deba gastar 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 trabajo y hacer pruebas de control de calidad al kiosco.

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.

Agradecimiento
Gracias a Ncubo por permitirme hacer este proyecto.

Popular posts from this blog

ISTQB - Foundation Level Agile Tester Recap

ISTQB - Foundation Level Agile Tester Recap This is a summary that will help you to approve the Agile Tester certification test. 1 - Agile Software Development 1.1 - The fundamentals of Agile Software Development  The Agile Manifesto has 4 values : - Individuals and interactions over processes and tools (people-centered) - Working software over big documentations (time to market advantage) - Customer collaboration over contract negotiation (customer requirements) - Responding to change over following plan (change is more important)   The Agile Manifesto has 12 principles : - Satisfy the customer with continuous delivery - Changing requirements - Deliver software frequently (few weeks or months) - Business people and developer must work together - Build projects around motivated individuals - Face to face conversation - Working software is the primary measure of progress - The team should maintain a constant pace indefinitely - Technical excellence and good design - Simplic

RasPI Assistant: Google Assistant + Dialogflow + Raspberry Pi

Would you like to control the TV using your voice without spend a lot of money? ... Amazing right?. So, in this post, I will teach you how to do that and more. Some of my dreams always have been control things without touch them, for example: the television, due to tired to raise the hand to change the channel. So ... let's create a device that can do this action automatically. What things will we need? First, I should understand the problem and be aware about it. For example: if we want to control a TV that is not smart, how will we do that? ... a possibility is to send infrared signals (IR) to transmit the events that the person's desire. Also, if I want that the device can hear me, I may need a microphone. Additionally, it should have a speaker to talk with the people. Further, I will need a database to save all the information, APIs that can help me with the smart logic and cheap electronic components like a Raspberry Pi , resistors, leds, wires an

Testing the software accessibility

 Software applications for everyone What is Accessibility? It is all about making applications accessible for ALL people, including those who have disabilities, like visual (color blindness, astigmatism), auditory (hearing loss), motor (cerebral palsy, muscle and joint conditions, spine injuries), cognitive (problem solving, processing, learning), or other impairments. So, our applications should be designed and developed to keep all these folks in mind, as we test to ensure that our solutions are accessible for all our users. Why is Accessibility Testing important? At least, one in five people have some type of impairment, so it's very important to have them in mind when developing software. Recent studies show that +15% of the population has some sort of disability and that 54% of those adults go online, so from a business perspective, it makes sense for us to ensure them the best experience possible when using our applications.  Additionally, this is a human right (legal/justice