位置: IT常识 - 正文

Ai实现FPS游戏自动瞄准 yolov5fps自瞄(游戏ai模式是什么意思)

编辑:rootadmin
Ai实现FPS游戏自动瞄准 yolov5fps自瞄

推荐整理分享Ai实现FPS游戏自动瞄准 yolov5fps自瞄(游戏ai模式是什么意思),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:ai制作游戏,ai加帧,ai智能打游戏,Ai实现FPS游戏自动瞄准 yolov5fps自瞄,Ai实现FPS游戏自动瞄准 yolov5fps自瞄,ai打fps,Ai实现FPS游戏自动瞄准 yolov5fps自瞄,ai打fps,内容如对您有帮助,希望把文章链接给更多的朋友!

大家好 我是毕加锁 (锁!)

今天来分享一个Yolov5 FPS跟枪的源码解析和原理讲解。代码比较粗糙 各位有什么优化的方式可以留言指出,可以一起交流学习。 

需要了解的东西和可能会遇到的问题1.xy坐标点与当前鼠标的xy坐标点距离计算

2.获取窗口句柄,本文使用的是根据窗口名称获取句柄

3.推理方式:本文使用的是GPU(为啥呢?速度快噻,因为我3060显卡噻~)。

4.屏幕宽高获取和敌人坐标获取和计算哪个是最近的敌人并控制鼠标去敌人身上和头上。(为什么说是身体和头部呢,因为还有一个方式,就是只需要敌人身体坐标就可以计算得出敌人头部坐标)干货噢~

Ai实现FPS游戏自动瞄准 yolov5fps自瞄(游戏ai模式是什么意思)

5.还有鼠标按键状态获取。

正文开始吧,我们就从头开始代码解析吧。先来一个两个xy坐标的距离计算

class Point():    def __init__(self, x1, y1, x2, y2):        self.x1 = x1        self.y1 = y1        self.x2 = x2        self.y2 = y2class Line(Point):    def __init__(self, x1, y1, x2, y2):        super().__init__(x1, y1, x2, y2)    def getlen(self):        changdu = math.sqrt(math.pow((self.x1 - self.x2), 2) + math.pow((self.y1 - self.y2), 2))        return changdu

上面这段代码的使用方式如下

L1 = Line(x1, y1, x2, y2)  #传入两个xy坐标L1.getlen() #return出两个坐标点的直线距离

接下来直接上全代码解析 各位可以把类和方法分离出去

