通过YOLOV5实现:王者荣耀百里守约自瞄

news2024/11/22 16:46:51

前期提要:

本文章仅供技术讨论使用。

关于如何通过YOLOV5去检测到王者中的敌方人物,在网上有很多相关的文章和教学视频我在这里就不过多的阐述,本篇文章主要讲的是在实现中比较难处理的一些技术点:如何获取高刷新率的手机屏幕、王者荣耀中的技能遥杆方向和实际技能释放方向不一致的问题要如何解决。

如何获取高刷新率的手机屏幕

目前主流的解决方案是通过scrcpy来实现高刷新率的获取,其原理是让手机上建立一个视频流rtp的服务端,然后电脑通过对接这个rtp视频流就可以直接获取手机屏幕的信息根据这个理论得到的最终时间延迟仅仅5ms
e9eeb767dac1ed8f84ef40160c99b59.jpg

如何实现呢?

scrcpy的文档中的描述如下
image.png
这里说好要如何实现了,但是这都是通shell命令来实现了,那么让python去执行这个shell命令,然后让python搭建一个客户端接收来自手机端的视频流数据,最后通过opencv来显示不就可以了吗?是的,当这些都已经有人封装好一个包给你,你只需要调用即可
https://github.com/leng-yue/py-scrcpy-client
image.png
它的文档中关于如何使用也是非常简单的:
image.png

还有细节:慢放效应如何解决

经过我实际上手使用后发现,一旦我把接收到的视频帧数据进行处理,我在代码上打印出了fps高达100多,但是电脑获取的手机画面就延迟非常高!为什么呢?这是因为接收到一帧后处理花费10ms然后放到opencv显示,而opencv显示的时候会比较慢,实际上1秒钟代码可以处理100张,但是opencv显示只能显示40张,那么剩下60张就会放到第2秒中显示,这样的话第二秒就要显示160张图片,第3秒也就是120+100张,以此类推你就会发现越到后面你发现电脑显示手机屏幕中游戏人物的动作非常流畅,但是游戏里面的人物动作非常慢。解决方法也是非常简单,自己定义一个队列,开启两个线程,一个是显示线程,一个是处理游戏数据的线程,当处理游戏画面线程处理好一帧图片后就把这帧放到大小为3的队列(大小可以自己确定)中去,而显示线程就会一直去队列中取帧来显示,这就确保取到的帧都是最新处理过的。
image.png

如何解决遥杆方向和技能释放方向不一致的问题

问题描述:
假设我识别到敌人在我的左上方60°,那么我技能遥杆移动的方向也是左上方60°,但是由于王者是一个3D游戏,遥杆的位置和人物的位置不一样,那么技能遥杆移动的方向也是左上方60°,可能技能释放的反向就是54°。你可能回想到加一个偏移比如60°偏移-6°即可?但实际情况是如果遥杆瞄准方向是65°,那么技能释放方向就是57°,二者相差由6°变味了8°,如果遥杆135°,那么实际技能释放就是150°相差变为+25°,这就很难做一个简单的偏移来解决问题了。
image.png

我做了很多信息收集和猜想假设最后得出了公式image.png

当我把技能释放的角度固定为x轴的角度的时候,我发现魔法值变成了线性关系了
image.png
通过计算得到 魔法值=-0.0066x+1.6 其中x是敌人和我在x轴的角度

最终得到的效果

在这里插入图片描述

如何提升准度呢?

通过机器学习的sklearn工具包以及最新的5个角度数据,通过5个角度的数据进行线性回归,之后预测第6和第7个预测数据,一次提升准确度。示例代码如下:

import numpy as np
from sklearn.linear_model import LinearRegression

class Predict:
    def __init__(self):
        self.angles = []

    def set(self, angle):
        self.angles.append(angle)
        if len(self.angles) > 5:
            self.angles.pop(0)

    def predict(self):
        if len(self.angles) < 5:
            return None
        # 将时间和角度映射成一维数组,并reshape成(n, 1)格式,方便模型训练
        X = np.array(range(len(self.angles))).reshape(-1, 1)
        y = np.array(self.angles).reshape(-1, 1)
        model = LinearRegression().fit(X, y)

        # 对第6个和第7个时间点进行预测
        next_time_steps = np.array([len(self.angles), len(self.angles) + 1]).reshape(-1, 1)
        prediction = model.predict(next_time_steps)
        return prediction.flatten()

