You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

修改说明

  1. 给b()函数补上定义时的冒号,修复语法错误
  2. 导入threading模块,每次检测到图像就启动新线程执行b(),主线程立刻回到检测循环,不会被阻塞
  3. 修正print语句里的中文引号为英文引号
  4. 在循环末尾添加time.sleep(0.05),避免脚本占用过高CPU资源

内容的提问来源于stack exchange,提问作者limitlesshat3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:15:28