Category Archives: Inteligencia Artificial

Video de QRIO el robot humanoide de Sony

El otro día ya hablábamos del equipo de fútbol con robots humanoides de la univerisdad de Osaka. Pero para convenceros de que realmente Japón está a años luz de nosotros en temas de robótica bajaros el video del robot humanoide QRIO de Sony.

Es realmente impresionante ver como mantienen el equilibrio, fijaros como al mover los brazos hacia un lado, la cadera se mueve hacia el lado opuesto para desplazar el centro de gravedad. Hay que tener en cuenta que todos los cálculos hay que realizarlos en tiempo real, para ello utiliza dos procesadores funcionando en paralelo con un sistema operativo específico de Sony. Solo mide 50 cm pero es capaz de subir y bajar escaleras, caminar por superficies rugosas sin caerse, bailar, saludar, ir a donde le indiquemos, correr o incluso saltar.

También es capaz de realizar tareas como el reconocimiento de caras. Puede recordar hasta 20 personas y almacenar sus nombres, además recuerda si te has portado bien con él o no, y actuará en consecuencia siendo más simpático contigo o pasando de tí. Esto sí, por ahora solo sabe Japonés e Inglés y no ha superado el test de Turing.

Este aparato se pondrá a la venta en Japón por el equivalente a unos 50.000 euros (No hay fecha de salida al mercado). En principio se usará para dar la bienvenida a la gente en centros comerciales y cosas parecidas. Pero en el futuro… ¿ Nos invadirán los Japos con un ejército de QRIOs ? 🙂

Por ahora yo me conformo con jugar con un Aibo que se podría considerar como uno de los primeros experimentos de Sony en la robótica ‘humanoide’, aquí tenéis mi foto con uno de ellos (No es mio, es la universidad ):


El Zoom de película

¿Cuantas veces habéis visto una peli donde un detective comienza a hacer zoom con el ordenador sobre una foto hasta que se ven 4 pixeles gigantes y de repente esos 4 pixeles se arreglan mágicamente y sale la imagen de un sospechoso? A mi me pone de los nervios que hagan eso en una película seria, porque es imposible hacer un zoom infinito digital a partir de un bitmap; de lo contrario los satélites de USA podrían vernos hasta la caspa y el tito Bin Laden estaría ya capturado. Incluso en CSI, una serie donde todas las investigaciones se basan según ellos en el método científico, hay algunos capítulos donde se ha usado el típico “zoom mágico de película” (Como lo llamo yo) para encontrar sospechosos. Veamos un ejemplo clásico de Zoom mágico de película:

  
Tranquilo Grisom que ya tenemos la foto de satélite, esto se arregla con un par de Zooms!
(Por ahora todo normal, ahora viene el Zoom de peli que arregla los cuatro pixeles del final)

  

¡¡Aiba la ostia, está echado a la bartola mirando al satélite !! (Sonrisita típica de Grisom)
(Aquí tenéis el ejemplo clásico de Zoom de peli imposible de realizar)

Esto, evidentemente no se puede hacer, si pensáis que sí que se puede intentadlo xD. Pero yo creo que a partir de la tercera foto del ejemplo se ve claro que tenemos muy poca información de la cual es imposible sacar nada. Vamos a ver algunas de las técnicas más avanzadas que existen hoy en día para restaurar fotos que seguramente vendrán como filtros en las próximas de versiones de Photoshop, Gimp, Photopaint, y similares. Al final veremos un intento avanzado para realizar un Zoom de película. Toda la información está sacada de una tesis de un francés que me pasó mi compañero de carrera Mariano.

En esta tesis se utilizan técnicas para generar vectores de información de la imagen, de esta forma, si falta información (píxeles fallidos), ésta se puede generar a partir de los vectores circundantes. Veamos un ejemplo práctico donde en el ojo izquierdo existe ruido y en el ojo derecho se ha eliminado.

Aquí no hay ninguna magia, simplemente se “inventa” la información de los píxeles fallidos (Ruido) a partir de los píxeles circundantes con técnicas avanzadas. Por ejemplo, si todos los píxeles de la zona son rojos y aparece uno verde, lo más normal es que éste sea rojo también. Los típicos filtros para eliminar ruido utilizan técnicas similares.

Diréis que esto no es nada nuevo, pero la siguiente secuencia de imágenes es realmente impresionante. Vemos como utiliza sus técnicas de eliminación de ruido para eliminar trozos grandes de imágen que no desea.

  

Tampoco hace magia, fijaros que utiliza una máscara para indicarle al programa las zonas que no desea. Después el algoritmo rellenar las zonas de la máscara con la información más adecuada.

Finalmente veamos como INTENTA utilizar las técnicas de su tesis para hacer un Zoom de película. Para que no le quede muy mal utiliza imágenes de una película de dibujos animados

 

