-
人体关键点检测算法 rtmdet(small) + rtm3dpose(large) 的效果较好,fp16 trt模型在板端的延迟共约40ms
-
模型选用的灵活度较高,Detector可以替换为其他检测器
3.Pose detection 总体pipeline:先跑Detection,得到检测框,再从原始图像中裁剪目标(类别为“人”的目标),再跑关键点检测
就是通过翻转 裁剪 镜像来扩容;随机缩放裁剪颜色抖动添加噪声来数据增强
做出来的东西, 有一定效果, 但是还有很多不足, 目前仍在调优;目前只支持机器人+星绘 正在收集更多的数据//// 想用一定要下罗技驱动,下面有连接,没有也可以百度搜得到!!! 因为卡丘shit一般的设计,瞄准时他的鼠标是不固定的甚至还会乱动, 必须用我写的这个控制!! (反正我以前见过的FPS人家鼠标都是固定在中心,通过相对位移来实现视角转动的,卡丘有点东西)
源码说明:
- realtime.py: 入口, 自瞄逻辑与程序控制都在这里
- screen.py: 自行封装的工具, 封装了截图等工具 SCREEN系列;点开就知道是干嘛的了,不多赘述
- weights.*.pt: 训练好的模型权重文件, 大概训练了下, 识别不一定精准
- logitech.driver.dll: 大佬封装的调用罗技驱动的库文件
- logitech.test.py: 用于测试罗技驱动安装配置是否正确(目前不需要咯)
- test_*.py: 测试一些东西
参数说明:
- 文件里注释其实都打得很清楚了,想改参数按照注释改。
按键说明: -局内按Alt启动锁定;目前只能锁机器人跟星绘! -抖动问题应该已经解决了
其他说明:
- 显示器关闭
缩放
- 游戏分辨率和显示器物理分辨率需要一致
- 游戏需要设置显示模式为
无边框窗口
- 游戏可能需要限制帧数, 以便给显卡让出足够算力做目标检测, 比如锁60帧
+fps_max 60
, 根据自己的情况定
模型转换
- .pt 模型可以转换为 .engine 模型以提高推理速度(需要 TensorRT 环境支持)
python export.py --weights weights.apex.public.dummy.pt --device 0 --include engine
运行工程, 需要 PyTorch Cuda 环境, 参考下文搭建环境
大多FPS游戏都屏蔽了操作鼠标的Win函数(DirectInput), 要想在游戏中用代码操作鼠标, 需要一些特殊的办法, 其中罗技驱动算是最简单方便的了
代码直接控制罗技驱动向操作系统(游戏)发送鼠标命令, 达到了模拟鼠标操作的效果, 这种方式是鼠标无关的, 任何鼠标都可以使用这种方法
我们不会直接调用罗技驱动, 但是有大佬已经搭过桥了, 有现成的调用驱动的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 键 移动鼠标, 自行测试效果, 如无效果, 则按上述步骤检查
Pynput 说明 (已废弃 现在用 pyautogui)
注意调试回调方法的时候, 不要打断点, 不然会卡死IO, 导致鼠标键盘失效
回调方法如果返回 False, 监听线程就会自动结束, 所以不要随便返回 False
键盘的特殊按键采用 keyboard.Key.tab.xxx
这种写法,普通按键用 keyboard.KeyCode.from_char('c')
这种写法, 有些键不知道该怎么写, 可以 print(key)
查看信息
钩子函数本身是阻塞的。也就是说钩子函数在执行的过程中,用户正常的键盘/鼠标操作是无法输入的。所以在钩子函数里面必须写成有限的操作(即O(1)时间复杂度的代码),也就是说像背包内配件及枪械识别,还有下文会讲到的鼠标压枪这类时间开销比较大或者持续时间长的操作,都不适合写在钩子函数里面。这也解释了为什么在检测到Tab(打开背包)、鼠标左键按下时,为什么只是改变信号量,然后把这些任务丢给别的进程去做的原因。
不同的游戏, 都需要准备大量精准的数据集做训练, 才能取得比较好的效果
大多数 FPS 游戏中要检测的目标都为人形, 可以训练一个 通用型人体骨骼检测模型, 在类似游戏中应该有不错的效果; 但是像卡拉比丘这种,还有纸片儿的就很难构建人体骨骼,现在的解决方案就是考虑敌对目标其实是有红边的! 根据这个来做注意力机制。