predictor = Predict()
predictor.set(10)
predictor.set(20)
predictor.set(30)
predictor.set(40)
predictor.set(50)
print(predictor.predict())  # Outputs: [60. 70.]
predictor.set(60)
print(predictor.predict())  # Outputs: [70. 80.]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/781756.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hive 调优集锦(1)

一、前言 1.1 概念 Hive 依赖于 HDFS 存储数据&#xff0c;Hive 将 HQL 转换成 MapReduce 执行&#xff0c;所以说 Hive 是基于Hadoop 的一个数据仓库工具&#xff0c;实质就是一款基于 HDFS 的 MapReduce 计算框架&#xff0c;对存储在HDFS 中的数据进行分析和管理。 1.2 架…

贤鱼的刷题日常(数据结构链表学习)-1748:约瑟夫问题--题目详解

&#x1f3c6;今日学习目标&#xff1a; &#x1f340;例题讲解1748:约瑟夫问题 ✅创作者&#xff1a;贤鱼 ⏰预计时间&#xff1a;15分钟 &#x1f389;个人主页&#xff1a;贤鱼的个人主页 &#x1f525;专栏系列&#xff1a;c &#x1f341;贤鱼的个人社区&#xff0c;欢迎你…

NLP实战8:图解 Transformer笔记

目录 1.Transformer宏观结构 2.Transformer结构细节 2.1输入 2.2编码部分 2.3解码部分 2.4多头注意力机制 2.5线性层和softmax 2.6 损失函数 3.参考代码 &#x1f368; 本文为[&#x1f517;365天深度学习训练营]内部限免文章&#xff08;版权归 *K同学啊* 所有&#…

Okhttp-LoggingInterceptor的简单使用

概述 Okhttp除了提供强大的get,post网络请求外&#xff0c;还包含请求日志的拦截器&#xff0c;可以监视&#xff0c;重写&#xff0c;重试调用请求。 简单使用 我们在构造OkHttpClient时&#xff0c;通过addInterceptor()方法添加我们需要的过滤器。 object OkhttpUtils{……

SpringBoot知识范围-学习步骤【JSB系列之000】

语言视频选择收录专辑链接C张雪峰推荐选择了计算机专业之后-在大学期间卷起来-【大学生活篇】JAVA黑马B站视频JAVA部分的知识范围、学习步骤详解JAVAWEB黑马B站视频JAVAWEB部分的知识范围、学习步骤详解SpringBootSpringBoot知识范围-学习步骤【JSB系列之000】微信小程序详细解…

【stable diffusion】保姆级入门课程04-Stable diffusion(SD)图生图-局部重绘的用法

目录 0.本章素材 1.什么是局部重绘 2.局部重绘和涂鸦有什么不同 3.操作界面讲解 3.1.蒙版模糊 3.2.蒙版模式 3.3.蒙版蒙住的内容 3.4.重绘区域 4.局部重绘的应用&#xff08;面部修复&#xff09; 5.课后训练 0.本章素材 chilloutmix模型(真人模型)百度地址&#xf…

数据结构—树状数组

树状数组 单点修改、区间查询区间修改、单点查询区间修改、区间查询 单点修改、区间查询 这里讲解树状数组的最基本操作单点修改、区间查询&#xff0c;当然能做到单点修改、区间查询&#xff0c;肯定就能做到单点修改、单点查询了。树状数组是用来快速求前缀和的&#xff0c;…

MGRE之OSPF实验

目录 题目&#xff1a; 步骤二&#xff1a;拓扑设计与地址规划​编辑 步骤三&#xff1a;IP地址配置 步骤四&#xff1a;缺省路由配置 步骤五&#xff1a;NAT的配置 步骤六&#xff1a;MGRE配置 中心站点R1配置 分支站点配置 中心站点R5 R1配置 分支站点配置 检测&…

UE 材质学习补充

Add Name Reroute Node ...&#xff08;本地变量&#xff09; 该节点可以整理节点&#xff0c;优化界面 Texture Texture(纹理图像)&#xff0c;一般由RGB三个通道混合构成&#xff0c;RGB三个通道的值代表亮度&#xff0c;RGB三个通道分别都是0-1&#xff08;0-255&#xff09…

征服FarmerJohn(二) Naptime【USACO05JAN】

