来源:yunlord.blog.csdn.net/?枪枪爆头type=blog
前言
前段时辰在网上看到《警惕AI外挂!我写了一个枪枪爆头的个使挂视觉AI ,又亲手“杀死”了它》 这个视频,命召引起了我极大的唤外兴趣。
视频中提到暗区突围无后座论坛,枪枪爆头在国外有人给使命召唤做了个AI程序来实现自动瞄准功能。个使挂[凡凡]科技辅助2.2它跟传统外挂不一样,命召该程序不需要用游戏内存数据 ,唤外也不往服务器发送作弊指令,枪枪爆头只是个使挂通过计算机视觉来分析游戏画面 ,定位对手 ,命召把准星移动以往,唤外跟人类玩家暗区突围无后座论坛操作一模一样 ,枪枪爆头因此反外挂程序无法检测到它。个使挂而且更恐怖的命召是这AI程序全平台通用 ,不管是无畏契约辅助X-box ,PS4还是手机,只要能把画面接出来,把操作送进去,就可以实现“枪枪爆头”。

外网的那个开发者用的是基于方框暗区突围无后座论坛的目标检测,但是像射击游戏需要定位人体的场景 ,其实有比方框检测更好的算法。up主就利用了几个小时的时辰就写出来了一个效果更好 ,功能更夸张的AI程序,也就是利用人体关节点检测技术 ,通过大量真人图片训练出暗区突围无后座论坛来的视觉AI ,可以把视频和图片里人物的关节信息提取出来 并给出每个部位中心点的精确像素坐标 ,而且虽然训练的是本尊科技是真人图片 ,但是给它游戏里的人物,他也一样能把人体关节定位出来。无畏契约辅助射击是哪个键位
可以说由于这类AI程序的出现暗区突围无后座论坛,当前fps游戏的形式就是山雨欲来风满楼,十分严峻啊 !
下方 ,我们先起始介绍这个视觉AI自动瞄准的制作思路,然后再谈谈这个问题带来的影响以及如何解决这个问题。
一、核心功能设计
总体来说,我们首先需要训练好暗区突围无后座论坛一个人体关节点检测的AI视觉模型,然后将游戏画面实时送入AI视觉模型中,再反馈出游戏人物各个部位的像素位置 ,然后确定瞄准点,并将鼠标移动到瞄准点位置。
拆解需求后 ,整理出核心功能如下 :
最终想要实现的无畏契约辅助工具效果暗区突围无后座论坛如下图所示:

