Skip to content

It is used to free your hands and let "zhuanfu" work and move bricks for me at the DNF_BuWanJia processing plant.

Notifications You must be signed in to change notification settings

chaobingya/DNF-zhuanfu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

注意事项

本项目不参与商业用途,仅供学习参考。欢迎大家给星星,探讨共同副本,联系:chaobing0916(注明来源与目的)

打赏:

请作者喝杯咖啡吧

由于作者电脑只有集成显卡,当前图像识别任务都是跑CPU的,速度慢负担又重,严重影响了图像识别模型的产出效率。 请赞助下 4070显卡吧

请作者用4070吧

进度

当前还属于傻瓜状态,只用了红狗做示例,目前还是需要人工进行干预,大约3分钟完成。

todo 清单

  • 不同房间英雄技能释放顺序调整
  • 标注识别房间
  • 当英雄走到怪堆里容易无法识别,再就是会被一直击倒,无法释放技能
  • 提高图像识别精度,尤其是英雄、怪物、路线
  • 当前没有设置进入狮子头房间

install

当前电脑资源受限,未使用linux虚拟机,如遇到困难请联系作者。

安装python包

我使用的python3

pip install -i https://mirrors.aliyun.com/pypi/simple/  pip -U
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
pip install virtualenv
virtualenv venv  #创建虚拟环境
source venv/bin/activate.fish  #加载虚拟环境,此方法不同的bash有所区别。
pip install -r requirements.txt

标注

环境准备

包括label-studio服务、自己已经训练好的模型。如需自动化标注需添加后端机器学习SDK接口,当前未对外提供。

1、训练素材

多准备一下图片,也可以录屏后对视频进行剪切(python cut_video.py)。

2、label-studio

官网https://labelstud.io/guide/quick_start

virtualenv venv
source venv/bin/activate.fish #我用的fish命令,其他的去掉fish
pip install label-studio -i https://pypi.tuna.tsinghua.edu.cn/simple
lable-studio #会默认启动django web,端口8080端口,第一次要注册

web界面中创建工程,并上传训练图片,设置需要用的label

3、标注

选择图片,对图片中所有需要识别的对象进行label标注。

4、导出

导出格式选择yolo,会默认导出图片、对应的lable(txt格式)、class.txt(分类) 注意:图片名称与label文件名默认保持一致,不要随便修改。class里的分类不要随便改,也不要改顺序。

训练

对标注的图片进行训练,epoch暂选300以上

python yoloege.py

导出训练好的best.pt 模型

预测

使用上面训练的模型对图片或者视频进行对象检测。

yolo predict model=./runs/detect/train4/weights/best.pt source=./datasets/video/naima1.mp4

Android控制

scrcpy

scrcpy可以将安卓手机的画面投屏到电脑桌面显示上并进行操控。简单地说,就是可以让你在电脑上控制手机! 它支持鼠标控制、键盘输入、电脑剪切板复制粘贴、拖放文件传输到手机、以及拖放 APK 文件进行安装 步骤如下: 1、首先将手机与电脑连接。 2、打开手机的开发者模式 并开启USB调试,这里每个手机的位置不完全相同,请自行百度。 3、确保手机与电脑连接,在弹出的USB连接方式选择传输文件,没有连接成功重新接入下。(调试:可以通过adb devices命令查看是否连接成功: 输出的 List of devices attached 下面有设备信息表示成功,没有表示没连接成功) 4、开始投屏 5、结束投屏,中断命令即可

pygetwindow与pyautogui

使用pygetwindow库获取scrcpy的窗口。 使用pyautogui对scrpy窗口进行截图获取当前窗口对象,并控制鼠标实现点击、拖拽等操作。 其中定位都使用“笛卡尔坐标”,X坐标0向右增加,Y坐标0向下增加。

0,0       X increases -->
+---------------------------+
|                           | Y increases
|                           |     |
|   1920 x 1080 screen      |     |
|                           |     V
|                           |
|                           |
+---------------------------+ 1919, 1079

纵横坐标值分别表示像素值

    0,0       X increases -->
    +---------------------------+
    |        ^                   | Y increases
    |     top|                   | |
    |  left  |                   | |
    |<------>v ————————          | v
    |         |        | height  |
Y   |          ————————          |
    |            width           |
    +----------------------------+ 1919, 1079

思路

