Cómo resolver el juego Semantris de Google usando OpenCV y Word2Vec

Escribiendo un programa para jugar Google Semantris

La automatización es buena, siempre que sepa exactamente dónde colocar la máquina. - Eliyahu GoldrattSemantris es un conjunto de juegos de asociación de palabras de Google que utilizan la búsqueda semántica para predecir una palabra relevante en el juego basándose en la entrada del jugador.

Hay 2 modos disponibles en el juego.

ARCADA

El modo arcade requiere que el jugador cree palabras asociadas para ciertas palabras. Se supone que debe pensar e ingresar lo más rápido que pueda antes de que una lista cada vez mayor de palabras llene su pantalla.

BLOQUES

Blocks es un modo de juego por turnos. Puedes tomarte tu tiempo para encontrar diferentes tipos de pistas y ver cuáles entiende mejor el juego.

Después de jugar un rato, me di cuenta de que ambos modos de juego utilizan el reconocimiento de patrones como mecanismo principal de juego. Fue entonces cuando comencé a preguntarme si podría automatizarse.

Resulta que puede ser

Semantris-Solver utiliza el siguiente procedimiento para jugar:

  • Capture el estado actual del juego utilizando técnicas de visión por computadora
  • Identifique la palabra que debe ingresar para obtener una mayor recompensa / un juego más largo
  • Encuentre la palabra asociada usando incrustaciones de palabras

En las siguientes secciones, vamos a sumergirnos en el funcionamiento de Semantris-Solver para ambos modos de juego.

ARCADA

Un jugador humano usará los siguientes movimientos para jugar el modo arcade:

  • Encuentra una o más palabras resaltadas en el juego.
  • Obtenga estas palabras en el área resaltada ingresando la palabra asociada para ellas
  • Siga haciendo esto antes de quedarse sin espacio en su pantalla para palabras nuevas
Además, hay tres tipos de colores de tema en el modo arcade.

Te darás cuenta de que el color del tema no juega ningún papel aquí; el mecanismo de juego seguirá siendo el mismo si cambiamos el color del tema. Lo que cambia es la definición de la palabra resaltada.

Una palabra se resalta si tiene una forma de puntero a la izquierda, (▶ Enviar ) en este caso.

Conversión de espacio de color

El modo ARCADE de Semantris-Solver comienza con la captura de una captura de pantalla de la pantalla del portátil y la convierte en una imagen en escala de grises, independiente del color real.

Comparación de plantillas

Nuestro siguiente paso será encontrar la palabra resaltada en la imagen capturada. OpenCV proporciona un método llamado Coincidencia de plantillas para buscar y encontrar la ubicación de una imagen de plantilla en una imagen más grande.

Usaremos una versión recortada de la forma del puntero (▶) como imagen de plantilla, para encontrar su ubicación en la pantalla capturada.

Reconocimiento óptico de caracteres (OCR)

Según la ubicación del puntero, se recorta una sección junto a ella, con la palabra resaltada.

La imagen recortada se convierte en texto usando Tesseract OCR; en este caso, nos dará Ship .

En caso de que haya más de una palabra resaltada, se ingresan una tras otra para mantener el juego en movimiento.

Selección de palabras asociadas (usando incrustaciones de palabras)

Word2Vec previamente entrenado en el corpus de Google News se utiliza como un modelo de inserción de palabras para encontrar las palabras más similares (asociadas) para una palabra determinada.

En este caso, devolverá " buque" para ingresar como palabra asociada para " buque" ( después de eliminar palabras morfológicamente similares ).

El programa ingresará esta palabra asociada y capturará la pantalla del juego actualizada para continuar.

BLOQUES

En este modo, hay bloques de palabras con cuatro colores posibles para un tema determinado. Los bloques de palabras pueden contener o no una palabra en ellos.

Al ingresar la palabra asociada para un bloque de palabras, se eliminarán los bloques del mismo color conectados a él, como el viejo Tetris .

Un jugador humano usará los siguientes movimientos para jugar el modo arcade:

  • Ingrese la palabra asociada para un bloque de palabras, conectado con la mayoría de los bloques de palabras del mismo color (si es posible)
  • Siga haciendo esto antes de quedarse sin espacio en su pantalla para palabras nuevas

Te darás cuenta de que el color de un bloque de palabras juega un papel importante esta vez. Deberá ingresar la palabra asociada para un bloque de palabras conectado con más bloques del mismo color para obtener puntos más altos.

Además de esto, hay tres tipos de colores de tema en el modo de bloques.

Generación de paleta de colores

Esta vez no podemos convertir la imagen capturada a su versión en escala de grises. Necesitamos conocer los atributos de color para poder distinguir entre diferentes bloques de palabras.

La ejecución de la agrupación de K-mean en los píxeles de la pantalla capturada nos dará todos los colores prominentes en la imagen después de excluir los colores de fondo como blanco (color de texto), negro (color de fondo) y gris (entrada de texto).

Detección de contornos

Ahora que tenemos los cuatro colores en el tema actual, necesitamos saber qué bloque de palabras elegir para obtener el máximo de puntos.

En otras palabras, si calculamos el área de cada grupo de bloques de palabras conectadas ( bloques de palabras del mismo color conectados entre sí ) y seleccionamos el que tiene el área máxima, obtendremos el bloque de palabras conectadas deseado. -grupo.

El contorno es una curva que une todos los puntos continuos a lo largo de un límite, teniendo el mismo color o intensidad.

Un grupo de bloques de palabras puede considerarse un contorno de ese color; si está conectado a más bloques con el mismo color, el área del contorno será la suma de los bloques de palabras conectados.

Los contornos se calculan (usando la función findCountours de OpenCV) para todos los colores del bloque de palabras por separado y se selecciona el que tiene el área máxima.

Podemos seleccionar el contorno de área máxima haciendo una operación bit a bit-and entre la pantalla capturada y la máscara de contorno.

Detección de palabras (usando Tesseract y Word2Vec)

La imagen del contorno se convierte en texto usando Tesseract OCR; en este caso, nos dará Jardín .

Al igual que en el modo arcade, usaremos Word2Vec para encontrar la palabra más similar, que será macizos de flores esta vez.

Mejoras

En ciertos escenarios, el proceso actual de OCR no reconoce la palabra correctamente.

Por ejemplo, devolvería " Eloctrlclty" para este contorno en lugar de " Electricidad" .

Dado que es una sugerencia de palabra no válida, el modelo Word2Vec no devolverá ninguna palabra similar. En ese caso, la palabra sugerida en sí se ingresa como una palabra asociada, solo para mantener el juego en movimiento.

Un modelo de corrección ortográfica puede ayudar aquí, corrigiendo Eloctrlclty a Electricity. He creado un problema en el repositorio de GitHub para el mismo, siéntase libre de contribuir si lo desea. ?

Código fuente

Semantris-Solver (GitHub)

Está implementado como una herramienta CLI que te permite cambiar entre los modos de juego. Puede consultar los cuadernos de IPython que implementan ambos modos.

  • Modo arcade
  • Modo BLOQUES

Dependencias

No fue posible construir Semantris-Solver sin las siguientes herramientas de software.

  • OpenCV
  • Word2Vec (gensim)
  • pyautogui (tomar la captura de pantalla e ingresar palabras asociadas)
  • Tesseract (OCR)

Espero que les haya gustado mi historia de trucos de fin de semana. No dude en enviarnos sus comentarios.

Sígueme en Twitter Pravendra Singh o consulta mi sitio web personal hackpravj.com.