二 、核心实现步骤 1.训练人体关节点检测模型
在这一部分 ,我打算使用由微软亚洲研究院和中科大提出High-Resoultion Net(HRNet)来进行人体关节点检测,该模型通过在高分辨率暗区突围无后座论坛特征图主网络逐渐并行加入低分辨率特征图子网络,差异网络实现多尺度融合与特征提取实现的,所以在目前的通用数据集上取得了较好的结果。
1.1 HRNet代码库安装
按照官方的install指导命令,安装十分简暗区突围无后座论坛单。我是采用本地源代码安装方式。
git clone
python -m pip install -e deep-high-resolution-ne.pytorch
1.2 人体关键点数据集下载
首先开启C暗区突围无后座论坛OCO数据集官方下载链接。
对于Images一栏的绿色框需要下载三个大的文件,分别对应的是训练集 ,验证集和测试集:
对于Annotations一栏绿色框需要下载一个标注文件 :
将文件解压后,可以得到如下目录暗区突围无后座论坛结构 :
其中的 person_keypoints_train2017.json 和 person_keypoints_val2017.json 分别对应的人体关键点检测对应的训练集和验证集标注。
anno暗区突围无后座论坛tations
├── captions_train2017.json
├── captions_val2017.json
├── instances_train2017.json
├── instances暗区突围无后座论坛_val2017.json
├── person_keypoints_train2017.json 人体关键点检测对应的训练集标注文件
└── person_keypoints_val2017.json 暗区突围无后座论坛人体关键点检测对应的验证集标注文件
在本地代码库datasets目录下方新建立coco目录,将上方的无畏契约辅助科技训练集,验证集以及标注文件放到本地代码的coco目录下方
datasets
├── coco
│ ├── a暗区突围无后座论坛nnotations
│ ├── test2017
│ ├── train2017
│ └── val2017
1.3 环境配置与模型训练
核心训练代码如下 :
def train(config, train_lo暗区突围无后座论坛ader, model, criterion, optimizer, epoch,
output_dir, tb_log_dir, writer_dict):
batch_time = AverageMe暗区突围无后座论坛ter()
data_time = AverageMeter()
losses = AverageMeter()
acc = AverageMeter()
# switch to train mode
mode暗区突围无后座论坛l.train()
end = time.time()
for i, (input, target, target_weight, meta) in enumerate(train_loader):
dat暗区突围无后座论坛a_time.update(time.time() - end)
outputs = model(input)
target = target.cuda(non_blocking=True)
target_暗区突围无后座论坛weight = target_weight.cuda(non_blocking=True)
if isinstance(outputs, list):
loss = criterion(outputs[暗区突围无后座论坛0], target, target_weight)
for output in outputs[1:]:
loss += criterion(output, target, target_weight)暗区突围无后座论坛
else:
output = outputs
loss = criterion(output, target, target_weight)
optimizer.zero_grad()
loss.backwa暗区突围无后座论坛rd()
optimizer.step()
# measure accuracy and record loss
losses.update(loss.item(), input.size(0))
_, av暗区突围无后座论坛g_acc, cnt, pred = accuracy(output.detach().cpu().numpy(),
target.detach().cpu().numpy())
acc.update(a暗区突围无后座论坛vg_acc, cnt)
batch_time.update(time.time() - end)
end = time.time()
if i % config.PRINT_FREQ == 0:
msg =暗区突围无后座论坛 Epoch: [][{1}/{2}]\t \
Time {batch_time.val:.3f}s ({batch_time.avg:.3f}s)\t \
Speed {speed:.1f} sa暗区突围无后座论坛mples/s\t \
Data {data_time.val:.3f}s ({data_time.avg:.3f}s)\t \
Loss {loss.val:.5f} ({loss.avg:.5f})\暗区突围无后座论坛t \
Accuracy {acc.val:.3f} ({acc.avg:.3f}).format(
epoch, i, len(train_loader), batch_time=batch_time,暗区突围无后座论坛
speed=input.size(0)/batch_time.val,
data_time=data_time, loss=losses, acc=acc)
logger.info(msg)
writer 暗区突围无后座论坛= writer_dict[writer]
global_steps = writer_dict[train_global_steps]
writer.add_scalar(train_loss, los暗区突围无后座论坛ses.val, global_steps)
writer.add_scalar(train_acc, acc.val, global_steps)
writer_dict[train_global_st暗区突围无后座论坛eps] = global_steps + 1
prefix = {}_{}.format(os.path.join(output_dir, train), i)
save_debug_images(co暗区突围无后座论坛nfig, input, meta, target, pred*4, output,
prefix)
训练结果:

2.输入视频或图片实时反馈瞄准点坐标 2.1 实时读取屏幕画面import pyautogu暗区突围无后座论坛i
img = pyautogui.screenshot()
在一个 1920×1080 的屏幕上 ,screenshot()函数要消耗100微秒暗区突围科技 ,基本达到实时传入游戏画面要求 。
如果不需要截取整暗区突围无后座论坛个屏幕,还有一个可选的region参数。你可以把截取区域的左上角XY坐标值和宽度 、高度传入截取。
im = pyautogui.screenshot(region=(0, 0, 300 ,400))

2.暗区突围无后座论坛2 读取图片反馈坐标parser.add_argument(--keypoints, help=f:full body 17 keypoints,h:half body 11 keypoints,sh暗区突围无后座论坛:small half body 6 keypotins)
hp = PoseEstimation(config=args.keypoints, device="cuda:0")
可以选择人体关节点检测数暗区突围无后座论坛目,包括上半身6个关键点、上半身11个关键点以及全身17个关键点,然后构建探测器。
人体关节点对应序号 :
"keypoints": { 0: "nose", 1: "left_eye", 2: "righ暗区突围无后座论坛t_eye", 3: "left_ear", 4: "right_ear", 5: "left_shoulder", 6: "right_shoulder", 7: "left_elbow", 8: 暗区突围无后座论坛"right_elbow", 9: "left_wrist", 10: "right_wrist", 11: "left_hip", 12: "right_hip", 13: "left_knee",暗区突围无后座论坛 14: "right_knee", 15: "left_ankle", 16: "right_ankle" }
因此如果为了自动瞄准头部实现“枪枪爆头” ,仅需要反馈 0: "nose"的坐标点就行了 。暗区突围无后座论坛
代码如下 :
location=hp.detect_head(img_path, detect_person=True, waitKey=0)
def detect_head(self, image_pat暗区突围无后座论坛h, detect_person=True, waitKey=0):
bgr_image = cv2.imread(image_path)
kp_points, kp_scores, boxes = se暗区突围无后座论坛lf.detect_image(bgr_image,
threshhold=self.threshhold,
detect_person=detect_person)
return kp_points[0]暗区突围无后座论坛[0]
输出结果 :[701.179 493.55]

