Press "Enter" to skip to content

TensorFlow对象检测CS:Go Aim机器人

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

欢迎使用我们的TensorFlow对象检测API教程系列的第7部分。首先,您可以在我的GitHub页面上下载代码。在这一部分中,我们将更改我们的代码,这样我们就可以找到敌人身上检测到的矩形的中心,将鼠标移到中心并射击它们。GitHub

 

在本教程中,我们使用的文件与在第6个教程中使用的文件相同。为了实现本教程的预期目标,我们需要在代码中添加几行™。首先,我们从导入pyautogui库开始:

 

import pyautogui

 

这个库将用来在游戏中移动我们的鼠标。但是有些游戏可能不允许你移动鼠标,然后你需要用管理员权限启动一个python脚本,就像我在YouTube视频教程中对CSGO所做的那样。

 

接下来,我们将定义的监视器大小行更改为以下内容。我们之所以这样做,是因为我们将使用其他地方的窗口宽度和高度来计算游戏的正确坐标。因此,为了避免错误并且不在许多地方写入相同的值,我们相应地定义了我们的窗口大小:

 

width = 800
height = 640
monitor = {'top': 80, 'left': 0, 'width': width, 'height': height}

 

在进入主While循环之前,我们定义了一个新函数,我们将使用该函数来瞄准和射杀敌人。正如你在下面的函数中所看到的,我们计算y和x的方式不同。在我的youtube教程中,当我们用与x相同的方式计算y时,我们会发现™是在头顶上方拍摄。因此,我们通过将所需的屏幕高度除以9并将其与标准y高度相加来消除这一差异。

 

def Shoot(mid_x, mid_y):
  x = int(mid_x*width)
  y = int(mid_y*height+height/9)
  pyautogui.moveTo(x,y)
  pyautogui.click()

 

接下来,我们在主While循环中工作的同时改进代码。因此,我们创建以下for循环。首先,我们初始化array_ch数组,我们将在其中放置所有ch对象。然后,我们将遍历Box[0]数组,如果找到所需的类,则检查它的检测百分比。例如,在我们的案例中,class[0][i]==2等于ch,如果该类的得分[0][i]>=0.5等于或大于50%,我们就假设我们检测到了我们的对象。在本例中,我们采用箱数组编号,其中:

 

boxes[0][i][0] – y axis upper start coordinates
boxes[0][i][1] – x axis left start coordinates
boxes[0][i][2] – y axis down start coordinates
boxes[0][i][3] – x axis right start coordinates

 

当减去相同的轴起点坐标并将它们除以2时,我们得到两个轴的中心。这样,我们就可以计算出检测到的矩形的中心。在最后一条线上,我们在中心画一个点:

 

array_ch = []
for i,b in enumerate(boxes[0]):
  if classes[0][i] == 2: # ch
    if scores[0][i] >= 0.5:
      mid_x = (boxes[0][i][1]+boxes[0][i][3])/2
      mid_y = (boxes[0][i][0]+boxes[0][i][2])/2
      array_ch.append([mid_x, mid_y])
      cv2.circle(image_np,(int(mid_x*width),int(mid_y*height)), 3, (0,0,255), -1)

 

这几行代码只适用于一个对象,我们对所有四个对象都这样做:

 

for i,b in enumerate(boxes[0]):
  if classes[0][i] == 2: # ch
    if scores[0][i] >= 0.5:
      mid_x = (boxes[0][i][1]+boxes[0][i][3])/2
      mid_y = (boxes[0][i][0]+boxes[0][i][2])/2
      array_ch.append([mid_x, mid_y])
      cv2.circle(image_np,(int(mid_x*width),int(mid_y*height)), 3, (0,0,255), -1)
  if classes[0][i] == 1: # c 
    if scores[0][i] >= 0.5:
      mid_x = (boxes[0][i][1]+boxes[0][i][3])/2
      mid_y = boxes[0][i][0] + (boxes[0][i][2]-boxes[0][i][0])/6
      array_c.append([mid_x, mid_y])
      cv2.circle(image_np,(int(mid_x*width),int(mid_y*height)), 3, (50,150,255), -1)
  if classes[0][i] == 4: # th
    if scores[0][i] >= 0.5:
      mid_x = (boxes[0][i][1]+boxes[0][i][3])/2
      mid_y = (boxes[0][i][0]+boxes[0][i][2])/2
      array_th.append([mid_x, mid_y])
      cv2.circle(image_np,(int(mid_x*width),int(mid_y*height)), 3, (0,0,255), -1)
  if classes[0][i] == 3: # t
    if scores[0][i] >= 0.5:
      mid_x = (boxes[0][i][1]+boxes[0][i][3])/2
      mid_y = boxes[0][i][0] + (boxes[0][i][2]-boxes[0][i][0])/6
      array_t.append([mid_x, mid_y])
      cv2.circle(image_np,(int(mid_x*width),int(mid_y*height)), 3, (50,150,255), -1)

 

在这之后,我们正在制作拍摄功能。因此,作为一个团队,我们选择我们要射击的对象。在这种情况下,我们试图射杀恐怖分子。所以首先,我们检查是否发现了恐怖分子的头颅。如果我们检测到至少一个头部,则使用所需的坐标调用shot(midx,midy)函数。如果我们没有检测到人头,我们就会检查也许我们检测到了恐怖分子的身体。(™)如果我们这样做了,我们调用相同的射击函数。否则,我们不会调用™射击函数。

 

team = "t"
if team == "c":
  if len(array_ch) > 0:
    Shoot(array_ch[0][0], array_ch[0][1])
  if len(array_ch) == 0 and len(array_c) > 0:
    Shoot(array_c[0][0], array_c[0][1])
if team == "t":
  if len(array_th) > 0:
    Shoot(array_th[0][0], array_th[0][1])
  if len(array_th) == 0 and len(array_t) > 0:
    Shoot(array_t[0][0], array_t[0][1])

 

请注意,如果我们想向反恐分子射击,我们在一线将“uroœtâuro�”改为“uroœcâuro�”。

 

这只是代码的简短说明,您可以从上面的文件下载完整的代码。在我的YouTube视频中,你可以看到我的CSGO aimbot模型是如何工作的。现在,我对我们的FPS真的很失望,因为没有人能玩到这样的数字-欧元,但我很高兴我们的机器人可以相当准确地瞄准敌人并射击他们。因此,也许在下一篇教程中,我会考虑我们可以做些什幺来让它更快地工作。

 

最初发表于https://pylessons.com/Tensorflow-object-detection-csgo-aim-bot
https://pylessons.com/Tensorflow-object-detection-csgo-aim-bot

 

原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/07/07/tensorflow%e5%af%b9%e8%b1%a1%e6%a3%80%e6%b5%8bcs%ef%bc%9ago-aim%e6%9c%ba%e5%99%a8%e4%ba%ba/

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注