Python图像检测脚本:如何在执行函数期间持续检测图像?
解决Python图像检测脚本的并发执行问题
原始代码
from pyautogui import * from threading import Timer import pyautogui import pydirectinput import time import keyboard import random import win32api, win32con start = time.time() def b() time.sleep(0.30) pydirectinput.press('b') print("i see it") while True: if pyautogui.locateOnScreen('b.png', region=(1717,1127,150,150), grayscale=True, confidence=0.8): b() else: print("cant see anything")
问题说明
我是编程新手,接触Python时间很短。这个脚本用来检测指定区域内的图像,检测到就调用b()函数——延迟0.3秒后按下B键。现在的问题是:b()函数执行期间,脚本会暂停搜索图像,我希望这段时间里脚本仍能持续搜索,要是再次检测到目标图像,就得再执行一次b()。
解决方案
核心是用线程异步执行b()函数,让主线程不用等b()跑完就能继续循环检测图像。同时修正代码里的语法错误:
from pyautogui import * import threading # 导入threading模块 import pyautogui import pydirectinput import time import keyboard import random import win32api, win32con def b(): # 补上函数定义的冒号 time.sleep(0.30) pydirectinput.press('b') print("i see it") # 修正英文引号 while True: if pyautogui.locateOnScreen('b.png', region=(1717,1127,150,150), grayscale=True, confidence=0.8): # 用线程启动b(),不阻塞主线程 threading.Thread(target=b).start() else: print("cant see anything") # 加小延迟降低CPU占用,可按需调整 time.sleep(0.05)
修改说明
- 给
b()函数补上定义时的冒号,修复语法错误 - 导入
threading模块,每次检测到图像就启动新线程执行b(),主线程立刻回到检测循环,不会被阻塞 - 修正
print语句里的中文引号为英文引号 - 在循环末尾添加
time.sleep(0.05),避免脚本占用过高CPU资源
内容的提问来源于stack exchange,提问作者limitlesshat3
相关产品推荐
相关产品推荐

