epelpad

El post que buscas se encuentra eliminado, pero este también te puede interesar

Utilizando inteligencia artificial

Introducción

Hace pocos años cualquier Startup que no hiciera uso de La Nube era considerado como un proyecto arcaico. Por allí en 2014 yo afirmaba en una entrevista para el diario CaracasDigital: El móvil y la Nube son el futuro. Pero la realidad es otra. Por supuesto yo estaba equivocado y es que la nube y el móvil eran el presente en aquel momento. Errores cometemos todos, quizá yo queria expresar que era hora de que aquellos proyectos que no utilizaban estas tecnologías debían comenzar a hacerlo para así sobrevivir en el futuro. Dicen que la historia se repite, y aquí estamos de nuevo. Recuerdo cuando logré llevar la bandera de mi país a la final de Microsoft Imagine Cup, utilizando una tecnología casi desconocida para mi, ¿puedes adivinar qué?. Si, la respuesta es inteligencia artificial.

Inteligencia artificial

En una de mis primeras clases de Organización del Computador veíamos las técnicas para almacenar números en una arquitectura de 32 y 64 bits, un amigo comentó que cada vez la computadora parecía menos inteligente. - Pues son el objeto más inservible sin la debida programación de un humano, replicó mi profesora.

La inteligencia artificial busca otorgar funciones cognitivas a las computadoras. Es un campo bastante amplio en el cual no me considero ni si quiera novato, quizá un aficionado al que le apasiona la tecnología. La pasión fue la que me llevó con 17 años a una entrevista privada con Steven Guggenheimer quien es ahora una pieza clave en la división de inteligencia artificial de Microsoft. Y fue en las oficinas de esta empresa donde tuve el honor de recibir elogios por parte de Steve sobre mi aplicación Food & Gram.

Food & Gram



El concepto era sencillo, yo necesitaba una aplicación para participar en la ImagineCup, luego de charlar un amigo sobre lo bueno que era controlar los alimentos que consumimos surgió esta idea, un Shazam para comida que con tan solo una foto podría otorgarle al usuario valores nutricionales, recetas y más. Fue todo un reto y es que la primera versión sólo podia diferenciar una manzana de una naranja. Si, algo tipo Not Hot Dog de la famosa seria Sillicon Valley.



La aplicación utilizaba en primer lugar Shape Detection, yo necesitaba diferenciar entre miles de objetos y una naranja. Vamos con un poquito de detalles técnicos. La aplicación fue desarrollada para Windows Phone 8 utilizando C# por supuesto. Yo necesitaba aplicar algoritmos avanzados y para eso estaba OpenCV una librería con cientos de algoritmos que en realidad son para procesar imágenes pero incluye algo de Machine Learning para complementar. Luego de capturar la foto existían dos procesos:


Shape Detection

Transformaba la imágen a blanco y negro ya que no necesitaba informacion sobre los colores, aplicaba un poco de Blur para eliminar ruido y luego un algoritmo llamado Canny para detectar los bordes de la imagen. Iba iterando por cada borde conectado hasta encontrar el más grande y asegurar de que en un rango, fuera un círculo. En este caso tenia mi posible naranja. Pero, y si la naranja estaba por la mitad? inteligencia


Color Clustering



Era el otro proceso para saber si era naranja mi naranja, pues hay naranjas verdes. Luego de encontrar el contorno que definía mi naranja lo recortaba y aplicaba este algoritmo para cuantificar los colores, y luego eran un montón de if anidados para efectivamente reconocer mi naranja.

Esta fue la versión del Shazam para alimentos que presenté por medio de Skype a Microsoft Venezuela y la verdad les gustó mucho. Pero necesitaba mejorarla y fue cuando utilicé algo más avanzado:

Bag of Words



Recordemos que la inteligencia artificial tiene muchos campos y la visión es uno de ellos. Pero también la clasificación, el primer paso era aplicar algún algoritmo que me permitiera obtener las características de la imagen, creo que utilicé Surf en aquel momento. OpenCV me permitio salvar esas características, estos eran mis Samples, yo le enseñé a mi aplicación a diferenciar entre una manzana y una pizza. Necesité muchas fotos de manzanas y de Pizza, esto se conoce como Aprendizaje Supervisado. Y efectivamente este funcionaba mucho mejor.


Resultados
 

Eso fue lo más preciso que pude lograr en aquel tiempo, era bastante bueno teniendo en cuenta que yo ni si quiera sabía representar números en binario.



link: https://www.youtube.com/watch?v=fmvQNjcg9s0


La historia se repite y ahora toca a la Inteligencia Artificial, y no quiero equivocarme esta vez, así que afirmaré que la Inteligencia Artificial es el presente y que cualquier Startup que no la utilice tendrá una gran desventaja. Google lo afirmó, convirtiendose en una compañia AI-First. Y ya no necesitas ser un experto para poder usar los beneficios de la inteligencia artificial y este post es la prueba. Ahora ya no se trata de un Shazam para fotos, se trata de un Shazam para TODO.

Google Lens


Una aplicación muy potente para hacer Shazam a lo que quieras, es una de las muestras de esta revolución, puede conectarte a un Router WiFi con tan solo capturar una foto de la información, un poco de OCR y más. Puede clasificar flores (debe ser divertido) pero además puede ofrecerte información sobre lugares con tan solo una foto.


link: https://www.youtube.com/watch?v=neB1S0UPJFw