可以看到虽然训练的是真人图片,但是无畏契约辅助英雄给它游戏里的人物,它也一样能把人体关节定位出来 。
深度神经网络之所以厉害,就是因为它有一定的演绎推广能力。没见过的东西,暗区突围无后座论坛他也能靠着层次线索分析一波,结果往往也挺准。而且游戏场景是现实场景的简化之后的结果 ,环境和光影都要容易的多 ,能把现实世界分析明白的视觉AI ,对付个3D游戏更是小菜一碟了 。
3.自动移动鼠标到对应的坐标点暗区突围无后座论坛 3.1 移动鼠标
移动到指定位置:
pyautogui.moveTo(100,300,duration=1)
将鼠标移动到指定的坐标;duration 的作用是设置移动时辰 ,所有的gui函数都有这个参数,暗区突围无后座论坛而且都是可选参数。
获取鼠标位置:
print(pyautogui.position()) # 得到当前鼠标位置;输出 :Point(x=200, y=800)
3.2 控制鼠标点击
单击鼠标:
# 点击鼠标
py暗区突围无后座论坛autogui.click(10,10) # 鼠标点击指定位置 ,默认左键
pyautogui.click(10,无畏契约辅助购买10,button=left) # 单击左键
pyautogui.click(1000,30暗区突围无后座论坛0,button=right) # 单击右键
pyautogui.click(1000,300,button=middle) # 单击中间
双击鼠标 :
pyautogui.doubleClick(10,10暗区突围无后座论坛) # 指定位置,双击左键
pyautogui.rightClick(10,10) # 指定位置,双击右键
pyautogui.middleClick(10,10) # 指定位置 ,双击中键
点击 & 释放:暗区突围无后座论坛
pyautogui.mouseDown() # 鼠标按下
pyautogui.mouseUp() # 鼠标释放
至此,视觉AI自瞄程序已经基本设计完结。最终实现效果可以参见这个up主的视频 。
【亦】警惕AI暗区突围无后座论坛外挂!我写了一个枪枪爆头的视觉AI ,又亲手“杀死”了它
三 、引发的思考
也正如up主所说 ,视觉AI给FPS游戏带来的这一轮重大危机!
这类视觉AI程序目前存在三个威胁:
第一个威胁就是超越人类的准确性。虽然人暗区突围无后座论坛脑的高层次演绎归纳能力是远胜于AI的,但是在低级信息处理速度和精确度上 ,人类就很难比得过专精某个功能的AI了 ,比如在人体关节定位这件事上,给出人体每个部位的中心位置只需要几毫秒 ,而且精确到像素点,而同暗区突围无后座论坛样一张图片给人类看个几毫秒 ,都不一定能够看清人在哪,更别说定位关节移动鼠标了。
第二个威胁就是无法被外挂程序检测的隐蔽性 。和传统外挂不一样,传统外挂要操作游戏的内存数据或者文件数据,从而获取游戏世界的信暗区突围无后座论坛息。让开挂的人打出一些正常玩家不或许实现的作弊操作。而视觉AI是完全独立于游戏数据之外的,和人一样 ,也是通过实时观察画面发送鼠标和键盘指令,所以传统的反外挂程序只能反个寂寞 。
第三个威胁就是适用全平台的暗区突围无后座论坛通用性。首先这个AI视觉模型是通过大量真人照片训练出来的,但是能够识别游戏中的人物,这意味着可以攻陷大部分FPS游戏。AI操作游戏和人操作游戏交互方式是没区别的 ,所以衍生出更大的问题,只要能把画面接入暗区突围无后座论坛到这个模型中,就可以攻陷任意一种游戏平台,包括电脑 、主机、手机等,无论你做的多封闭 ,生态维护的多好 ,在视觉AI面前众生平等。
那么我们该如何解决这个问题呢?
up主提到可以通过算法检测游戏异常操作,这也是暗区突围无后座论坛一种思路 ,但是实现起来还是比较难题和平精英辅助,毕竟可以让AI更像人类的操作。
而我想到之前比较火的deepfake,那么我们是不是可以通过对抗样本来解决这个问题呢,使得视觉AI识别错误?
说了那么多 ,其暗区突围无后座论坛实也没有什么好的结论 ,只能说技术的发展是在不断对抗中前行以及规范 。
免责声明:本网部分内容及图片来源于互联网 ,不作商业用途,如侵犯了您的权益 ,请来函告知 ,我们将在48小时内删除 。