程序员买啥游戏机,自己动手做一个体感小游戏
本文分享自华为云社区《ModelBox开发案例 - 体感小游戏》,作者:菊厂飞戈。
前段时间,小鱼老师在 AI 说发布了文章 ModelBox推理真的高效吗,里面介绍了双阶段单人人体关键点检测案例,运行速度超快:使用原生的 ONNXRuntime API 做开发,可以达到 36fps;而ModelBox
版本(推理框架同样是 ONNXRuntime),更是达到了接近 80fps!
于是乎,笔者产生了一个大胆的想法:这么快的人体关键点检测应用,不用来跑游戏可惜了呀!经过一段时间的开发调试,结合一个仿制的简易 Flappy Bird 游戏,ModelBox
体感小游戏诞生了:
玩家通过上下摆动双臂做出“扇动翅膀”的动作,阻止小鸟下落,躲避画面中的“狼柱”;如果小鸟不小心碰到了“狼”或者触碰到画面边缘,游戏停止,然后会重新开始。画面左上方显示的是玩家存活的时长。
本案例使用的是 Windows 版本的 ModelBox SDK
,如果对此还不熟悉,请先阅读 ModelBox端云协同AI开发套件(Windows)开发环境篇,如果对 ModelBox
AI 应用开发感兴趣,欢迎参加我们的 ModelBox实战营。
工程结构
本案例是在小鱼老师的 single_human_pose
应用基础上修改而来,案例所需资源(代码、模型、测试数据等)均可从 obs桶 下载。工程目录与原始版本基本一致,下面列出其中不一样的地方:
Flappy Bird
本案例中游戏相关的资源和代码在 data/game 目录下,我们可以直接执行其中 src 下的 main.py 文件,得到一个使用键盘控制的 Flappy Bird 游戏。main.py 文件中的核心函数内容如下:
可以看到,其中包含了 3 个小游戏:贪吃蛇、吃豆人和 Flappy Bird。游戏界面使用 OpenCV 绘制,程序将打开 0 号摄像头,将游戏画面叠加在摄像头画面上;在每帧的绘制中,程序阻塞 1ms 等待键盘响应,根据按键不同控制游戏的运行:按下空格键将控制小鸟往上飞行一段距离(具体内容查看 src/flappy.py )。开发者可以解开另外两个游戏的注释代码,试试它们的游戏效果。
关键点绘制功能单元
Flappy Bird 游戏与人体关键点检测应用的结合,完全容纳在 draw_pose 功能单元中。在原始的 single_human_pose
应用里,这个功能单元只是将检测到的关键点数据绘制到画面中;本应用中,在得到人体关键点数据后,又计算了双臂与身体的夹角,如果检测到“扇动翅膀”的动作,则控制小鸟往上飞行一段距离。游戏画面与高斯模糊后的人体关键点画面叠加在一起显示,既能看到 AI 应用的效果,也不至于干扰到游戏画面的显示。
camera 流程图
游戏的运行需要实时的摄像头画面,因此本案例增加了使用 PC 自带或者外接的 USB 摄像头作为输入源的流程图,对应文件为 single_human_pose_camera.toml
,其中的流程图描述 graphconf 内容如下:
与 single_human_pose.toml
相比,这个流程图使用 local_camera 替换了 video_demuxer 和 video_decoder 功能单元,其他部分是一致的。
打开工程目录下bin/mock_task.toml
文件,修改其中的任务输入和任务输出配置为如下内容:
即使用编号为 0 的摄像头(默认为 PC 自带的摄像头),输出画面显示到名为pose_game
的本地屏幕窗口中。
执行bin/main.bat camera
运行应用,就可以开始游戏了:
改造自己的体感小游戏
本案例展示了 ModelBox
AI 应用与游戏的结合,开发者可以调整其中的游戏逻辑控制游戏的难易程度,如小鸟降落/飞升的速度、狼柱的出现频率与位置等;还可以改成使用其他动作或者手势控制小鸟飞行,如僵尸跳、开合跳等;另外,案例中提供了贪吃蛇、吃豆人这两款游戏源码,开发者也可以将它们改造成体感小游戏。
行动起来,去享受 AI 与游戏的乐趣吧~~
11 月 3 号晚 19 点,将进行 AI 养猪 实时看护猪的健康直播,华为云 AI 发烧友在线带你学习 ModelBox 框架,快速 AI 应用,实现 AI 监测猪的健康状态。
参与直播互动,有机会赢取华为自拍杆、雷柏机械键盘、ModelArts 书籍等多重好礼,还等什么,马上报名吧!
报名链接:http://su.modelarts.club/5a7o
版权声明: 本文为 InfoQ 作者【华为云开发者联盟】的原创文章。
原文链接:【http://xie.infoq.cn/article/35a3937396842c956de785417】。文章转载请联系作者。
评论