# 这里是导入依赖,需要这些库import mathimport sysimport timeimport torchimport win32apiimport win32conimport win32guifrom PyQt5.QtWidgets import QApplicationfrom pynput.mouse import Controllerimport mouse#这里这俩class就是文章上面说的那个传入两个坐标点,计算直线距离的class Point():    def __init__(self, x1, y1, x2, y2):        self.x1 = x1        self.y1 = y1        self.x2 = x2        self.y2 = y2class Line(Point):    def __init__(self, x1, y1, x2, y2):        super().__init__(x1, y1, x2, y2)    def getlen(self):        changdu = math.sqrt(math.pow((self.x1 - self.x2), 2) + math.pow((self.y1 - self.y2), 2))        return changdu#第一步:我们获取到某FPS游戏的窗口句柄hwnd = win32gui.FindWindow(None, "穿越火线")#这个方法是获取上面句柄窗口的窗口截图,用的是PyQt截图,有速度更快更好的方式的话可以换上#截图完毕后保存在根目录的cfbg.bmp文件def screen_record():    app = QApplication(sys.argv)    screen = QApplication.primaryScreen()    img = screen.grabWindow(hwnd).toImage()    img.save("cfbg.bmp")#这里就是调用我们那yolo模型来进行推理啦,我设置的是cuda,也就是英伟达的GPU,因为cpu太慢了。#如果自己的不能使用GPU推理的话把下面这两行改改,改成cpu的就可以了。device = torch.device("cuda")model = torch.hub.load('F:/yolov5-master', 'custom', 'F:/yolov5-master/yolov5n6.pt',                       source='local', force_reload=False)  # 加载本地模型# 这里是定义屏幕宽高[其实这俩就是游戏所对应的分辨率,比如:游戏里1920*1080这里就是1920*1080]game_width = 1024game_height = 768# 这边就是开始实时进行游戏窗口推理了#无限循环 -> 截取屏幕 -> 推理模型获取到每个敌人坐标 -> 计算每个敌人中心坐标 -> 挑选距离准星最近的敌人 -> 如果左键是按下状态则控制鼠标移动到敌人的身体或者头部(本文计算方式是移动到头部)while True:    # 截取屏幕    screen_record()    # 使用模型    model = model.to(device)    img = 'cfbg.bmp'     # 开始推理    results = model(img)    # 过滤模型    xmins = results.pandas().xyxy[0]['xmin']    ymins = results.pandas().xyxy[0]['ymin']    xmaxs = results.pandas().xyxy[0]['xmax']    ymaxs = results.pandas().xyxy[0]['ymax']    class_list = results.pandas().xyxy[0]['class']    confidences = results.pandas().xyxy[0]['confidence']    newlist = []    for xmin, ymin, xmax, ymax, classitem, conf in zip(xmins, ymins, xmaxs, ymaxs, class_list, confidences):        if classitem == 0 and conf > 0.5:            newlist.append([int(xmin), int(ymin), int(xmax), int(ymax), conf])    # 循环遍历每个敌人的坐标信息传入距离计算方法获取每个敌人距离鼠标的距离    if len(newlist) > 0:        # 存放距离数据        cdList = []        xyList = []        for listItem in newlist:            # 当前遍历的人物中心坐标            xindex = int(listItem[2] - (listItem[2] - listItem[0]) / 2)            yindex = int(listItem[3] - (listItem[3] - listItem[1]) / 2)            mouseModal = Controller()            x, y = mouseModal.position            L1 = Line(x, y, xindex, yindex)            # 获取到距离并且存放在cdList集合中            cdList.append(int(L1.getlen()))            xyList.append([xindex, yindex, listItem[0], listItem[1], listItem[2], listItem[3]])        # 这里就得到了距离最近的敌人位置了        minCD = min(cdList)        # 如果敌人距离鼠标坐标小于150则自动进行瞄准,这里可以改大改小,小的话跟枪会显得自然些        if minCD < 150:            for cdItem, xyItem in zip(cdList, xyList):                if cdItem == minCD:                    # 锁头算法:使用win32api获取左键按下状态,如果按下则开始自动跟枪                    if win32api.GetAsyncKeyState(0x01):                        # 控制鼠标移动到某个点:看不懂计算方式的话看文章下面讲解吧O(∩_∩)O                        win32api.mouse_event(win32con.MOUSEEVENTF_MOVE, int(xyItem[0] - game_width // 2),int(xyItem[1] - (game_height - (xyItem[3] - xyItem[5])) // 2), 0, 0)                    break

好了,我们来讲解下这行代码win32api.mouse_event(鼠标行为:这里用的是MOVE相对移动, x坐标,y坐标, 0, 0) 第一个参数,先设定鼠标的行为:使用相对移动,为什么不用绝对移动呢,因为绝对移动在游戏里是无效的 第二个参数,x轴相对移动的距离:敌人x坐标 - (屏幕宽度 / 2) 第三个参数,y轴相对移动的距离:敌人y坐标 - (屏幕高度 - (敌人最大y坐标 - 敌人最小y坐标) / 2) 第一第二个参数相对来说比较好理解,但是可能有人对于第三个y的相对移动的计算方式有点懵,我画了个图,希望可以看明白。

实例图   图比较简陋 勿喷

 

在其他fps游戏,我们只需要修改窗口名称参数和分辨率参数即可。

以上就是Yolov5 FPS跟枪的源码解析和原理讲解了 感谢大家支持

我是毕加锁 期待你的关注