Lo cierto es que hoy mismo tu puedes crear tu propia aplicación con el poder de la Inteligencia Artificial, mira como yo lo hice:

Selfy



Yo quise aprender más y por eso puse mis manos al fuego intentando revivir una aplicación que creé hace bastante, una red social para compartir selfies cuya distribución era exclusiva para Windows Phone. (Ese era el título de artículos donde era destacada pero tambien era un suicidio.)

Esta vez comencé programando en Java utilizando Android Studio. Y siguiendo con el concepto de las fotos quise agregarle algo más de dinámica a la aplicación: Es una red social para compartir fotos pero ahora las fotos tienen un propósito y ese propósito es cumplir retos.




Existen tres tipos de retos:

Duo




Estos retos consisten en que debes tomarte una foto con otra persona, usualmente suele ser con quien más interacciones tienes o amigos de Facebook. Básicamente para ello debes escanear tu rostro la primera vez que utilizas la aplicación, los rostros pueden ser detectados utilizando diversas técnicas: Histogram of Oriented Gradients o Haar Cascades. Luego de detectarlo es necesario obtener las características para poder clasificarlo. En este caso Eigenfaces es lo que buscamos. Sin embargo yo no implementé esto por mi cuenta pero planeo hacerlo. Utilicé Microsoft Cognitive Services, una API que te permite consumir algoritmos de inteligencia artificial, desde OCR hasta Face Detection y Face Recognition. Si un usuario posee activado los retos Duo entonces en cada foto que él suba se detectan los rostros y en caso de tener dos y solo dos rostros se procede a el reconocimiento, donde debe por supuesto aparecer el rostro de la persona que subió la foto y el otro rostro debe pertenecer a la persona que formaba parte del reto creado por el sistema, digamos el amigo.



Spot



Estos retos son más simples a nivel de programación, utilizando la API de Foursquare para obtener sitios 'chéveres', he colocado algunos marcadores allí así que cuando entras a la aplicación te aparecen esos sitios cerca de tí y eres retado a cumplir un Spot, básicamente deber ir al sitio y tomar una foto allí. Como supondrás aquí no hay inteligencia artificial, solo una comparación entre latitud y longitud.

Play



Play, este tipo de reto es mi favorito y es el que utiliza el más puro reconocimiento de imágenes, mediante una serie de librerias y APIs he logrado armar algo genial e interesante. No he utilizado Microsoft Cognitive Services porque necesitaba información más detallada sobre los objetos detectados en las fotos. Tensorflow es una elemento clave aquí y es que las redes neuronales son una pieza clave para el reconocimiento de objetos. Los retos Play consisten en que debes tomarte fotos con objetos o atuendos específicos para poder cumplirlos. Por ejemplo para cumplir el #DogChallenge debes tomarte una foto con tu perro. Mediante una máquina virtual alojada en Azure, una API que programé en Python utilizando Django y Keras potenciado por TensorFlow he logrado reconocer perfectamente cientos de objetos. Y yo no he entrenado nada, pues estoy utilizando ImageNet, una base de datos de imágenes organizada y que permite obtener un key asociado a una palabra en WordNet, he alimentado mi base de datos con todas las posibles palabras y sus respectivas relaciones de jerarquía. Digamos que subes una foto para cumplir el #DogChallenge y la potencia del algoritmo es tanta que el resultado no es Dog, el resultado es precisamente la raza del perro que aparece en tu foto, digamos un Beagle, gracias a estas relaciones de jerarquía puedo recorrer el arbol ascendentemente hasta llegar a Dog y es que Beagle es un subconjunto de Dog, así puedo detectar efectivamente que cumpliste el reto. Y por otro lado puedo crear retos más específicos como #TheBeagleChallenge.



Pasé bastante tiempo trabajando en esta idea y aun trabajo en ella, en primer lugar quería participar de nuevo en la ImagineCup, luego de un mes que envié la idea y la aplicación funcional recibo un email donde anuncian los finalistas y al revisar Google Analytics para mi sorpresa no había ni un registro, así que Microsoft nunca probó mi aplicación para juzgarla. Continué mejorándola y el resultado es bastante bueno, he creado un sitio web y todo para que puedan conocer con detalles sobre cada reto.

El backend de Selfy está hecho en Laravel (manejo muy bien PHP, me gusta Laravel y necesitaba hacer algo rápido). Los retos son verificados mediante Jobs del mismo Framework y utilizo SQL Azure para almacenar todos los datos.



La aplicación ya está disponible en la tienda, pueden acceder a ella, brindarme su apoyo y conocer más sobre el proyecto en el sitio web: http://getselfy.net

Conclusión

Lo cierto es que hoy en día tengo un trabajo real utilizando OpenCV en una compañía que por supuesto no quiere quedarse atrás. Seguiré mejorando este proyecto personal y ansioso por ver cuando se repetirá la historia de nuevo donde cada Startup tenga que dar un paso o quedar atrás.

1 comentario - Utilizando inteligencia artificial

DRockTV
Interesante, puedes recomendarme una API para hacer matches de fotografias, es decir yo subo una imagen de una persona y la web tiene que darme todas las imagenes de la base de datos que sean de esa persona.
JeffersonLicet
Para hacer match de fotografías puedes usar Template Matching, no conozco ninguna API que provea esos servicios, tal vez Clarifai, pero si son personas allí tendrias que usar Face Recognition: Microsoft Cognitive Services (es gratis)