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

如何提升Python中游戏字符图像识别的运行速度?

优化游戏字符图像识别速度的方案

你的核心问题是重复调用locateOnScreen导致多次截图与重复计算——每个字符都单独触发一次屏幕捕获和模板匹配,7个字符就会重复7次相同区域的截图操作,这是速度瓶颈的关键。下面是几个直接有效的优化方法:

1. 单次截图复用,避免重复捕获屏幕

先一次性截取目标区域的图像,再在这张截图上循环匹配所有字符模板,彻底减少屏幕捕获的开销(屏幕捕获是耗时操作)。

修改后的代码:

import pyautogui

name = ["char1", "char2","char3","char4","char5","char6","char7"]
# 预加载所有字符模板,避免每次循环都重新读取图片
templates = [pyautogui.loadImage(f"{name}.png") for name in name]

while True:
    # 只截图一次目标区域
    screen = pyautogui.screenshot(region=(0,40,500,130))
    found = False
    for idx, template in enumerate(templates):
        # 在已截取的屏幕图像上匹配模板
        if pyautogui.locate(template, screen, grayscale=True, confidence=0.6) is not None:
            print(name[idx])
            found = True
            # 如果只需要识别第一个出现的字符,可直接break跳出循环减少计算
            # break
    if not found:
        print(" ")

2. 改用OpenCV直接处理,提升匹配效率

PyAutoGUI的模板匹配底层依赖OpenCV,直接调用OpenCV的API可以更灵活地优化,比如选择更快的匹配算法,速度会比PyAutoGUI的封装更快。

示例代码:

import cv2
import numpy as np
import pyautogui

name = ["char1", "char2","char3","char4","char5","char6","char7"]
# 预加载模板并转为灰度图
templates = []
for name in name:
    img = cv2.imread(f"{name}.png", cv2.IMREAD_GRAYSCALE)
    templates.append((name, img))

while True:
    # 截取目标区域并转为灰度图
    screen = pyautogui.screenshot(region=(0,40,500,130))
    screen_gray = cv2.cvtColor(np.array(screen), cv2.COLOR_RGB2GRAY)
    
    found = False
    for name, template in templates:
        # 使用TM_CCOEFF_NORMED算法,速度与精度平衡
        res = cv2.matchTemplate(screen_gray, template, cv2.TM_CCOEFF_NORMED)
        threshold = 0.6
        loc = np.where(res >= threshold)
        if len(loc[0]) > 0:
            print(name)
            found = True
            # 找到即跳出循环,减少不必要计算
            # break
    if not found:
        print(" ")

3. 其他细节优化

  • 预加载模板:提前加载所有字符模板,不要在循环里重复读取图片文件,减少磁盘IO开销。
  • 减少输出频率:原代码每次循环都打印空行,改为只有未识别到字符时再打印,减少控制台IO耗时。
  • 调高匹配阈值:如果字符特征明显,适当提高confidence(或OpenCV的threshold),减少无效匹配的计算量。
  • 缩小匹配范围:如果字符出现的位置有固定分区,把大区域拆分成小区域,针对性匹配对应区域的字符,减少匹配的像素范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 03:05:48