关于开发AI自瞄你可能遇到的问题和建议
大白兔Exception 2024-10-09 08:31:01 阅读 82
AI 自瞄听起来非常厉害,甚至让你心动想要自己开发一个?本文将带你深入了解 AI 自瞄的各个难点和细节,帮你实现快速突破,然后快速的发现AI自瞄也不过如此,助你减少花费在这块地方的时间。去折腾其他项目
资源问题
通过百度网盘分享的文件:CS2相关数据集
链接:https://pan.baidu.com/s/1_vigVU5uwv2zkBHzL_ffaQ?pwd=9r5g
提取码:9r5g
–来自百度网盘超级会员V6的分享
鼠标控制问题
在开发 AI 自瞄时,鼠标控制是一个关键问题。使用 Windows API 32 进行开发,虽然直接,但像是“裸奔”,很容易被检测出来。有些人会使用罗技驱动来绕过检测,但软件层面的解决方案容易被识别。
推荐方案:KMBOX
一个更可靠的选择是使用 KMBOX 来控制鼠标,但这需要购买硬件设备,可能会增加成本。如果你不想投资硬件设备,可以参考这篇解决方案文章:《通过 Android 模拟蓝牙并实现自动瞄准——KMBOX 的替代方案》。虽然这个替代方案的效果不如真正的硬件,但它仍然是一种可行的低成本替代方案。
Python 上的性能问题
在开发 AI 自瞄项目时,你会遇到截图、业务逻辑执行以及模型推理等任务。使用多线程开发似乎是一个自然的选择,但 Python 的 GIL(全局解释器锁)限制了多线程的并行执行效率,特别是在处理 CPU 密集型任务时,多线程无法充分利用多核 CPU 的优势。
推荐方案:多进程
在这种情况下,推荐使用多进程来实现并发处理,以获得更好的性能。你可以了解一下 Python 的 multiprocessing
包,它能够有效提升程序的执行效率,特别是在需要频繁处理复杂计算任务时。
截图效率问题
在 AI 自瞄项目中,快速高效地截取屏幕图像至关重要。不同的截图方法有不同的优缺点,下面是几种常见的截图方式:
1. GDI(图形设备接口)
GDI 允许 Windows 应用通过设备上下文(DC)捕获屏幕位图数据。它具有良好的兼容性,不受操作系统版本限制。然而,由于依赖 CPU 处理,GDI 的效率较低,并且无法过滤指定窗口内容。
2. DXGI(DirectX Graphics Infrastructure)
DXGI 是在 Windows 8 及以上系统中引入的图形接口,直接与硬件交互,支持 GPU 处理图形纹理。它的效率高,但由于硬件和 Direct3D 版本的不同,可能会存在兼容性问题。此外,DXGI 无法采集桌面窗口。
3. Magnification API
Magnification API 最初用于辅助视障用户,能够实现屏幕区域放大、颜色转换和窗口过滤等操作,具备一定的灵活性。然而,它的应用场景较为有限。
4. WGC(Windows Graphics Capture)
WGC 是微软在 Windows 10 推出的高效桌面/窗口采集技术,使用 D3D11 库,性能优越且资源消耗低。然而,使用 WGC 采集时会增加无法去除的黄色边框,并且窗口过滤功能仅限于当前进程的子窗口。
推荐方案:DXGI
虽然有些方法存在局限性,但实际使用中,DXGI 的效果相当不错。在我的测试中,截图效率可以达到 5ms,相当于 200 FPS,非常适合高要求的应用场景。
截图黑屏问题
另一个常见问题是,截图时可能捕捉不到游戏内容,得到的只是一个黑屏。这通常是由于截图方法和游戏的图形渲染方式不兼容导致的。在这种情况下,尝试更换截图方法可能会解决问题。
性能优化:游戏中的模型运行效率问题
当你在游戏中运行 AI 自瞄模型时,可能会发现模型的运行效率大幅下降。这通常是因为游戏和 AI 模型在争夺 GPU 资源。
第一步提升建议:优化模型与调整游戏设置
为了应对这种情况,你可以优化你的 AI 模型,使其更小更快。当然,购买更强的显卡也是一个直接的解决方案。但如果不想增加硬件投入,最有效的方法是降低游戏画质,并将游戏分辨率调小。这样可以显著减少游戏占用的 GPU 资源,从而提升 AI 模型的运行效率。
第二步提升建议:使用 C++ 开发
如果你发现 Python 无法满足性能要求,可以考虑使用 C++ 开发。C++ 的运行效率通常比 Python 高出几个数量级,能够显著提升程序的流畅度。不过,C++ 的编程难度较大。如果你对 C++ 不熟悉,可以等待我之后提供的 C++ 实现项目,其中将包含 imgui 的集成。
第三步提升建议:卡尔曼滤波进行插值处理
为了进一步提升效果,可以使用卡尔曼滤波来进行插值处理。卡尔曼滤波可以在两帧画面的两个框之间,通过计算推理得到中间的过渡框。由于游戏人物的移动通常不会在短时间内发生剧烈变化,假设你每 100ms 完成一次截图和推理,那么完全可以通过卡尔曼滤波在两次推理之间插入 10 帧,使得推理结果更加丝滑流畅。这种方法不仅可以提升视觉效果,还能够减少对硬件资源的依赖。
第四步提升建议:使用 TensorRT 进行推理
为了进一步提升模型推理的速度,可以使用 TensorRT。TensorRT 是 NVIDIA 提供的一种高性能深度学习推理库,能够将模型推理效率最大化。
关于是否使用最新的 YOLOv10,经过实际测试,YOLOv10 的运行速度并不明显优于 YOLOv8。事实上,YOLOv5 的架构简洁,并且经过优化,在硬件资源有限的情况下,YOLOv5 通常能够提供更快的推理速度。不过,实际测试发现 YOLOv8 和 YOLOv5 之间的性能差距也不大,可以根据具体需求选择合适的版本。
鼠标拟人轨迹算法
为了让 AI 自瞄显得更加自然,可以考虑使用拟人化的鼠标轨迹算法。这种算法通过模拟人手的自然抖动和移动轨迹,使得 AI 自瞄的动作不容易被检测到。
基本思路
假设你已经推理出瞄准的目标点,可以计算出屏幕中心点到目标点的方向,得到一个矢量数据。然后,根据中心点和目标点的距离来控制矢量的单位。例如,目标越远,向目标方向一次移动的单位数越大,反之则越小。通过这种方式,可以将鼠标的移动分解为若干次微小的移动,从而模拟出人手的自然移动轨迹。
傅里叶算法
此外,还可以使用傅里叶算法将两点之间的线段变得更加丝滑,从而进一步提升拟人化效果。这种算法非常适合用于扩展开发。
CUDA 程序的打包与部署
如果你使用 CUDA 进行模型推理,可能会遇到如何将程序打包并部署到其他 NVIDIA 机器上的问题,而无需为每台机器配置 CUDA 环境。为了解决这个问题,可以使用 NVIDIA 的 CUDA Toolkit 提供的静态链接选项,将 CUDA 库静态链接到你的程序中。这样,程序可以在没有 CUDA 环境的机器上运行,而无需额外的配置。
效果
video_2024-08-21_15-31-06
案例1:自动压枪
https://github.com/ajfkdk/AutoPressDown
案例2:自动瞄准
https://github.com/ajfkdk/CS2_AutoAim_By_YOLOV8
案例3:C++版本的自动瞄准
https://github.com/ajfkdk/CS2_AutoAim
案例4:通过Android模拟蓝牙鼠标
https://github.com/ajfkdk/AndroidMouseSimulator/releases/tag/1.0.0
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。