martes, 30 de junio de 2015

Un bot para el juego Eye-Test (II)

Y el golpe de inspiración llegó. ¿Y cómo? Gracias al método de escritura personal descrito en el libro "Escritura y Creatividad" de Mark Levy Parecía difícil encontrar una solución tal como había enfocado el problema, pero la solución llegó. Este fue el pensamiento que me llevó a ella:
El problema esta en esos píxeles de distinto color Si fuera únicamente de dos colores no habría problema, perto asdi si. Este enfoque FSE basada en histogramas en contar colores y elegir uno. Una solución seria filtrar las imagen inicial y tranafoirmarla a 2 o 3 colores. Pero tampoco valfderia el problema gordo esta en los píxeles de las fronteras. Tal vez haciendo un muestreo se podría solucionar, o cambiando los colores. Asignando a un píxel el color de su izquierda.. No porque se desplazarían al final Eso no vale que más podríamos hacer....... Más más a ver.... Una transformación previa Esa creó que seguía la solución Un preprocesado. Eliminar de alguna manera los bordes, pero como identificarlos... Tal vez aplicando un filtro de detección de bordes y luego poniéndolos blancos Esa parece una buena solución y año mejor se puede implementar
(lo escribí del tirón y sin mirar la pantalla, por eso hay tantos errores)

Sí, la clave estaba en la detección de los bordes. Un preprocesamiento previo, un filtrado de la imagen, que me hiciera deshacerme de ese degradado de los bordes. Si luego sustituía los pixels de la imagen original por los bordes que había detectado me quedarían solo los colores en cuestión, sin degradados. Esa fue la solución que he implementado y que ha funcionado.

Bordes detectados


Borde sustraido de la imagen original

Como podéis ver en el siguiente vídeo ahora el robot es capaz de llegar a cualquier puntuación. Lo configuré solo para que llegara a 300 puntos pero podía haber estado infinito.



Os dejo con el código del programa implementado en Python. 

domingo, 28 de junio de 2015

Un bot para el juego Eye-Test

Todo surgió a raíz de conocer un juego de agudeza visual. Consistía en identificar en una matriz la celda de distinto color. Al principio era bastante fácil pero a medida que avanzabas de nivel el juego se iba complicando. La diferencia de tonalidad iban siendo mínimas.


Tras probarlo logré llegar a una puntuación de 30. Según el juego llegué a la categoría de robot. 




Entonces me imaginé a un robot jugando a ese juego. ¿Que puntuación conseguiría? Pero un momento.. tal vez podría comprobarlo. Sería un experimento divertido. Tal vez podría hacer un programa que jugara una partida a ese juego. A priori no parecía complicado. Tan solo necesitaba saber como leer el color de un pixel de la pantalla y simular un click de ratón. Estuve investigando y vi que era fácilmente implementable en Python, mi lenguaje de programación favorito. Así que manos a la obra. Empecé a desarrollar el programa y a hacer pruebas. 

La primera aproximación ha sido leer todos los pixels de la matriz y ver el color de cada uno. Posteriormente, eliminar los que son de color blanco quedándome con el resto. Por tanto, el color objetivo sería el segundo que más pixels tuviera. Es decir, esta solución estaría basada en un histograma de colores
Parecía una solución infalible, hasta que me he topado con un problema del que me va a costar salir con este enfoque basado en un histograma. Si hacemos zoom en los bordes de los recuadros veremos que en ellos hay un pequeño degradado. Es decir, hay pixels de varias tonalidades del color principal del recuadro. A medida que estos se van haciendo más pequeños por ir pasando de nivel, estos pixels van siendo más numerosos que los que forman los del recuadro objetivo, por lo que llega un momento que el segundo más numeroso ya no es el correspondiente al color objetivo. 



Una solución para poder avanzar algo más en la puntuación ha sido seleccionar el 3º color más numeroso cuando se pasa de N iteraciones. Con este pequeño parche he conseguido que llegue a una puntuación de 42 puntos, algo ya muy respetable y que costaría alcanzar para un humano.


Seguiremos pensando a ver hasta donde puede llegar el robot.

sábado, 13 de junio de 2015

Más sobre el aprovechamiento de la lectura

Hace unas semanas descubrí por casualidad una herramienta que estoy usando para la toma de notas de los libros que voy leyendo. Su autor, Dave Seah la denomina "The Fast Book Outliner" No es una aplicación para Android ni para iPad. Es mucho más sofisticada... Es simplemente una página con renglones numerados. La herramienta es un PDF listo para imprimir y montar una libreta si así lo deseas (eso fue lo que hice yo). 


La particularidad de la herramienta reside en la numeración de los renglones, que te permite apuntar las ideas en las zonas correspondientes donde se encuentran en el libro. Por lo tanto, una vez que hayas acabado la lectura tendrás un "mapa del libro" con las ideas más importantes (o lo que tu hayas considerado más importante). Encontrar esas ideas luego será muy fácil. Bastará con ver el renglón donde la apuntaste y trasladarte a la página correspondiente. 

El autor tiene muchas más herramientas de productividad y gestión personal en su web. Os recomiendo que le echéis un vistazo. 

 ¡Hasta la próxima!