导语 | GAME AI SDK 是腾讯 TuringLab 研发的首个开源项目,着重解决自动化测试工具中的通用性问题,最初主要用于游戏 AI 自动化测试服务,现在可用于手机 APP、PC 端游戏、软件等专项自动化测试。通过 AI 算法进行大数据训练的网络模型具有良好的通用性,可以直接在同一类游戏(软件)中适用。文章作者:周大军,腾讯 AI 工程组专家工程师。

一、GAME AI SDK概述

自动化测试的好处显而易见,但自动化测试的投入成本大却是一个很大的障碍。为了在游戏测试中引入自动化测试, 腾讯互娱 TuringLab 实验室研发了 Game AI SDK 自动化 AI 测试平台。通过接入腾讯公司运营期或测试期的商业游戏,不停的测试优化,最后推出这款 AI 自动化测试平台。

目前,GAME AI SDK 已正式对外开源,Git 开源地址:

https://github.com/Tencent/GameAISDK

同时 TuringLab 团队出版《AI自动化测试:技术原理、平台搭建与工程实践》一书,此书将 TuringLab 团队基于深度学习的自动化AI测试框架基础的开发与应用经验,进行了详细的描述,分享了如何将AI技术与自动化测试相结合完成测试需求的。

基于 GAME AI SDK 框架,可实现多种类型的手机游戏 AI 开发(本文重点介绍手机游戏方面)。目前我们已应用的游戏类型有:射击类(穿越火线,王牌战士), MMO(寻仙,龙之谷 ), 消除类(天天爱消除,消除者联盟),吃鸡(和平精英),赛车(QQ飞车), MOBA(王者荣耀), 格斗(魂武者,DNF), 动作(魂斗罗),卡牌(圣斗士星矢), 棋牌(天天德州),跑酷(天天酷跑) ,体育(最强NBA),飞行射击(全民飞机大战)等。

同时也可以应用在手机 APP 及 Windows 应用程序方面。不但适用于手机游戏专项测试,手机 APP 专项测试,而且适用于 PC 端游戏,软件等专项测试(专项测试是指如手机兼容性测试,客户端服务器端性能测试,版本回归冒烟测试,跑图覆盖率及代码覆盖率测试,软件健壮性及 crash 测试等这一类测试)。

二、GAME AI SDK的技术架构

GAME AI SDK 是一个平台工具系统,主要由四部分组成:

第一部分:AI SDK 平台,系统的核心功能都集成在这个平台里面。

第二部分:tools 工具集,用户可以根据系统提供的 SDKtool 进行 AI 相关配置操作,也可以根据需要,自行开发需要的工具,集成到 tools 工具集中。

第三部分:环境摸拟(EM),主要提供手机游戏的环境摸拟生成,用户可以通过配置快速生成游戏运行环境,这样在训练 DQN 等网络时能节省很多时间,大幅提高训练的效率。

第四部分:系统提供的 AI 模板库,目前是按游戏类型来划分的,用户可以根据自己的需求配置使用现有的 AI 模板库,也可以在AI模板库新增自己需要的模板。

结构如下图1所示:

图像自动识别深度学习python实例 图像识别自动化测试_图像自动识别深度学习python实例

图1 整体系统模块

1. GAME AI SDK平台核心部分架构

GAME AI SDK 平台的核心部分的架构图如图2所示:

图像自动识别深度学习python实例 图像识别自动化测试_算法_02

图2 GAME AI SDK平台架构图

GAME AI SDK 底层使用的是 TensorFlow 平台和 OpenCV 开源库,在此基础上开发自动化系统、图形图像识别系统、AI 算法系统几个核心功能模块。

  • 自动化系统:主要负责数据接入部分,如果是截图,则进行图像采集;如果是通过API传输数据,则进行通信连接。同时,会负责将AI的动作输出传到手机上执行。
  • 图形图像UI模块:负责游戏 UI 的识别与处理。
  • 图形图像识别模块:包括的平台所有的图形图像识别算法,负责游戏内所有的图形图像识别,并将识别结果传到 AI 算法模块。
  • AI算法模块:接收识别结果数据或者直接接收API输入数据,根据 AI 网络,输出数个(0个到几个)可能的动作,传回到自动化系统。

GAME AI SDK 平台通过自动化系统得到数据(如果是图像,得到的是手机截屏;如果是接口 API,则直接得到 API 提供的数据);把这部分数据输入到图形图像模块,图形图像模块拿到数据后,通过配置好的识别算法,识别出结果,再把这个识别结果输入到 AI 算法模块,AI 算法根据自己的网络,输出数个(0个到几个)可能的动作,传回到手机上面去执行,这样一次数据处理就完成了。