Fijaros que se ha conseguido eliminar la pixelación consecuencia del Zoom pero la imagen queda algo difusa. Usando un sistema como el de CSI habríamos conseguido una imágen final totalmente nítica 😉

Os recomiendo que visitéis la web donde vienen todas las imágenes.


Lógica Difusa – Fuzzy Logic

El post es un poco duro pero si leéis todo el artículo seguro que aprendéis cosas nuevas.

Hasta el siglo XX la lógica clásica se trabajaba con dos valores: Verdadero (1) o Falso (0). Pero durante el último siglo se comenzaron a crear nuevas lógicas que incorporaban más valores de certeza, por ejemplo la lógica de Lukasiewicz incorpora un nuevo valor, el de Medio Verdadero o Medio Falso según se vea. De esta forma ya tenemos tres valores (Estas lógicas se suelen llamar trivalentes) : Verdadero (1), Medio Verdadero (0.5) o Falso (0). Lo primera primera idea que nos viene a la cabeza es la seguir creando nuevos valores de verdad como vemos en la imagen donde ya tenemos 5 valores de verdad. Por ejemplo si una cosa sabemos casi seguro que es verdadera le asignaríamos el valor de verdad 0.75.

Si extendemos la idea a infinitos valores entre el 0 y el 1 hemos descubierto la Lógica Difusa. ¿Y para que coño sirve esta paranoia mental? Eso mismo pensaba la comunidad científica a mediados del siglo pasado, nadie apostaba un duro por la la Lógica Difursa. Pero llegaron los japoneses (Años 70) y le dieron utilidades prácticas que se usan hoy en día en todo el mundo. La primera aplicación práctica que le dieron fue la de frenar electrónicamente y con suavidad el Shinkansen (Tren bala) japonés.

Para frenar un coche normalmente vamos soltando el acelerador suavemente mientras frenamos suavemente calculando nosotros intuitivamente los que tardaremos en frenar etc, pero no solemos apretar el freno a fondo para frenar. Para hacer un programa que frenara un coche o un tren de forma automática lo primero que podríamos hacer sería: if(quieroParar) frenar(); . Esto haría que se frenara a lo bestia. Una mejora sería if(quieroParar & Velocidad_Alta) frenar_hasta_la_mitad(); else if(quieroParar & !VelocidadAlta) frenar_a_tope(). Si siguieramos introduciendo ifs hasta el infinito creando nuevos valores de Velocidad (Al igual que hacíamos al principio del artículo con los valores de Verdadero,MedioVerdadero, Falso etc) conseguiríamos un sistema fuzzy pero sería una chapuza. El ejemplo anterior es simplemente para que veais que frenar suavemente un tren de forma programada no es tan sencillo como podamos pensar a primera vista.

Veamos como hay que proceder para implementar un buen sistema fuzzy. Tener en cuenta que a partir de ahora trabajamos con números reales, es decir, entre el 100 y el 75 hay más valores, etc…


El eje vertical indica el valor de verdad de cada velocidad. El eje horizontal la velocidad.

En vez de explicar este esquema detenidamente, lo vamos a ver con un ejemplo práctico. Imaginaros que el tren viaja a 77km/h, operaríamos de la siguiente forma:

Buscamos en el eje horizontal la velocidad a la que vamos (77) y trazamos una vertical marcando las intersecciones con los triángulos. A partir de las intersecciones tomamos su valor de verdad mirando el eje vertical. En este caso tenemos dos intersecciones, la primera intersecta con el triángulo de Velocidad Media a una altura de 0.20 (Lo vemos en el eje vertical), la segunda intersección corta con el triángulo de Velocidad Alta a una altura de 0.45. Por lo tanto la consideración del sistema es que si vamos a 77 Km/h nuestra velocidad es 0.2 Media y 0.45 Alta. Es decir, hemos conseguido que el sistema tenga una estimación ‘difusa’ de la velocidad actual. Probad a sustituir otros valores de velocidad y veréis como lo que se obtiene tiene bastante sentido, si ponemos por ejemplo 98km/h saldrá un valor de 0.90 Alta etc.

Veis como hemos conseguido que el sistema pueda saber en cada momento una consideración sobre la velocidad que llevamos. A partir de los valores obtenidos se puede tomar ya una decisión sobre cuanto hay que pulsar el freno (Para explicar esto necesitaría unos cuantos posts ya que habría que crear otro esquema como el anterior para los valores del freno y combinarlo todo). Lo importante se que os quedéis con la idea de que al tener muchos valores entre Verdadero(Velocidad Alta) y Falso (Velocidad Lenta) podemos conseguir frenar de forma suave.

