导语
2020 年 7 月,咱们探讨了 AI 与自动化测试的关系,并向大家介绍了腾讯互动娱乐事业群 TuringLab 团队出版的《AI 自动化测试:技术原理、平台搭建与工程实际》一书。这本书将 TuringLab 团队基于深度学习的自动化 AI 测试框架根底的开发与利用教训具体的展现在读者背后,与读者分享了腾讯游戏是如何将 AI 技术与自动化测试相结合实现测试需要的。在 文章推送(超链接:https://mp.weixin.qq.com/s/vK…)后,不少用户留言反馈了对书中提到的 AI SDK 的浓厚兴趣,并询问如何下载应用。
当初,Game AI SDK 开源版本正式对外公布 !欢送各位开发者 下载体验(超链接:https://wetest.qq.com/product…)。
本篇文章将用 4k 字左右的篇幅,向读者们具体介绍 Game AI SDK 的相干内容。同时,为了更好的理解用户的应用反馈和意见,TuringLab 团队的技术大佬们创立了技术交换 QQ 群(群号:1095989343),欢送大家退出。
基于图像的游戏场景自动化框架
一、概述
在自动化测试畛域,针对游戏场景的自动化是一个难点,目前还没有通用的技术计划。这是因为游戏是高度个性化的产品,不同品类游戏玩法差别极大。每款游戏通常都是独立设计开发,游戏开发商也不对外裸露对立的接口,这也意味着传统的基于 API 接口进行自动化的计划在游戏畛域并不通用。此外,期待游戏开发商对外提供对立的自动化接口,也是件不事实的事件。
为了反对游戏场景的自动化,基于图像识别和游戏 AI 等方面技术,腾讯 Turing Lab 开发了基于游戏图像的 AI 自动化框架——Game AI SDK。整个计划不依赖游戏开发商提供任何 API 接口,以游戏图像作为输出,以触屏操作为输入,相似于咱们人类玩游戏的过程。示意图如下所示:
目前 Game AI SDK 曾经在多个品类多款游戏的自动化测试上进行了验证和利用,并获得了良好的成果。一个典型的 AI SDK 利用示意图如下所示:
l 左侧为游戏终端设备,运行待自动化测试的游戏;
l 右侧为游戏自动化框架 AI SDK,依据输出图像决策游戏操作;
l AI Client 连贯了游戏终端设备和 AI SDK,从终端设备上实时获取游戏图像,并将 AI SDK 决策的游戏操作转换为触屏操作
二、AI SDK 架构介绍
1、技术架构
AI SDK 整体技术框架如下图所示,次要蕴含 IO Service、Manager Center、UI 自动化、游戏场景辨认、AI 自动化等几个模块。
各模块的外围性能如下:
l IO Service
负责 AI SDK 的输入输出管制,输出为游戏图像,输入为点击、滑动等游戏动操作;同时还负责 AI SDK 外部服务状态的上报。
l Manager Center
从 IO Service 接管输出图像,分发给 UI 自动化模块或 AI 自动化模块,并转发 UI 自动化和 AI 自动化的游戏动作输入;同时也负责 AI SDK 服务状态的异样监控等。
l UI 自动化
通过图像识别算法,辨认游戏图像中用户配置的 UI 按钮或弹窗,并依据用户配置的 UI 操作,决策出该如何进行 UI 自动化流程,并最终进入游戏场景中。
l 游戏场景辨认
依据用户定义的场景辨认配置文件,辨认游戏场景内的游戏元素(敌人、血条、技能状态、数字等)。场景辨认的各项游戏元素的后果,将作为特色数据输出给 AI 自动化模块,具体须要辨认哪些游戏元素,依据 AI 需要自行定义。
l AI 自动化
依据场景辨认后失去的特色数据,进行 AI 决策,输入游戏操作,游戏操作通常为点击某个像素、在某像素区间滑动。
1、数据流程
AI SDK 自动化流程可分为游戏 UI 自动化和游戏场景自动化两个阶段,UI 自动化依据用户配置定义进入特定游戏场景,游戏场景自动化则在游戏场景中进行战斗、驾驶、降级等各种游戏自动化操作。两个阶段能够一直循环反复,每个阶段的数据流程如下:
1) 游戏 UI 自动化阶段
l AI Client 从手机端获取游戏图像后,通过 1、2、3 步骤将图像发送给 UI 自动化模块
l UI 自动化模块辨认 UI 界面中的按钮或弹窗,决策出须要进行的 UI 操作,并通过 4、5、6 步骤将 UI 动作输入至 AI Client
通过若干次 UI 自动化操作后,游戏从 UI 场景进入到游戏场景,进入游戏场景自动化阶段。
2) 游戏场景自动化阶段
l AI Client 从手机端获取游戏图像,通过 1、2、7 步骤将图像发送给游戏场景辨认模块,并辨认出游戏场景中各项游戏元素
l AI 自动化模块经步骤 8 获取到辨认后果后,依据游戏 AI 算法或特定逻辑规定决策出 AI 动作,经 9、10、11 步骤将 AI 动作输入至 AI Client
通过一段时间的游戏场景自动化操作,游戏场景完结,又返回到 UI 自动化阶段。
三、游戏场景自动化
因为游戏品类比拟多,从格斗游戏、赛车游到 FPS 射击游戏,不同游戏场景的游戏玩法差别极大;游戏画面中的元素包含敌人、道具、怪物甚至卡牌,不同游戏画面中须要辨认的游戏元素也存在极大差别。可能实用于多种游戏场景的自动化是 AI SDK 的外围性能,上面次要介绍 AI SDK 针对游戏场景的自动化计划。
1、游戏场景辨认
游戏场景辨认模块中提供了模板匹配、梯度模板匹配、特色点匹配、指标检测、深度神经网络等多种算法,辨认游戏场景中的游戏元素,并对外输入图像识别后果。具体辨认哪些元素,用户可由场景辨认配置文件自行定义。在 AI SDK 的场景辨认中,次要将游戏中须要辨认的元素分为以下几类:
l 固定物体指标
次要采纳各种模板匹配算法检测游戏场景中的固定指标物,如游戏中的按钮、图标、技能状态等。该办法会返回场景中检测到的指标物以及像素坐标。
l 形变物体指标
次要采纳卷积神经网络检测游戏场景中的图像形态易发生变化的指标物,如游戏角色、建筑物、车辆、怪物等。该办法会返回场景中指标物的地位及类别。
l 像素指标
检测出游戏图像检测区域内满足特定条件的像素点,该办法会返回符合条件的所有像素点汇合。
l 数字
该办法会返回游戏场景中检测区域内的数字和其所在的像素地位等信息。
l 血条
该办法会返回游戏场景中检测区域内的血量百分比和血条地位等信息。
在理论利用中,通常咱们将一个指标物和几个同类别的指标物定义为一个 task 工作,一个简单的游戏场景可能蕴含几十个须要辨认的 task 工作。要实现一次场景辨认,须要所有 task 工作都实现。游戏场景辨认模块的技术架构如下图所示:
1、为了升高工作检测的工夫耗费(如果场景辨认消耗太多工夫,那么场景辨认之后进行的 AI 决策就会存在很高的时延,重大制约 AI 自动化的体现),采纳了多检测工作并行运行的形式,充分利用多核 CPU 资源。
2、对于采纳深度网络模型进行检测的可形变指标物,工作耗时往往比拟长,会重大影响每一次场景辨认的性能。这里对深度网络模型进行了裁剪优化,缩小卷积核数目、缩小全连贯层神经元个数,在保障辨认准确率的状况下,尽量升高深度网络模型的性能开销。
3、针对游戏场景的图像特点,如游戏图像中存在很多的“半透明”的状况。即在辨认指标物的时候,会受到背景图像的重大烦扰,如上面图例所示。在游戏场景中,除了前置的图标不变外,图标的背景会一直发生变化。间接应用常见的模板匹配办法检测这些“半透明”指标物都不够现实,针对此类问题,场景辨认模块的算法也做了专门的优化。
2、游戏 AI 自动化
游戏 AI 自动化模块次要从场景辨认模块失去辨认后果,进行 AI 决策,并输入游戏操作(游戏操作通常为点击、滑动某个像素坐标点或区域)。游戏 AI 是一个简单的问题,从简略的硬编码规定、状态机、行为树 AI,到模拟学习、强化学习等基于深度学习的 AI,再到蒙特卡洛搜寻树 AI,不同类型游戏的 AI 决策往往须要不同的 AI 办法,或者多种 AI 办法来解决。为了便于扩大和反对不同类型游戏的 AI 算法,AI 自动化模块被设计为插件运行模式,不同的 AI 算法以插件的模式实现,并由 AI 自动化模块加载运行。
AI 自动化模块蕴含两种插件,别离是 Env 插件和 AI 插件。Env 插件次要是获取场景辨认的后果,并转化为特定的数据特色,数据特色能够是图像像素值,也能够是其它类型的结构化数据,或者两者的合集。AI 插件次要是游戏 AI 算法的实现,依据 Env 插件转化后的数据特色,进行游戏动作决策。Env 插件和 AI 插件的运行示意图如下:
每一次游戏场景自动化过程中,Env 插件和 AI 插件的运行过程如下:
l 进入游戏场景时,触发 AI 插件的 OnEnter 接口调用
l Env 插件的 IsStart 接口依据场景辨认后果,判断游戏场景开始执行时,触发 AI 插件的 OnStart 接口调用
l 之后进入 AI 主循环,AI 插件调用 Env 插件的 GetState 接口获取场景辨认后果特色数据,进行 AI 决策,输入游戏动作 action,而后调用 Env 插件的 DoAction 接口执行游戏动作
l Env 插件的 IsOver 接口依据场景辨认后果,判断游戏场景完结时,触发 AI 插件的 OnOver 接口调用
l 来到游戏场景时,触发 AI 插件的 OnLeave 接口调用
如果须要扩大新的游戏 AI 自动化性能,依照要求实现 Env 插件和 AI 插件接口即可。为了便于实现插件,AI SDK 中提供了两组 API 接口,别离是 Action API 和 Agent API。其中 Action API 对游戏中常见的各种动作进行封装,间接调用其中接口就能够输入各种游戏动作;Agent API 用于获取游戏场景辨认的各项后果,能够不便地获取游戏中各种指标物或按钮、图标状态等信息。值得注意的是,Env 插件和 AI 插件并不是一一对应的关系,如果不同游戏的 AI 算法是一样的,只有特色数据的解析形式存在不统一,那么 AI 插件就能够对应不同的 Env 插件。AI 自动化模块的技术架构如下:
除了提供插件零碎及其运行框架外,AI SDK 中还内置了强化学习、模拟学习地 AI 插件和 Env 插件,用户能够间接应用,不须要做任何改变。此外还提供了常见游戏类型的 AI 自动化算法框架,其中曾经实现了 AI 插件和 Env 插件的诸多性能。可基于这些常见游戏类型的算法框架,再联合本身的非凡自动化需要,实现 Env 插件和 AI 插件。
在理论的游戏场景自动化中,有以下几点须要留神:
1、单纯的一个 AI 算法很难满足理论自动化需要,往往须要在 AI 算法之上附加肯定的规定,如采纳模拟学习 AI+ 大量规定的形式来实现;
2、为了在游戏场景自动化过程中笼罩更多的状况,能够在特定 AI 算法之上附加肯定的随机性,让 AI 能摸索更多的场景;
3、游戏场景辨认的后果不能达到百分之百准确无误,针对辨认后果做一些简略的过滤或解决,能很好的晋升 AI 自动化的鲁棒性;
4、因为所有的游戏动作最终以模仿触屏的形式执行,管制好游戏动作中触屏的时长、滑动的像素间隔都能晋升咱们 AI 的体现。
四、利用举例
目前 AI SDK 曾经在竞速类、赛车类、FPS 类、MOBA 类、MMO 类等多种类型的游戏场景中进行了自动化验证,获得了不错的利用成果。可能针对多种游戏场景进行自动化测试,且不须要游戏端提供任何接口。一些游戏中的利用成果视频如下:
从运行形式上,AI SDK 可在本地部署运行,进行独自的游戏 AI 自动化测试。如果要进行批量大规模自动化测试,也能够部署在云端,提供线上游戏 AI 自动化测试服务,如下图所示:
五、总结和瞻望
本文介绍了基于图像的游戏场景自动化框架,框架的长处是不依赖游戏端提供接口或数据,计划通用性强,可实用于绝大多数游戏场景的自动化测试。且游戏场景自动化插件实现后,随着游戏版本的迭代更新,只有游戏的玩法不扭转,曾经实现的自动化过程个别不须要做批改,自动化过程保护的老本比拟低,不须要随着游戏外部实现的扭转而批改。
同时 AI SDK 目前也存在一些问题,尤其在易用性方面,如何让使用者更容易的应用是下一步要解决的问题。尽管 AI SDK 内置了罕用游戏 AI 算法,提供了常见游戏类型的 AI 自动化框架模板,能够无效的升高接入新游戏进行游戏场景自动化的老本,但对使用者也有肯定能力要求。咱们也在尝试将一些简略且通用性强的 AI 自动化过程来通过工具配置的形式让用户来实现,让一些普通用户也可能实现一些场景的 AI 自动化。其次,在场景辨认模块,晋升指标物辨认准确率,对实现 AI 自动化有诸多益处。而在晋升辨认准确率的同时升高性能开销,也是须要继续优化的问题。
目前腾讯 Turing Lab 编著的对于 AI SDK 及其利用的书籍《AI 自动化测试:技术原理、平台构建与工程实际》已上架可于 京东进行购买 (超链接:https://item.jd.com/12679219….)。AI ADK 也曾经对外开源凋谢,欢送各位开发者 下载体验。(超链接:https://wetest.qq.com/product…)
AI SDK 技术交换 Q 群|1095989343
性能测试技术交换群:720150565
查看 PerfDog 详情:https://perfdog.qq.com/?ADTAG…