请求实现YOLO检测目标上鼠标悬停自动左击功能
实现YOLO检测目标悬停时自动左键点击
原代码实现了按下CAPSLOCK键时将鼠标移动到YOLO检测目标位置,现在要改成鼠标悬停在检测目标范围内时自动执行左键点击,可以按下面的方式修改:
关键逻辑说明
- 获取当前鼠标的实时位置
- 判断鼠标是否落在YOLO检测出的目标边界框(坐标范围)内
- 加入状态标记避免重复触发连续点击
修改后的代码
# 初始化点击状态标记,防止重复点击 has_clicked = False # 假设YOLO检测已给出目标的边界框坐标:xMin, xMax, yMin, yMax # 获取当前鼠标位置 current_mouse_x, current_mouse_y = win32api.GetCursorPos() # 判断鼠标是否在目标范围内 if (xMin <= current_mouse_x <= xMax) and (yMin <= current_mouse_y <= yMax): # 未点击过则执行完整左键点击动作 if not has_clicked: win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) has_clicked = True else: # 鼠标离开目标范围,重置点击标记 has_clicked = False # 保留原有的CAPSLOCK移动鼠标逻辑 if win32api.GetKeyState(0x14): win32api.mouse_event(win32con.MOUSEEVENTF_MOVE, int( mouseMove[0] * aaMovementAmp), int(mouseMove[1] * aaMovementAmp), 0, 0) last_mid_coord = [xMid, yMid]
注意事项
- 确保YOLO输出的目标边界框坐标(
xMin, xMax, yMin, yMax)是屏幕坐标系下的数值,和鼠标坐标的坐标系一致 has_clicked标记需要放在循环外初始化,避免每次循环重置导致重复触发点击
内容的提问来源于stack exchange,提问作者Is ktt
相关产品推荐
相关产品推荐