Si quisieramos tener un sistema más preciso (que frenara más suavemente) podríamos crear más triángulos que indicarna Velocidad Muy Alta, Velocidad Muy baja etc. Veamos un ejemplo para el diseño de un sistema de aire acondicionado. Con un aire acondicionado si queremos ahorrar energía y que los cambios de temperatura no sean muy bruscos se puede usar un sistema fuzzy para regular de forma automática su funcionamiento. Si programamos el aire acondicionado con if(temperatura>18) enfriar(); else calentar(); gastaremos mucha energía ya que estaremos continuamente pasando a más de 18 grados y después a menos de 18 grados, necesitamos un sistema fuzzy 😉 Veamos como sería el esquema fuzzy de un sistema de aire acondicionado:


Supongo que con este esquema ya habréis pillado la idea, o quizás os he liado más.

Finalmente os muestro algunas aplicaciones prácticas además de las ya comentadas. Entre paréntesis pongo una pregunta para que veáis el porqué se usa un sistema fuzzy en estros aparatos.

Hoy en día los sistemas de lógica difusa están en las camaras de fotos para calcular si llega mucha o poca luz al diafragma (¿Poca, bastante, mucha luz?), en robots para que se muevan con suavidad (¿Velocidad del brazo Alta, Baja?), en sistemas de piloto automático y ontrol de aviones (¿Altura del avión Baja, Alta, Muy Alta?) o por ejemplo el sistema que acaba de sacar Toyota para aparcar automáticamente el coche (¿Cerca, Lejos, Muy Cerca, Muy Lejos del bordillo?.

Después de este artículo tan duro si algo no está bien explicado, hay alguna inconsistencia o no os habéis enterado de nada avisad.


Equipo de fúbtol robótico

Impresionantes los vídeos que he encontrado en una web de la universidad de Osaka donde se ven robots humanoides manejado pelotas con una agilidad increíble. Fijaros como se coordinan todas las articulaciones del robot para mantener el equilibrio, para conseguirlo seguramente lleven un sistema fuzzy que se encarga de mantener la estabilidad del sistema. Explicaremos lo que es un sistema fuzzy más adelante 🙂


Thomas Bayes

Leyendo un artículo en Minid en el que comenta que Mozilla incorpora un Filtro Bayesiano para filtrar el spam he recordado la impresionante labor de Thomas Bayes. Un matemático inglés que vivió desde 1702 hasta 1761, y desarrollo los fundamentos de la teoría probabilística a la cual hoy en día se le siguen obteniendo nuevas utilizadades.

Thomas Bayes presentó un ensayo sobre la teoría de la probabilidad y su famoso teorema a la Royal Society que se publicó en 1764. Tuvo un gran impacto en la época y de hecho Condorcet (Otro matemático) hizo descubrimientos parecidos sin conocer los textos de Bayes.

Pero realmente cuando más utilidad práctica se le está encontrando es en nuestros días de la era de la información. Sus herramientas matemáticas las usan los físicos con su mecánica cuántica, los telecos con sus señales, control de tráfico en redes etc. Y los informáticos lo usamos cada día sin darnos cuenta, cuando usamos google están actuando Bayes, cuando usamos nuestra cámara digital también actua Bayes, cuando usamos traductores automáticos, el diccionario de nuestro teléfono móvil, los filtros para el spam de nuestro lector de correo electrónico. En tareas de investigación se usa en visión artificial, sistemas expertos, reconocimiento de lenguaje natural etc.

Básicamente para hacer un filtro de spam lo que haríamos de forma directa sería mirar ciertas palabras que aparecen en los típicos correos basura, apuntarlas, y luego mirar si en cierto mail aparece o no la palabra. Esta técnica es un poco arriesgada porque eliminaría muchos mails que no fueran spam. Gracias a la probabilidad de Bayes, podemos utilizar probabilidades condicionadas, es decir podemos tener en cuenta también el contexto de una palabra. De esta forma un filtro hecho a lo “bestia” eliminaría todos los mails que tengan la palabra “sexo”, esto podría cargarse algunos mails que no fueran de spam. Con un filtro Bayesiano tendríamos en cuenta el contexto por lo que vemos las cadenas en general, por ejemplo “mucho sexo gratis”. Al ver esto el filtro bayesiano ve que la probabilidad de que un mail sea de spam conteniendo la palabra “gratis” condicionado a que esté la palabra “sexo” antes es muy alta y descartará el e-mail.

Otra ventaja de los filtros Bayesianos es que se pueden implementar como algoritmos incrementales. Esto quiere decir que va “aprendiendo” de nuestros gustos, va viendo que mails eliminamos como spam y cuales no para mejorar sus decisiones futuras.

¿No es increíble que Thomas Bayes se avanzara tanto a sus tiempos? ¿Que pensaría Bayes si le dijeramos que sus descubrimientos se están utilizando para eliminar correo basura?