2. GAME AI SDK平台流程

(1)AI流程

用户的输入数据有两种方式:

  • 方式一:使用手机截图,平台通过图像识别得到 AI 需要的数据,然后进行 AI 训练。
  • 方式二:使用 API 接口得到 AI 需要的数据,然后进行 AI 训练。

方式一具有很好的通用性,不需要游戏项目额外做任何的改动,缺点是图像识别结果不一定完全准确。

方式二需要游戏项目额外提供数据 API 接口,因此需要投入额外的开发工作,但好处是数据是完全准确的,用户可以根据项目需要进行适当的选择。

整个 AI 流程如图 3 所示:

图像自动识别深度学习python实例 图像识别自动化测试_大数据_03

图3 AI流程图

  • Step1:用户通过数据预处理工具输入数据(手机截图或游戏数据);
  • Step2:GAME AI SDK 读取任务配置与AI算法配置;
  • Step3:通过环境模拟平台或在线直接进行 AI 训练;
  • Step4:将游戏数据存储到数据平台中,方便下次训练或者做数据分析使用(此步骤可选)。

(2)图像识别任务流程图

GAME AI SDK 平台的核心之一就是图像识别任务。在配置图像识别任务之前,如果此任务需要提前标注样本(如需要使用 YOLO 算法),则需要进行数据预处理,可以使用平台提供的 SDKTool 进行样本标注,也可以使用如 LabeImage 这种软件进行标注。

样本标注完成后,就可以使用平台提供的 SDKTool 进行任务配置(详细操作请参见下文第3章)。任务配置完成之后,就可以开始进行识别训练(如果需要进行训练的话)或直接进行识别了。

图像识别任务流程图如图 4 所示:

图像自动识别深度学习python实例 图像识别自动化测试_网络_04

图4 图像识别任务流程图

  • Step1:用户使用标注工具进行样本标注(识别算法需要标注样本才进行此步骤);
  • Step2:在 SDKTool 中进行任务配置;
  • Step3:开始任务预测试:在图像识别模块中进行图像识别;
  • Step4:如果用户只需要做图像识别,则直接将识别结果返回给用户;
  • Step5:如果用户需要 AI 模块,则将识别结果输入到 AI 模块;
  • Step6:用户如果觉得任务参数(包括图像识别算法参数)需要调整,则重新调整任务参数,然后继续进行任务预测试(step3),直到用户认为图像识别效果达到要求为止。

3. GAME AI SDK平台模块结构

(1)图像识别模块

图像识别模块的输入为图像帧数据,输出为图像识别得到的结果数据。在图像识别模块内部,底层使用的是 TensorFlow 平台和 Opencv 开源库,在此基础上,图像识别模块封装了一些常用的识别算法(如 YOLO,模板匹配,像素检测,特征点匹配等),用户可以直接通过配置使用这些算法,也可根据需要修改或者直接加入新的识别算法。

根据游戏本身的特点和需求,平台在通用层封装了一些游戏中常用的识别算法,如游戏中常见的数字、按钮、血条等的识别,用户可以直接使用,只需要在 SDKTool 工具里面配置就可使用。

图像识别本身的计算会根据图像大小成倍增加,为提高识别的性能,保证游戏的响应时间,在图像识别模块中使用了多线程来提高图像识别的性能,用户可以根据机器的性能及对响应时间的要求,灵活配置多线程的数量。

图像识别模块如图 5 所示:

图像自动识别深度学习python实例 图像识别自动化测试_编程语言_05

图5 图像识别模块

  • 图形图像识别与跟踪相关算法:此为图形图像识别算法模块,包括了一些常用图形图像识别算法,如像素检测、特征点匹配,梯度检测等,也包括了一些基于机器学习的识别算法,如 YOLO,LeNet 等。
  • comm:此模块封装了一些游戏里面需要经常用到的识别类型,数字类型:如游戏中的分数、速度、距离、子弹数等;血条类型:如游戏中角色的血量,怪物的血量,BOSS 的血量等。
  • 日志管理:系统日志管理模块,输出错误信息及程序运行信息,方便用户查看程序运行状态。
  • 多线程管理:因为图形图像识别的计算量会比较大,在复杂的识别任务或者要求高响应时间的应用场景下,可以使用更多的线程来进行图像识别,多线程管理模块可以很方便的设置多线程的运行数量。
  • 图像识别逻辑处理:在此模块中处理用户配置的图像识别任务。

(2)AI算法模块

AI 算法模块的输入有两种方式:一种是图像识别模块识别的结果数据,一种是直接从 API 接口拿到的数据。