希望让执行代理(控制英雄角色)能像人一样做出智能决策,合理选择释放技能、精准位移、材料收集,考虑使用强化学习(Reinforcement Learning, RL)机器学习模型。 包括代理通过与环境的交互学习如何做出决策,以达到最大化长期的奖励(如游戏中的胜利、资源获取等)。关键点包括: -. 环境与状态: 游戏中的地图、敌人、资源等可以被视作环境的一部分,而英雄角色的位置、生命值、技能冷却等则是状态的表示。 -. 动作与策略: 英雄可以采取的动作包括释放技能、移动、捡取物品等。策略则是代理根据状态选择动作的方式。 -. 奖励与目标: 游戏的胜利或达成特定目标可以作为正向奖励,损失生命值或失败则可能作为负向奖励。

  1. 定义状态空间(State Space) 状态空间应该包含所有对决策过程重要的信息,状态表示精确定义游戏中的状态空间,例如角色位置、生命值、技能状态、周围敌人和资源的位置等:
  • 英雄的位置、朝向(左/右)
  • 英雄的控制状态,如站立、倒地、浮空、击飞、束缚、冰冻、减速等
  • 英雄的生命值、魔法值(目前不重要)、属性药剂等状态属性
  • 敌人的位置、类型和状态
  • 地图上的重要元素,如掉落物(含史诗等特殊闪光掉落物)、门的位置、移动方向、假怪、障碍物
  • 英雄当前的技能冷却状态、技能伤害、技能范围、释放速度
  1. 定义动作空间(Action Space) 动作空间应该包括所有可执行的操作,定义角色可以采取的动作,如释放特定技能、移动到特定位置、捡取特定资源等。:
  • 普通移动(上、下、左、右)
  • 闪现跳(狮子头或者快速位移)
  • 使用技能(每个英雄有特定的技能集)、普攻平A等
  • 捡取物品(史诗和粉装要单独检)
  1. 选择强化学习算法 对于这种具有离散动作空间和相对复杂状态空间的游戏,可以考虑以下几种算法:
  • DQN(优先):适用于离散动作空间,且已被证明在多种游戏上有效,网上也很多的例子。
  • A3C:异步更新可以加速学习过程,适合计算资源充足时使用。
  • PPO:平衡了学习稳定性和样本效率,适合需要精细调整策略的场景。
  1. 设计奖励函数(Reward Function) 奖励函数是引导智能体学习正确行为的关键,直接影响到代理学习到的策略,设计合理的奖励函数以引导代理向期望的行为学习。可能的奖励设计包括:
  • 击杀怪物:根据怪物类型给予不同奖励。
  • 收集物品:金币、材料、装备等给予相应奖励。
  • 通关:完成关卡给予大量奖励。
  • 避免受到伤害:受到伤害时给予负奖励。
  • 通关评分
  • 通关时间
  1. 训练和评估 使用模拟的环境进行训练,记录智能体的表现并根据需要调整策略,定期评估智能体在不同地图和不同英雄上的表现,并通过调整参数和优化奖励函数来提高代理的表现。 。

  2. 集成图像识别 利用图像识别技术来获取游戏状态信息,目前可以通过机器视觉算法准确识别出地图中的环境因素,作为状态空间的一部分输入到强化学习模型中。

  3. 模拟操作 根据智能体的决策,使用adb远程调试技术来模拟屏幕点击、滑动、拖拽等操作。安卓手机暂由模拟器代替。

  4. 考虑多英雄和技能特性 根据英雄类型和技能特性,可能需要训练多个模型或使用一个模型通过内部机制来区分不同英雄的行为策略。再就是同一英雄可能会有不同时装会影响机器视觉 检测率,英雄与怪重叠时不容易做出区分。

  5. 优化和调整 根据训练结果不断调整奖励函数、网络结构、学习率等参数。

  6. 实时监控和调整 在自动化测试过程中,实时监控智能体的表现,确保其按预期行动,并在必要时进行调整。

  7. 工具和库

  • OpenAI Gym:用于创建和比较强化学习算法的环境。
  • Stable Baselines:提供了多种强化学习算法的实现。
  • TensorFlow 或 PyTorch:用于构建和训练深度学习模型。
  • pygetwindow

总结

强化学习是一个迭代和实验的过程,可能需要多次尝试和调整才能达到满意的效果,考虑到游戏的多样性和复杂性,可能还需要对不同地图和不同英雄进行特定的策略调整。 强化学习+机器视觉是实现所需自动化游戏测试工具的最优选择,能够让英雄角色在没有人工干预的情况下,根据环境和目标做出智能的决策。 通过适当的模型设计和训练,实现英雄自动刷图通关、捡取奖励材料等任务的目标。

声明

本代码通过对游戏中本人刷图经验进行汇总,将日常搬砖vlog图像压缩后创建数据集,并根据对游戏理解进行标注,以训练和发展类人脑的 人工智能模型,再通过相关代码将模型部署到现实世界中,使用机器视觉来改变未来的操作模式。

本代码主要通过机器视觉对当前设备屏幕实时画面进行图像识别,运行机理为完全模拟人工操作点击屏幕,遵守游戏设定的规则,未多获取游戏资源与奖励, 并不会读取、修改游戏本地数据信息,也不会读取、修改服务器传输数据的信息,没有绕过新人类游戏公司的任何安全保护机制, 未使用技术手段突破了游戏的验证等安全措施,甚至一定程度优化了游戏体验,弥补这个无脑策划的游戏设计不足,减少枯燥反复的操作,让游戏回归本真。

About

It is used to free your hands and let "zhuanfu" work and move bricks for me at the DNF_BuWanJia processing plant.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages