因为没有计算机视觉相关方向的专业知识, 所以做出来的东西, 有一定效果, 但是还有很多不足, 目前仍在调优
仅能打静态目标, 动态目标跟不上
源码说明:
- csgo.py: 主文件, 自瞄逻辑与程序控制都在这里
- toolkit.py: 自行封装的工具, 封装了截图推理等工具
- weights.*.pt: 训练好的模型权重文件, 大概训练了下, 识别不一定精准
- logitech.driver.dll: 大佬封装的调用罗技驱动的库文件
- logitech.test.py: 用于测试罗技驱动安装配置是否正确
- detect.realtime.py: 实时展示推理结果, 用于测试权重文件是否好用, 可通过播放Csgo集锦来测试
- train.py: 训练工具, 用于训练模型
- detect.py: 推理工具, 用于推理目标检测
- export.for.csgo.py: 将 .pt 导出为 .engine
参数说明: csgo.py 中的 init
- ads: 就是一个作用于鼠标移动距离的倍数, 用于调整移动鼠标时的实际像素和鼠标 eDPI 的关系.
- 关闭仿真并开启自瞄后, 不断瞄准目标旁边并按住 F 键, 当准星移动稳定且精准快速不振荡时, 就找到了合适的 ADS 值
- classes: 要检测的标签的序号(标签序号从0开始), 多个时如右 [0, 1]
按键说明:
- End: 退出程序, 全局有效
- Down: 显示检测结果
- Up: 切换瞄头
- V: 锁定目标
其他说明:
- 游戏需要设置显示模式为
全屏/全屏窗口模式
- 游戏分辨率和显示器物理分辨率需要一致
- 游戏可能需要限制帧数, 以便给显卡让出足够算力做目标检测, 比如锁60帧, 在控制台输入
fps_max 60
, 根据自己的情况定
python export.py --weights weights.csgo.public.group.967082372.F4E232C07565A97341070431B91CA46B-v5-s-640-4500-2-T.CT.pt --device 0 --include engine
运行工程, 需要 PyTorch Cuda 环境, 参考下文搭建环境
大多FPS游戏都屏蔽了操作鼠标的Win函数, 要想在游戏中用代码操作鼠标, 需要一些特殊的办法, 其中罗技驱动算是最简单方便的了
代码直接控制罗技驱动向操作系统(游戏)发送鼠标命令, 达到了模拟鼠标操作的效果, 这种方式是鼠标无关的, 任何鼠标都可以使用这种方法
我们不会直接调用罗技驱动, 但是有大佬已经搭过桥了, 有现成的调用驱动的dll, 只是需要安装指定版本的罗技驱动配合才行
罗技驱动分 LGS (老) 和 GHub (新)
- LGS, 需要使用 9.02.65 版本
- GHub, 需要使用 2021.11 版本之前的, 因 2021.11 版本存在无法屏蔽自动更新的问题, 所以暂时建议选 2021.3 版本
如果有安装较新版本的 GHub, 需要运行 C:\Program Files\LGHUB\lghub_uninstaller.exe
卸载, 然后重新安装旧版本 GHub
装好驱动后, 需在设置中 取消
勾选 启用自动更新
, 可运行 屏蔽GHUB更新.exe
防止更新(不一定有效)
另外需要确保 控制面板-鼠标-指针选项 中下面两个设置
- 提高指针精确度 选项去掉, 不然会造成实际移动距离变大
- 选择指针移动速度 要在正中间, 靠右会导致实际移动距离过大, 靠左会导致指针移动距离过小
运行 logitech.test.py
查看效果, 确认安装是否成功, End 键 结束程序, Home 键 移动鼠标, 自行测试效果, 如无效果, 则按上述步骤检查
注意调试回调方法的时候, 不要打断点, 不然会卡死IO, 导致鼠标键盘失效
回调方法如果返回 False, 监听线程就会自动结束, 所以不要随便返回 False
键盘的特殊按键采用 keyboard.Key.tab.xxx
这种写法,普通按键用 keyboard.KeyCode.from_char('c')
这种写法, 有些键不知道该怎么写, 可以 print(key)
查看信息
钩子函数本身是阻塞的。也就是说钩子函数在执行的过程中,用户正常的键盘/鼠标操作是无法输入的。所以在钩子函数里面必须写成有限的操作(即O(1)时间复杂度的代码),也就是说像背包内配件及枪械识别,还有下文会讲到的鼠标压枪这类时间开销比较大或者持续时间长的操作,都不适合写在钩子函数里面。这也解释了为什么在检测到Tab(打开背包)、鼠标左键按下时,为什么只是改变信号量,然后把这些任务丢给别的进程去做的原因。