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

自定义区域颜色检测触发自动点击Bot实现方案咨询

颜色识别自动点击Bot实现方案

针对高速换色区域的检测+自动点击需求,用Python实现即可,单轮检测延迟可以压到2ms以内,完全满足高速响应要求。

依赖库选择

选轻量高性能的库组合,避免不必要的性能开销:

  • 屏幕捕获:mss,比常见的PIL.ImageGrab截图速度快5~10倍,支持指定区域截图,是高速场景的首选
  • 像素比对:numpy,直接做矩阵运算比对颜色差值,比逐像素遍历快两个数量级
  • 输入控制:pynput,鼠标点击、全局快捷键监听的延迟都低于pyautogui
  • 不需要引入OpenCV这类重型CV库,纯色识别场景下完全用不上

核心逻辑说明

  1. 配置自定义
    所有可变参数全部外置,支持按需修改:
    • 颜色检测区域:可自定义左上角坐标、区域宽高,默认适配100x100换色区
    • 点击映射:支持配置「目标RGB颜色值-对应点击坐标」的映射,单颜色/多颜色触发都能支持
    • 辅助参数:可调整颜色容差(适配屏幕显示色差,避免漏判)、触发冷却时间(避免同一次颜色出现重复点击)、全局终止快捷键
  2. 高速检测循环
    • 循环内仅截取预设的检测区域,不做全屏捕获,尽可能压缩单帧处理耗时
    • 截图后直接转numpy矩阵,批量计算所有像素和目标色的差值,只要有像素匹配就触发逻辑
    • 触发冷却后直接进入下一轮检测,不做多余的等待、日志打印等阻塞操作
  3. 异常终止
    注册全局快捷键,按下后直接退出循环,不需要强制杀进程

可运行最小实现代码

先安装依赖:
pip install mss numpy pynput

import mss
import numpy as np
import pynput.mouse as mouse
import pynput.keyboard as keyboard
import time

# 按需修改以下配置
CONFIG = {
    # 检测区域坐标:left=左上角X值,top=左上角Y值,width/height对应区域宽高
    "detect_region": {"left": 100, "top": 100, "width": 100, "height": 100},
    # 颜色和对应点击位置的映射,可添加多组,格式为(R,G,B): (点击X, 点击Y)
    "color_click_map": {
        (255, 0, 0): (700, 300)  # 示例:检测到红色就点击(700,300)位置
    },
    "color_tolerance": 8, # 颜色容差,数值越大允许的颜色偏差越大,建议5~15
    "trigger_cooldown": 0.1, # 单次触发后的冷却时间,单位秒,避免重复点击
    "exit_hotkey": "f9" # 终止运行的快捷键
}

is_running = True
last_trigger_ts = 0

def listen_key_press(key):
    global is_running
    try:
        if key.name == CONFIG["exit_hotkey"]:
            is_running = False
            return False
    except AttributeError:
        pass

# 启动键盘监听
keyboard_listener = keyboard.Listener(on_press=listen_key_press)
keyboard_listener.daemon = True
keyboard_listener.start()
mouse_controller = mouse.Controller()
screenshot_tool = mss.mss()

print(f"Bot启动完成,按{CONFIG['exit_hotkey'].upper()}可终止运行")

while is_running:
    # 截取指定检测区域
    frame = np.array(screenshot_tool.grab(CONFIG["detect_region"]))
    # mss返回的是BGRA格式,转成RGB
    frame_rgb = frame[:, :, :3][:, :, ::-1]
    
    # 遍历所有配置的目标颜色
    for target_color, click_pos in CONFIG["color_click_map"].items():
        color_diff = np.abs(frame_rgb - np.array(target_color)).sum(axis=2)
        # 存在匹配像素
        if (color_diff < CONFIG["color_tolerance"] * 3).any():
            current_ts = time.time()
            # 冷却时间过了才触发点击
            if current_ts - last_trigger_ts > CONFIG["trigger_cooldown"]:
                mouse_controller.position = click_pos
                mouse_controller.click(mouse.Button.left)
                last_trigger_ts = current_ts
                break
    # 加1ms休眠,避免CPU占满
    time.sleep(0.001)

print("Bot已终止运行")

调优注意事项

  • 首次运行前先确认坐标准确:可以用像素级坐标拾取工具,确认检测区域、按钮位置的实际坐标,避免点错位置
  • 如果出现漏判,适当调高颜色容差值;如果出现误判,就调低容差值
  • 不要在循环里加print、写文件这类IO操作,会大幅增加检测延迟
  • 如果需要更快的响应速度,可以把time.sleep(0.001)改成time.sleep(0.0001),只要CPU占用不高就没问题

场景参考示意图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:51:19