自定义区域颜色检测触发自动点击Bot实现方案咨询
颜色识别自动点击Bot实现方案
针对高速换色区域的检测+自动点击需求,用Python实现即可,单轮检测延迟可以压到2ms以内,完全满足高速响应要求。
依赖库选择
选轻量高性能的库组合,避免不必要的性能开销:
- 屏幕捕获:
mss,比常见的PIL.ImageGrab截图速度快5~10倍,支持指定区域截图,是高速场景的首选 - 像素比对:
numpy,直接做矩阵运算比对颜色差值,比逐像素遍历快两个数量级 - 输入控制:
pynput,鼠标点击、全局快捷键监听的延迟都低于pyautogui - 不需要引入OpenCV这类重型CV库,纯色识别场景下完全用不上
核心逻辑说明
- 配置自定义
所有可变参数全部外置,支持按需修改:- 颜色检测区域:可自定义左上角坐标、区域宽高,默认适配100x100换色区
- 点击映射:支持配置「目标RGB颜色值-对应点击坐标」的映射,单颜色/多颜色触发都能支持
- 辅助参数:可调整颜色容差(适配屏幕显示色差,避免漏判)、触发冷却时间(避免同一次颜色出现重复点击)、全局终止快捷键
- 高速检测循环
- 循环内仅截取预设的检测区域,不做全屏捕获,尽可能压缩单帧处理耗时
- 截图后直接转numpy矩阵,批量计算所有像素和目标色的差值,只要有像素匹配就触发逻辑
- 触发冷却后直接进入下一轮检测,不做多余的等待、日志打印等阻塞操作
- 异常终止
注册全局快捷键,按下后直接退出循环,不需要强制杀进程
可运行最小实现代码
先安装依赖: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
相关产品推荐
相关产品推荐

