我正在尝试通过Python使用自动化钢琴游戏,但是当我想要实现代码时,我得到了一个错误,如所附图片中所示请帮助我修复此错误,我使用** Python 3.8.4 **
*<!-- The Code -->*
import mss as mss
import numpy as np
from cv2 import cv2
import time
import pyautogui
import keyboard
pyautogui.PAUSE = 0.005
def take_screenshot():
with mss.mss() as sct:
filename = sct.shot(output="fullscreen.png")
return filename
# take_screenshot()
def get_frame(region):
with mss.mss() as sct:
screen = np.array(sct.grab(region))
screen_grayscale = cv2.cvtColor(screen, cv2.COLOR_BGR2BGRA)
# print(screen_grayscale.shape)
# cv2.imwrite('region.png', screen_grayscale)
return screen_grayscale
def detect_tiles(frame):
for x in range(frame.shape[0]):
for y in range(frame.shape[1]):
if frame[x, y] == 1:
return x, y
return None
region = {"top": 560, "left": 350, "width": 300, "height": 2}
time.sleep(3)
while True:
if keyboard.is_pressed('q'):
break
start_time = time.time()
frame = get_frame(region)
coors = detect_tiles(frame)
if coors:
target_x = region['left'] + coors[1] + 1
target_y = region['top'] + coors[0] + 1
pyautogui.moveTo(x=target_x, y=target_y)
pyautogui.mouseDown()
print("%d FPS" % (1 / (time.time() - start_time)))
*<!-- end code -->*我的错误图像:

发布于 2021-03-27 21:30:47
您的问题似乎源于framex,y不是单个值,而是值的列表或元组。因此,当您执行if frame[x,y] == 1时,您会得到类似于ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()的错误消息。
根据您想要完成的任务,您可以使用以下补救措施之一:
当且仅当framex和framey的所有元素都等于1时,framey使用.all方法,当且仅当framex和framey的所有元素都等于1时,该方法才会产生True。
当且仅当任何或framey元素等于1时,使用.any方法,该方法将导致True。使用以下内容:
https://stackoverflow.com/questions/66831374
复制相似问题