coldsmelting / SamAI-AimBot
git clone https://github.com/coldsmelting/SamAI-AimBot.git
aimbot · 9d ago
SamAI-AimBot — 基于 ONNX Runtime 的实时目标检测与辅助瞄准系统
—
stars, 24h
—
stars, 7 days
+77
stars, 30 days · #2,925
77
★ total
0
forks · 0 open issues
Star history starts 2026-10-20; the chart appears after the second daily snapshot.
LanguageC++
LicenseMIT
Created2026-10-10 (10d ago)
Last push9d ago
Watchers0
OwnerUser
Links
README excerpt
# SamAI-AimBot — 基于 ONNX Runtime 的实时目标检测与辅助瞄准系统
---
## 📑 目录
- 项目简介
- 核心优势
- 功能特性
- 架构设计
- 依赖库一览
- 编译指南
- 模型准备
- 使用说明
- 配置参数
- 项目结构
- 反馈与联系
---
## 项目简介
SamAI-AimBot 是一套基于 **ONNX Runtime** 的 AI 实时目标检测与视觉辅助瞄准系统。它以 **DXGI Desktop Duplication** 直接从 GPU 显存抓取桌面画面,送入 YOLO 系列 ONNX 模型完成推理,再通过 **SendInput** 或 **KMBox-Net** 硬件设备执行鼠标移动,形成「截图 → 推理 → 决策 → 移动」的完整闭环。
全部界面基于 **Dear ImGui**(DX11 + Win32 后端)实现,参数实时可调并持久化到 INI 配置文件。
> 🎯 双捕获后端(WIN32 GDI / DXGI)、双推理后端(CUDA / CPU 自动降级)、双移动后端(系统 API / 硬件盒)均可切换。
---
## 核心优势
### ⚡ 双截图后端可选
| 截图后端 | 技术 | 特点 | 适用场景 |
|---------|------|------|---------|
| **DXGI** | `IDXGIOutputDuplication` | 从 GPU 显存直接复制,只回读屏幕中心区块,CPU 拷贝量最小 | 追求低延迟的首选方案 |
| **WIN32** | GDI `BitBlt` | CPU 管线,兼容性最好,无需 D3D11 设备 | 默认方案/DXGI 不可用时兜底 |
**DXGI 模式的关键优化**:
- 只把屏幕中心的 `imgsize × imgsize` 区块从桌面帧拷到 staging 纹理,而不是整屏拷贝,显著降低 GPU→CPU 回读量
- 逐行拷贝时按 staging 纹理的真实 `RowPitch` 对齐,避免行间距错位
- **捕获失效自动在线重建**:串流启停、显示模式切换(如 `Win+P`)、设备移除会导致 Duplication 失效,程序检测到 `DXGI_ERROR_ACCESS_LOST` / `DXGI_ERROR_DEVICE_REMOVED` 或长时间无新帧后,会自动释放并重建捕获,**无需重启进程**
- 重建失败按固定间隔退避重试,覆盖串流切换期间的短暂不可用窗口
[code]
### 🧠 推理后端自动降级
- 优先使用 **CUDA** 执行提供者,加载失败时**自动重试 CPU**,全程无需人工干预
- 界面明确显示当前实际生效的后端(`backend_active_ep`)
- 两种后端均失败时记录失败原因(`backend_last_error`)并安全退出,避免用空指针继续推理
- 支持多模型尺寸(256 / 320 / 416 / 480 / 512 / 640),小尺寸延迟更低、大尺寸精度更高
### 🎯 移动方式可切换
| 移动后端 | 说明 |
|---------|------|
| **SendInput** | 系统级 `SendInput` 注入,零额外硬件 |
| **KMBox-Net** | 通过 UDP 网络协议驱动外置硬件盒,支持加密封包与硬件级轨迹修正 |
---
## 功能特性
### 🔍 AI 识别
- [x] YOLO 系列 ONNX 模型实时目标检测
- [x] CUDA / CPU 双执行提供者,加载失败自动降级
- [x] 置信度阈值 `conf` 可调 + IOU `iou` 去重
- [x] 类别过滤(`enableClassFilter` + `classFilterIndex`)
- [x] 模型文件运行时切换(`mode_llist`)
- [x] 多模型输入尺寸可选(`captureSizeTable = { 320, 416, 640, 960 }`)
### 🖥️ 屏幕捕获
- [x] DXGI Desktop Duplication(GPU 显存直接复制)
- [x] WIN32 GDI `BitBlt` 后端
- [x] 界面下拉框实时切换监视方式
- [x] 捕获失效自动在线重建(串流切换 / 显示模式变更)
- [x] 分辨率自动获取或手动指定
### 🎮 瞄准辅助
- [x] 多热键触发:左 / 右 / 中 / 侧键1 / 侧键2 独立开关
- [x] 瞄准总开关 `aimAssist`
- [x] 三级灵敏度:常规 `sens1` / 瞄准 `sens2` / 瞄准镜 `sens3`
- [x] PID 平滑系数 `X_pid_d` / `Y_pid_d` 独立可调
- [x] 贝塞尔曲线类人移动(`isBezier` + `BezierMouseSmoother.h`)
- [x] 移动频率与延迟控制:`steps` / `delay`
- [x] 瞄准偏移量 `head_y`、搜索范围 `searchRange`
- [x] 平滑度 `smooth`
### 💥 压枪补偿
- [x] 压枪开关 `compensationEnabled`
- [x] 补偿强度 `compensation` 与累积模式 `compensationAccumulate`
- [x] 子弹休眠 `compensationSleepMs`、峰值 `compensationMax`、下压像素 `compensationDownPx`
### 📟 KMBox-Net 硬件支持
- [x] UDP 网络通信 + 加密封包(`my_enc`)
- [x] 硬件级鼠标移动 / 按键 / 滚轮 / 键盘注入
- [x] 硬件轨迹修正(`traceType` 选择方式 + `traceValue` 平滑度)
- [x] 物理鼠标键盘状态监听线程(`kmNet_monitor`)
- [x] IP / Port / UUID 界面可配置并持久化
- [x] 自瞄间隔延迟 `kmBoxDelay` 防抖
### 🎛️ ImGui 控制面板
- [x] DirectX 11 渲染的控制面板
- [x] 监视方式、分辨率、模型、灵敏度、压枪、热键集中配置
- [x] 模型加载失败原因实时显示
- [x] KMBox-Net 连接状态提示
- [x] 配置保存 / 加载(INI 格式)
### 📺 实时监视画面
- [x] 开关 `monitorEnabled` 后用 OpenCV 窗口显示 AI 视野
- [x] 检测结果框实时叠加显示
- [x] 捕获中断期间保持上一帧,不产生空帧崩溃
---
## 架构设计
[code]
### 线程模型
| 线程 | 职责 |
|------|------|
| **主线程** | 全局鼠标钩子 `MouseHookProc` 捕获热键、压枪补偿计算、移动指令下发 |
| **推理线程** `g_aiThread` | 循环抓帧 → 推理 → 后处理,按 `captur