¡Hemos creado un robot para resolver palabras! De hecho, solo estoy usando mi impresora 3D como robot y una RaspberryPi para el cerebro. Como de costumbre, estamos patrocinados por PCBWay: tengo un montón de PCB en camino para nuestro próximo proyecto, así que consulte su enlace en la descripción. Vamos a sumergirnos en cómo funciona el robot. Tenemos varios desafíos que resolver: Primero, necesitamos ubicar la pantalla del teléfono. Una vez que tenemos la ubicación de la pantalla, sabemos dónde están las casillas y sabemos dónde está cada tecla del teclado en la imagen. Nuestro próximo desafío es averiguar dónde está la cama de la impresora. Si sabemos dónde está la cama de la impresora y sabemos dónde está la pantalla del teléfono, podemos decirle al robot las coordenadas que necesita para ingresar conjeturas en el teclado del teléfono. Una vez que se ha ingresado una conjetura, debemos averiguar de qué color son los cuadros para las letras que hemos ingresado. Con estos colores encontrados, necesitamos refinar nuestras conjeturas hasta que lleguemos a la respuesta correcta. Hemos hecho un proyecto similar a este antes con nuestro solucionador de Sudoku de realidad aumentada. He puesto un enlace a ese video en la descripción y al final de este video. Definitivamente vale la pena verlo. Comencemos con el primer desafío: ¿cómo ubicamos la pantalla del teléfono? Configuré mi Wordle en modo de luz, por lo que sé que la pantalla debe ser bastante brillante. Todavía no nos importa el color de la pantalla del teléfono, por lo que podemos convertir nuestra imagen a escala de grises. El objeto más brillante de la imagen debe ser el teléfono, por lo que aplicamos un umbral simple a cada píxel de la imagen. Esto nos da gotas de píxeles que podrían ser el teléfono. Examinamos cada una de estas manchas y creamos un rectángulo que se aproxima a la forma. Luego filtramos cualquier forma que tenga una relación de aspecto incorrecta o que sea demasiado pequeña. El más grande que queda debería ser la pantalla del teléfono. Como conocemos el tamaño de la pantalla del teléfono y ahora tenemos las esquinas de la pantalla en la imagen, tenemos suficiente información para crear una transformación de puntos en la pantalla del teléfono a puntos en la imagen. Esta transformación nos permite ubicar dónde están los cuadros de cuadrícula y las teclas del teclado en la imagen. Encontrar la cama de la impresora es un poco más complicado. La cama de la impresora es negra y hay bastante negro en la imagen de la estructura de la impresora y la base de la impresora. Para ayudarnos un poco, he agregado algunos puntos de colores a la cama de impresión. Hay un buen truco que puedes hacer si estás tratando de encontrar objetos de un color particular en una imagen. Normalmente, cuando se trata de imágenes en color, cada píxel está representado por tres números que representan la intensidad de los componentes rojo, verde y azul del color. He puesto una imagen de muestra aquí con estos tres componentes separados. La mezcla de estos tres componentes da todos los diferentes colores de la imagen. Sin embargo, existen otras formas de representar un color. Una buena opción cuando se trata de segmentar colores en una imagen es convertir los píxeles a colores HSV. Los colores HSV también contienen 3 valores: la H o tono es el ángulo del color alrededor de la rueda de colores, la saturación es la intensidad del color, 0 % significa que no hay color, 100 % significa a todo color. Y el valor es cuán brillante es el color. Con la imagen en colores HSV, es bastante sencillo filtrar los píxeles que no sean nuestros puntos morados. Simplemente buscamos píxeles con valores de tono que estén en el rango correcto y filtramos cualquier píxel que sea demasiado oscuro o no esté lo suficientemente saturado. Ahora que hemos ubicado nuestra cama de impresora en la imagen, podemos crear un mapeo desde la imagen hasta las ubicaciones de la cama de impresora. Ahora sabemos cómo mapear desde las coordenadas en la pantalla del teléfono hasta las coordenadas en la imagen. Y podemos mapear desde coordenadas en la imagen hasta coordenadas en la cama de la impresora. Esto nos permite decirle a la impresora adónde moverse para que pueda tocar las teclas del teclado y aprovechar nuestras conjeturas. Con nuestra suposición ingresada, ahora necesitamos saber de qué color es cada letra en la cuadrícula. Para hacer esto, podemos usar la misma técnica que usamos para encontrar los puntos de la cama de la impresora. Esta vez buscamos los colores verde y naranja. Aquí hay una imagen de muestra con algunas conjeturas rellenadas. Y aquí está la imagen filtrada para píxeles verdes y la imagen filtrada para píxeles naranjas. Como conocemos la ubicación de cada cuadrado de la cuadrícula en la imagen, solo necesitamos contar cuántos píxeles verdes y naranjas hay y eso nos dirá de qué color es el cuadro. Si no hay suficientes píxeles verdes o naranjas en el cuadro, sabemos que no hay color allí. Entonces, ahora podemos ingresar conjeturas y podemos ver qué tan buenas son nuestras conjeturas. ¿Cómo elegimos realmente las mejores palabras para adivinar? Ha habido mucha investigación sobre qué palabra es la mejor suposición inicial. He vinculado a un par de estos en la descripción. Según el canal 3Blue1Brown, la mejor palabra es "salet", que aparentemente es "un casco ligero y redondo que se extiende sobre la nuca". Mis propias palabras principales que encontré al experimentar son estas, pero no soy un experto en teoría de la información, así que haga su propia investigación y mire los videos a los que me vinculé. Cada vez que adivinamos, recibimos retroalimentación de wordle sobre las letras que no están en la palabra, las letras que están en la palabra pero en la posición incorrecta y las letras que están en la palabra pero en la posición correcta. Del código fuente de Wordle, podemos extraer todas las palabras posibles que aceptará como suposición: hay casi 13,000 en total. Cada vez que hacemos una conjetura, usamos los comentarios de wordle para filtrar esta lista para que solo contenga las palabras posibles. Puedes ver que esto sucede aquí. Cada vez que adivinamos se reduce el número de palabras posibles. Codifiqué la primera suposición que hace el robot para que sea una de las cinco primeras suposiciones. Para las conjeturas posteriores, podemos mirar todas las palabras posibles que quedan y elegir la palabra que, en promedio, nos dé el menor número de conjeturas de seguimiento. El procesamiento y la resolución de imágenes funcionan muy bien, tenemos un entorno controlado bastante agradable, por lo que es de esperar que este sea el caso. Si te gusta este tipo de proyecto, definitivamente deberías echar un vistazo a mi solucionador de Sudoku de realidad aumentada: procesa mucho más imágenes e incluso utiliza algo de aprendizaje automático. Gracias por mirar y nos vemos en el próximo video.