Google Chrome Dino Bot usando el reconocimiento de imágenes | Python

¿Qué verías en tu navegador Chrome cuando no hay conexión a Internet? Sí, todo el mundo conoce ese juego de dinosaurios que sale en pantalla. Entonces, en este artículo, vamos a construir un bot de python simple que juegue Chrome Dino Game sin la interacción del usuario. Aquí no estamos usando ningún aprendizaje automático o inteligencia artificial para contrarrestar este problema, pero usaremos un procesamiento simple de imagen/pantalla. 
 

Trabajaremos con Pyautogui y PIL (Python Imaging Library) para la implementación. Este proyecto es muy básico y consta tan solo de unas 50 líneas de código pero su resultado te sorprenderá. 
Algunas bibliotecas utilizadas son: 

  1. PIL: Python Imaging Library (PIL) es una biblioteca gratuita para el lenguaje de programación Python que agrega soporte para abrir, manipular y guardar muchos formatos de archivo de imagen diferentes. 
     
  2. Pyautogui: PyAutoGUI es un módulo de Python para controlar mediante programación el mouse y el teclado sin ninguna interacción del usuario.
  3. Tiempo: módulo Python «Tiempo» que nos permite manejar varias operaciones con respecto al tiempo, sus conversiones y representaciones, que encuentran su uso en varias aplicaciones en la vida.
  4. Numpy: NumPy es una biblioteca para el lenguaje de programación Python, que agrega soporte para arreglos y arrays grandes y multidimensionales, junto con una gran colección de funciones matemáticas de alto nivel para operar en estos arreglos.

Algoritmo – 

  1. Haga clic en el botón de reinicio usando la biblioteca Pyautogui usando las coordenadas del «botón de reproducción».
  2. Calcule la suma de todos los valores de píxeles blancos presentes en el cuadro frente a Dinosaurio.
  3. Si la suma de los valores de los píxeles presentes en cualquier momento en el cuadro se vuelve menor que la suma de los valores de los píxeles blancos, significa que se acerca un «arbusto» o un «pájaro». Así que tenemos que hacer que nuestro Dino salte o se agache.
  4. Para proteger a Dino de “Bush”, damos un salto.
  5. Para proteger a Dino de «Bird», siempre mantenemos a nuestro Dino abajo.

A continuación se muestra la implementación de Python: 

Python3

# importing above defined libraries to
# implement the functionalities
from PIL import ImageGrab, ImageOps
import pyautogui
import time
import numpy as np 
   
class coordinates():
 
    # coordinates of replay button to start the game
    replaybutton =(360, 214)
    # this coordinates represent the top-right coordinates
    # that will be used to define the front box
    dinasaur = (149, 239 )
     
def restartGame():
 
    # using pyautogui library, we are clicking on the
    # replay button without any user interaction
    pyautogui.click(coordinates.replaybutton)
 
    # we will keep our Bot always down that
    # will prevent him to get hit by bird
    pyautogui.keyDown('down')
 
def press_space():
  
    # releasing the Down Key
    pyautogui.keyUp('down')
 
    # pressing Space to overcome Bush
    pyautogui.keyDown('space')
 
    # so that Space Key will be recognized easily
    time.sleep(0.05)
 
    # printing the "Jump" statement on the
    # terminal to see the current output
    print("jump")
    time.sleep(0.10)
 
    # releasing the Space Key
    pyautogui.keyUp('space')
 
    # again pressing the Down Key to keep my Bot always down
    pyautogui.keyDown('down')
 
def imageGrab():
    # defining the coordinates of box in front of dinosaur
    box = (coordinates.dinasaur[0]+30, coordinates.dinasaur[1],
           coordinates.dinasaur[0]+120, coordinates.dinasaur[1]+2)
 
    # grabbing all the pixels values in form of RGB tuples  
    image = ImageGrab.grab(box)
 
    # converting RGB to Grayscale to
    # make processing easy and result faster
    grayImage = ImageOps.grayscale(image)
 
    # using numpy to get sum of all grayscale pixels
    a = np.array(grayImage.getcolors())
 
    # returning the sum
    print(a.sum())
    return a.sum()
   
    
 
# function to restart the game
restartGame()
while True:
     # 435 is the sum of white pixels values of box.
     # You may get different value is you are taking bigger
     # or smaller box than the box taken in this article.
     # if value returned by "imageGrab" function is not equal to 435,
     # it means either bird or bush is coming towards dinosaur
     if(imageGrab()!= 435):  
        press_space() 
        # time to recognize the operation performed by above function
        time.sleep(0.1)  

Producción : 

Mejoras: Con el tiempo, el juego Dino Bot se vuelve rápido. Los pájaros y los arbustos empiezan a llegar muy rápido. Por lo tanto, no estamos haciendo que nuestro Bot aprenda todas estas cosas, cambiando su velocidad en función del aprendizaje anterior. Entonces nuestro bot funcionará por alrededor de 2000 puntos. Para obtener más puntos, tenemos que aplicar el aprendizaje automático y la inteligencia artificial. 

Publicación traducida automáticamente

Artículo escrito por Vidhayak_Chacha y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *