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

游戏中如何移动准星而非仅光标?Python AI瞄准器开发咨询

不移动系统光标实现游戏准星人脸锁定的方案

问题根源

你当前用win32api.mouse_event模拟鼠标移动,属于系统级输入操作,所以会同步带动桌面光标。要只控制游戏里的准星/视角,得用游戏专用的DirectInput输入模拟——绝大多数PC游戏都是用DirectInput处理玩家输入,不会受系统光标状态影响。

修正后的代码

利用你已经导入的pydirectinput库来实现游戏级鼠标移动,同时修正人脸识别的瞄准坐标(锁定人脸中心而非左上角),还优化了截图流程(不用存本地文件,速度更快):

import cv2
import numpy as np  # 新增,用于格式转换
import pyautogui
import pydirectinput
from PIL import ImageGrab
from pynput import keyboard

def lock_face():
    print('触发人脸锁定')
    # 直接截图并转成OpenCV可用格式,跳过存文件步骤
    screenshot = ImageGrab.grab()
    frame = cv2.cvtColor(np.array(screenshot), cv2.COLOR_RGB2BGR)
    screenshot.close()
    
    gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
    faces = face_cascade.detectMultiScale(
        gray_frame,
        scaleFactor=1.3,
        minNeighbors=3,
        minSize=(30, 30)
    )

    print(f"检测到 {len(faces)} 张人脸!")

    # 你的屏幕中心坐标(这里是1720x1080分辨率的中心,根据自己屏幕调整)
    screen_center_x = 860
    screen_center_y = 540

    for (x, y, w, h) in faces:
        # 计算人脸的中心坐标,而不是左上角
        face_center_x = x + w // 2
        face_center_y = y + h // 2
        print(f"人脸中心位置: {face_center_x}, {face_center_y}")

        # 计算需要移动的偏移量
        x_offset = face_center_x - screen_center_x
        y_offset = face_center_y - screen_center_y

        # 使用pydirectinput做相对移动,不会影响桌面光标
        # duration控制移动时长,数值越小移动越快,也可以给偏移量乘系数调整速度
        pydirectinput.moveRel(x_offset, y_offset, duration=0.01)

# 绑定按键触发,比如按A启动锁定
def on_key_press(key):
    try:
        if key.char == 'a':
            lock_face()
    except AttributeError:
        pass

# 启动按键监听
with keyboard.Listener(on_press=on_key_press) as listener:
    listener.join()

关键改动说明

  • DirectInput模拟:pydirectinput.moveRel()是专门针对游戏的输入模拟,只会被游戏的输入系统捕获,完全不会改变桌面光标的位置。
  • 瞄准坐标修正:原来的代码用人脸左上角坐标计算偏移,现在改成人脸中心,确保准星真正锁定人脸。
  • 截图效率提升:直接把ImageGrab的截图转成numpy数组再转成OpenCV格式,省去了读写本地文件的时间,识别速度会快很多。
  • 平滑移动控制:通过duration参数可以调整准星移动的平滑度,也可以给偏移量乘以一个小于1的系数(比如x_offset * 0.6),避免准星突然跳变。

额外提示

  • 只在和朋友游玩的私人局使用,避免触碰游戏的反作弊机制。
  • 如果遇到游戏不响应pydirectinput的情况,可以尝试开启pydirectinput.PAUSE = 0来减少输入延迟,或者调整游戏里的输入设置(比如关闭“Raw Input”)。
  • 可以微调detectMultiScale的参数,比如降低scaleFactor或者提高minNeighbors,来平衡人脸识别的准确率和速度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:27:41