📜  Google Chrome Dino Bot 使用图像识别 | Python

📅  最后修改于: 2022-05-13 01:54:42.905000             🧑  作者: Mango

Google Chrome Dino Bot 使用图像识别 | Python

没有互联网连接时,您会在 Chrome 浏览器中看到什么?是的,每个人都知道屏幕上出现的恐龙游戏。因此,在本文中,我们将构建一个无需用户交互即可玩 Chrome Dino 游戏的简单Python机器人。在这里,我们没有使用任何机器学习或人工智能来解决这个问题,但我们将使用简单的图像/屏幕处理。

我们将使用 Pyautogui 和 PIL (Python Imaging Library) 来实现。这个项目非常基础,只有大约 50 行代码,但它的结果会让你大吃一惊。
使用的一些库是:

  1. PIL : Python Imaging Library (PIL) 是Python编程语言的免费库,增加了对打开、操作和保存许多不同图像文件格式的支持。
  2. Pyautogui: PyAutoGUI 是一个Python模块,用于以编程方式控制鼠标和键盘,无需任何用户交互。
  3. Time : Python “时间”模块,它允许我们处理有关时间、其转换和表示的各种操作,这些操作在生活中的各种应用程序中都有使用。
  4. Numpy : NumPy 是Python编程语言的库,增加了对大型多维数组和矩阵的支持,以及对这些数组进行操作的大量高级数学函数。

算法 -

  1. 使用“replaybutton”坐标使用 Pyautogui 库单击重新启动按钮。
  2. 计算出现在 Dinosaur 前面的框中的所有白色像素值的总和。
  3. 如果方框中任何时候出现的像素值总和小于白色像素值的总和,则意味着“灌木”或“鸟”即将到来。所以我们要么让我们的 Dino 跳,要么弯下腰。
  4. 为了保护迪诺免受“布什”的伤害,我们进行了一次跳跃。
  5. 为了保护 Dino 免受“鸟”的伤害,我们始终保持 Dino 的安全。

下面是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)


输出 :

改进:一段时间后,Dino Bot Game 变得很快。鸟儿和灌木丛开始飞得很快。所以我们不是让我们的机器人去学习所有这些东西,而是根据过去的学习来改变它的速度。所以我们的机器人将在 2000 分左右函数。为了得分更高,我们必须应用机器学习和人工智能。