AI 算法模块的底层也是使用 TensoFlow 平台,与手机相关的操作使用 ADB 模块,在此基础上内置了 DQN 算法和 IM 算法。用户通过配置 AI 算法模块的配置文件及修改算法参数,可以方便地使用这两个算法。

DQN 算法使用方便,不需要标注数据,可以直接接入游戏环境进行线上训练,特点是需要训练比较长的时间才会有一定的效果,但泛化性相对 IM 来说要好些。

IM 算法需要先记录样本数据(SDKTool 里集成了样本记录功能,用户可以直接使用),再根据样本数据进行训练,特点是训练时间相对 DQN 来说会短很多,但泛化性没有 DQN 好。

效果的好坏和记录的样本关系很大。用户可根据项目需求来选择使用哪种算法,或者自己开发新的算法。GAME AI SDK 提供了相关的 AI 算法接口,可以方便的扩展用户自定义的 AI 算法。

BeTree 是行为树,用户可以根据项目业务需求,自行定义相关的行为规则,控制 AI 的输出。

业务逻辑层主要是写具体的游戏业务相关的处理,比如用户需要进行动作过滤,可以在此编写相关的过滤规则,控制 AI 的输出满足游戏业务测试的需求。

AI算法模块如图 6 所示:

图像自动识别深度学习python实例 图像识别自动化测试_大数据_06

图6  AI算法模块

三、GAME AI SDK使用

1. 环境安装

GAME AI SDK 环境安装分本地环境安装及镜像方式安装,如果需在进行本地二次开发,建议使用本地环境安装方式,相关安装操作说明请参见源码文档中环境部署一节的说明。

如果只需要进行自动化测试相关测试操作,可以使用镜像方式(此方法简单容易上手,对测试人员比较友好):从 GAME AI SDK 官网(http://aitest.qq.com)下载相应版本的镜像安装包及本地编译包,本地解压后根据说明文档运行安装脚本就可以进行环境安装了。

2. SDKtool UI配置

GAME AI SDK 不需要进行脚本编写,只需进行少量的样本采样及标注就可以配置好。启动 SDKTool 工具,连接好手机(或配置其他的图像窗口),按相关要求进行配置,工具会自动生成相关的配置数据。

图像自动识别深度学习python实例 图像识别自动化测试_算法_07

图7 UI识别配置界面

3. SDKtool识别任务配置

识别任务是识别图片中的某些关键数据信息,然后把这些数据信息做为 AI 算法的输入。配置操作与 UI 识别配置相同。

图像自动识别深度学习python实例 图像识别自动化测试_网络_08

图8 识别任务配置界面

4. AI算法配置

GAME AI SDK 平台内置了 DQN 算法和 IM 算法,用户可不需要编写代码或者脚本,通过简单的参数配置,就可以使用平台内置的这两种算法。

其中 IM 算法训练及采样简单快速(30 分钟的样本及 30 分钟的离线训练时间),适用一某一特定的游戏场景,DQN 算法需要较长的在线衰弱时间,场景通用性较 IM 好。

图像自动识别深度学习python实例 图像识别自动化测试_图像自动识别深度学习python实例_09

图9 DQN算法参数配置界面

5. 动作定义及配置

根据项目的具体动作,可以通过 SDKTool 定义相同的运作,这样通过 AI 算法的训练,AI agent 就可以根据图片的输入信息进行计算,最后输出具体的运作,驱动游戏像玩家玩游戏一样自动运行起来。

图像自动识别深度学习python实例 图像识别自动化测试_大数据_10

图10 AI算法动作定义配置界面

6. 训练及运行

完成工程所需要的相关配置后,就可以使用 SDKTool 工具进行 AI 算法的训练及运行了。在 PC 机上连接好手机,就可以开始相关的训练,训练过程中的相关信息会通过界面显示出来。

图像自动识别深度学习python实例 图像识别自动化测试_算法_11

图11 IM训练过程中的进度信息显示

四、结语

GAME AI SDK 的目标是开发一个比较通用的自动化平台,让用户更专注于测试业务本身。它放弃了传统的脚本自动化的方法,使用深度学习及图像识别算法从图像中提取中关键数据信息,做为AI算法的输入。通过大数据量的训练得到一个通用的网络模型,网络模型本身就具有了较好的通用,可以在同一类项目中适用。

理论上,数据量越多,网络模型本身的效果和通用性就越好。AI 算法及图像识别算法发展越来越快、越来越好,GAME AI SDK 也在不断努力优化与完善中,如果你有建议或需要技术支持,欢迎在评论区与我们联系。

参考链接:

[1] 项目开源地址:
https://github.com/Tencent/GameAISDK

[2]  GAME AI SDK 官网:

http://aitest.qq.com