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.

0 comentarios:

Publicar un comentario