本文链接地址:https://www.jiuchutong.com/zhishi/297308.html 转载请保留说明!

上一篇:前端vscode必备插件推荐(墙裂推荐)(vscode写前端代码,如何运行)

下一篇:【注意力机制集锦】Channel Attention通道注意力网络结构、源码解读系列一(注意力机制cbam)

  • 2021酷狗教师节活动入口在哪儿(教师节 酷狗)

    2021酷狗教师节活动入口在哪儿(教师节 酷狗)

  • 古代励志故事大全(古代励志故事大全配感悟)

    古代励志故事大全(古代励志故事大全配感悟)

  • 华为nova9pro处理器是什么(华为nova9pro处理器相当于骁龙多少)

    华为nova9pro处理器是什么(华为nova9pro处理器相当于骁龙多少)

  • 荣耀10青春版华为机型叫什么(荣耀10青春版华为账号密码都忘记了怎么办)

    荣耀10青春版华为机型叫什么(荣耀10青春版华为账号密码都忘记了怎么办)

  • wxid后面一横怎么打(wxid_后面一堆字母数字)

    wxid后面一横怎么打(wxid_后面一堆字母数字)

  • 群文件怎么移动到群文件夹(群文件怎么移动到指定文件夹)

    群文件怎么移动到群文件夹(群文件怎么移动到指定文件夹)

  • 视频号认证有什么用(视频号认证有什么好处企业)

    视频号认证有什么用(视频号认证有什么好处企业)

  • 笔记本电脑运行内存几g的好(笔记本电脑运行怎么打开)

    笔记本电脑运行内存几g的好(笔记本电脑运行怎么打开)

  • cad如何生成方格网(cad怎么生成)

    cad如何生成方格网(cad怎么生成)

  • 医疗诊断属于计算机在哪方面的应用(医疗诊断属于计算机哪方面的应用)

    医疗诊断属于计算机在哪方面的应用(医疗诊断属于计算机哪方面的应用)

  • 朋友圈卡顿是什么原因(朋友圈太卡怎么办)

    朋友圈卡顿是什么原因(朋友圈太卡怎么办)

  • windows的桌面是指什么(windows的桌面是一个文件夹)

    windows的桌面是指什么(windows的桌面是一个文件夹)

  • 惠普1007用什么硒鼓(惠普1007用什么反骨)

    惠普1007用什么硒鼓(惠普1007用什么反骨)

  • 怎样在手机上交医保(怎样在手机上交养老保险)

    怎样在手机上交医保(怎样在手机上交养老保险)

  • 借充电宝可以不还回原来的位置吗(借充电宝可以不还吗)

    借充电宝可以不还回原来的位置吗(借充电宝可以不还吗)

  • word设置为独立一节(word设置独立页脚)

    word设置为独立一节(word设置独立页脚)

  • vivo手机led灯怎么开(vivo手机灯怎么调亮点)

    vivo手机led灯怎么开(vivo手机灯怎么调亮点)

  • vivo怎么关闭云空间(vivo怎么关闭云相册)

    vivo怎么关闭云空间(vivo怎么关闭云相册)

  • 手机不在服务区是什么原因(手机不在服务区怎么解决)

    手机不在服务区是什么原因(手机不在服务区怎么解决)

  • 支付宝怎么进团圆系统(支付宝怎么开团)

    支付宝怎么进团圆系统(支付宝怎么开团)

  • 手机怎么连接打印机(手机怎么连接打印机无线打印)

    手机怎么连接打印机(手机怎么连接打印机无线打印)

  • 拼多多如何清除推荐(拼多多如何清除个人信息)

    拼多多如何清除推荐(拼多多如何清除个人信息)

  • 步数宝邀请好友加成最高多少(步数宝怎么用)

    步数宝邀请好友加成最高多少(步数宝怎么用)

  • 小爱音箱可以连接ipad吗(小爱音箱可以连续对话吗)

    小爱音箱可以连接ipad吗(小爱音箱可以连续对话吗)

  • l和r那个是左右(l和r哪个是左那个是右)

    l和r那个是左右(l和r哪个是左那个是右)

  • Win10系统如何用自带网络诊断工具故障检测?(怎么使用win10)

    Win10系统如何用自带网络诊断工具故障检测?(怎么使用win10)

  • 操作系统的安全性(操作系统的安全目标主要包括哪些?)

    操作系统的安全性(操作系统的安全目标主要包括哪些?)

  • ubuntu下载的的VScode不能输入中文解决(ubuntu 安装vs code)

    ubuntu下载的的VScode不能输入中文解决(ubuntu 安装vs code)

  • avgupsvc.exe是什么进程 有什么作用 avgupsvc进程信息查询(电脑avg是什么软件)

    avgupsvc.exe是什么进程 有什么作用 avgupsvc进程信息查询(电脑avg是什么软件)

  • 个人所得税可以退吗
  • 企业季度所得税计算公式
  • 国税地税合并是成功的还是失败的
  • 资源税的征税对象都是原矿和选矿
  • 什么记在借方
  • 免征土地增值税
  • 捆绑销售行为怎么纳税
  • 建筑企业临时工工资申报个税
  • 行政划拨无偿取得发票
  • 有发票和银行单据的区别
  • 先收入后开票如何做账
  • 内部部门汇缴上级财务
  • 出口贸易没有进口贸易
  • 企业购车票可以抵扣增值税吗?
  • 所得税营业成本包括哪些
  • 年底开发票需要交企业所得税吗?
  • 老项目简易征收可以用进项抵扣吗
  • 小规模纳税人附加税减半征收
  • 企业所得税预缴政策
  • 企业可以同时按一般纳税和按小规模纳税吗?
  • 暂估成本冲回之后成本变为负的
  • 当月工资补扣个税吗
  • 承兑汇票章不清晰 情况说明
  • 支付员工补偿金计入管理费用的福利费用吗
  • 电脑win10点开始没反应
  • win10壁纸图片怎么删除
  • 会计凭证和记账凭证的区别是什么
  • 关于销售免税品的规定
  • 印花税是怎么计算
  • 承兑交单是什么的一种
  • php 反射 性能
  • 结转本月发生的费用
  • php循环语句
  • thinkphp import
  • thinkphp3.2框架
  • 编写jsp程序,实现简易计算机
  • tomcat的安装配置
  • js倒计时函数
  • 微信转账怎么处理退回去
  • 企业接受的非货币性投资按照 计入实收资本
  • 一般人转小规模政策到什么时候
  • 健身房注册公司能注册医疗吗?
  • 财产租赁合同印花税双方都要交吗
  • 固定资产入账及计提折旧
  • 预收账款退款的会计处理
  • 补提折旧以前年度损益调整
  • 企业清算未收到发票
  • 营改增小规模纳税人可以进行税额扣除
  • 民非企业怎么给员工交五险
  • 公司开办期间的住宿费会计分录
  • 工程没钱也没有工资
  • 2019年新政府会计准则解读
  • 应交税金借方余额在报表列示
  • 有形资产负债率多少合适
  • 存货跌价准备的账务处理
  • 建账选用什么会计制度
  • 企业偿债能力的含义
  • 计算机上没有运行windows无线服务
  • ssd固态硬盘内部结构图
  • win7系统如何创建管理员账户
  • jsp环境变量配置的步骤
  • win10系统的文件夹选项在哪里
  • win10桌面是什么样的
  • win8怎么改成win10
  • Cocos2d-x c++和java相互调用
  • shell随机
  • 深入linux内核架构与底层原理 pdf
  • dos批处理教程
  • 生成器作用
  • js四舍五入两位小数
  • 不要使用CSS Expression的原因分析
  • unity创建射线
  • unity自动寻路
  • es6 new set()
  • activate webstorm
  • 深入理解python递归
  • pythonstl
  • 图书销售税点
  • 如何填写财产申报表
  • 100万元的人民币
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设