题解目录 前言题目内容题目描述输入输出样例题目思路示例代码AC图片 后记往期精彩 前言 在上一期征服FarmerJohn&#xff08;一&#xff09;三角形【USACO2020FEB-B】结束之后&#xff0c;我们来看一道难度有所提升的DP问题&#xff0c;也就是常说的动态规划&#xff0c;今天我…

Please set the ROCKETMQ_HOME variable in your environment!

原因 启动ROCKETMQ执行命令start mqnamesrv.cmd时报错 翻译意思是请在您的环境中设置ROCKETMQ_HOME变量&#xff01; 查看mqnamesrv.cmd可以看到如果"%ROCKETMQ_HOME%\bin\runserver.cmd"不存在会报此错误 配置上环境变量ROCKETMQ_HOME即可

《深入理解计算机系统》(美)布赖恩特(Bryant,R.E.) 等

适合对象&#xff1a;对计算机感兴趣的朋友。 需要相关资料的可私信我。 持续更新中&#xff1a; 第一章&#xff1a;计算机系统漫游 主要知识点&#xff1a;解读全书结构框架&#xff0c;解释OS的原理和相关硬件软件。计算机系统是由硬件和系统软件组成&#xff0c;共同协作…

kafka消费者api和分区分配和offset消费

kafka消费者 消费者的消费方式为主动从broker拉取消息&#xff0c;由于消费者的消费速度不同&#xff0c;由broker决定消息发送速度难以适应所有消费者的能力 拉取数据的问题在于&#xff0c;消费者可能会获得空数据 消费者组工作流程 Consumer Group&#xff08;CG&#x…

如何在 SwiftUI 中使用 Touch ID 和 Face ID?

1. 需要通过指纹&#xff0c;面容认证后才能打开 App 2. 添加配置 需要向 Info.plist 文件中添加一个配置&#xff0c;向用户说明为什么要访问 添加 Privacy - Face ID Usage Description 并为其赋予值 $(PRODUCT_NAME) need Touch Id or Face ID permission for app lock 3. …

RTC在不同业务场景下的最佳音质实践

背景介绍 WebRTC是目前实时音视频领域最流行的开源框架。2010年Google收购GIPS引擎后&#xff0c;将其纳入Chrome体系且开源后&#xff0c; 命名为“WebRTC”。WebRTC获得各大浏览器厂商的支持并纳入W3C标准&#xff0c;促进了实时音视频在移动互联网应用中的 普及。2021年1月&…

算法练习——力扣随笔【LeetCode】【C++】

文章目录 LeetCode 练习随笔力扣上的题目和 OJ题目相比不同之处&#xff1f;定义问题排序问题统计问题其他 LeetCode 练习随笔 做题环境 C 中等题很值&#xff0c;收获挺多的 不会的题看题解&#xff0c;一道题卡1 h &#xff0c;多来几道&#xff0c;时间上耗不起。 力扣上的题…

Pytorch个人学习记录总结 06

目录 神经网络-卷积层 torch.nn.Conv2d 神经网络-最大池化的使用 torch.nn.MaxPool2d 神经网络-卷积层 torch.nn.Conv2d torch.nn.Conv2d的官方文档地址 CLASS torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride1, padding0, dilation1, groups1, biasTrue,…

TMS FNC Dashboard Pack Crack

TMS FNC Dashboard Pack Crack TTMSFNCWidgetProgress&#xff1a;循环进度指示器 TTMSFNCWidget设定值&#xff1a;带范围和设定值的值指示器 TTMSFNCWidgetMultiProgress&#xff1a;多个值的基于同心圆的进度指示器 TTMSFNCWidgetDistributionIndicator&#xff1a;各种模式…

【Kubernetes部署篇】ingress-nginx高可用架构实施部署

文章目录 一、环境说明二、实施过程1、部署Ingress Controller2、安装并配置Nginx3、安装并配置Keepalived3、测试keepalived主备切换 三、创建Ingress规则&#xff0c;测试七层转发 一、环境说明 1、环境说明&#xff1a; IP地址主机名称备注16.32.15.201node-1K8S节点16.32…

AMS358i和施耐德TM241 EtherNet 通信

产品、配件及工具型号 设备名称 型号 数量 激光测距 AMS358i 1 直流电源24VDC 1 连接电缆 KD U-M12-5A-V1-050 1 交换机 1 施耐德PLC TM241 1 AMS358i通信网线 KSS ET-M12-4A-RJ45-A-P7-020 1 网线 双向水晶头 2 电气连接图及说明 点击桌面的Somachi…