大家好,今天来为大家分享探索后厂村游戏厅:基于PPTinyPose的简易体感游戏开发框架介绍的一些知识点,和的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
项目简介
近年来,随着虚拟现实技术和计算机图形学技术的迅猛发展,越来越多的体感游戏在市场上出现并受到欢迎。要让体感游戏具备良好的表现,就需要使用大量的传感器,甚至需要使用高性能的计算机和图形处理器。这不仅会增加游戏的成本,还会影响游戏的流畅性和操作体验。因此,如何在不使用传感器的情况下,实现高性能的体感游戏开发成为了一个颇具难度的问题。
▎当前已经开发完毕的小游戏包括
基于 pp-tinypose 的体感贪吃蛇游戏
https://aistudio.baidu.com/aistudio/projectdetail/4672452
基于 pp-tinypose 的体感飙车避障游戏
https://aistudio.baidu.com/aistudio/projectdetail/5686677
- 源码链接:
Liyulingyue/PaddleGames: Some games based on paddlepaddle (github.com)
02
项目使用模型及工具
▎PP-TinyPose 模型
PP-TinyPose 模型是飞桨目标检测套件 PaddleDetection 针对移动端设备优化的实时关键点检测模型,其可以流畅地在移动端设备上执行多人姿态估计任务。结合轻量化检测网络 PP-PicoDet 能够快速高效地完成检测任务,并应用在手机等计算能力有限的边缘设备上。
- 详细信息:
https://github.com/PaddlePaddle/PaddleDetection
▎FastDeploy 推理部署工具
FastDeploy 是飞桨推出的一款全场景、易用灵活、极致高效的 AI 推理部署工具,提供大量的开箱即用的部署体验。目前,FastDeploy 支持的模型包括了物体检测、字符识别、NLP、Stable Diffusion 文图生成等。内置的推理后端包含了 TensorRT、OpenVINO 等。
■ 使用 FastDeploy 调用 PP-TinyPose 的优势:
- 开箱即用,调用便捷
通过下述三行代码即可完成推理过程,无需对数据进行预处理。
import fastdeployimport cv2model=fastdeploy.vision.keypointdetection.PPTinyPose('PP_TinyPose_128x96_infer/model.pdmodel','PP_TinyPose_128x96_infer/model.pdiparams','PP_TinyPose_128x96_infer/infer_cfg.yml')img = cv2.imread('test.jpg')result = model.predict(img)- 推理效率更快
PaddleDetection 仓库已提供了性能优秀的的预训练模型。在此基础上, FastDeploy 不仅提供了开箱即用的 API ,对运算过程进行了一定的优化,从而提高了模型推理的实时性,有利于在线解算。
03
项目开发框架
▎基于 PyQt5 的通用简易体感游戏开发框架
游戏框架运行逻辑示例图 游戏框架运行逻辑示例图
一个简单的游戏框架可以没有任何关卡,甚至没有得分,只负责游戏的环境运营即可。例如贪吃蛇游戏,可以不设关卡,一直进行,直到蛇的身体充斥整个屏幕。这个最简单的逻辑结构一共需要准备两个部分的内容。
- 前端
如上图(右)所示,主要负责初始化页面信息,周期性地调用摄像头数据,并且推理,将推理结果传给后端,并获取当前的游戏画面。
- 后端
这里分开来表述只是为了后续维护方便,实际上完全可以混在一起。并且上图的表述更为偏向人而非代码的逻辑,所以会和后续的代码介绍有些出入。下面分别对游戏开发框架的前后端代码进行介绍。
▎前端
前端主要分为两个部分:初始化和周期性调用函数。
■ 通过 PyQt5 创建前端页面,初始化需4个部分
- 游戏管理器初始化:用于创建游戏变量
- 界面初始化:用于定义用于展示的前端页面组件
- 计时器初始化:初始一次,就会周期性调用指定的函数
- 设备初始化:开启摄像头
■ 在周期性调用函数中,需要完成以下操作体系
- 读取图片进行推理
- 将推理信息传递给游戏管理器
- 获取游戏画面
- 展示画面
需要注意的是,这里为了拆解功能,把更新数据和展示画面分开了。代码如下:
def inferModel(self): # read pic from camera _, img = self.camera.read() # 从视频流中读取 img = cv2.flip(img, 1) # 摄像头画面反转 img2 = cv2.resize(img, (500, 500)) # 把读到的帧的大小重新设置为 640x480 showPic = QImage(img2, img2.shape[1], img2.shape[0], QImage.Format_BGR888) self.Pred_Box.setPixmap(QPixmap.fromImage(showPic)) try: result = self.model.predict(img) self.keypoints = result.keypoints showPic = QImage(img, img.shape[1], img.shape[0], QImage.Format_BGR888) self.Pred_Box.setPixmap(QPixmap.fromImage(showPic)) except: pass def updata_frame(self): self.inferModel() # infer and show # update balance self.game_obj.update(self.keypoints) # 绘制游戏窗口 img = self.game_obj.draw_canvas() showPic = QImage(img, 500, 500, QImage.Format_BGR888) self.Game_Box.setPixmap(QPixmap.fromImage(showPic)) # 游戏结束 state, score = self.game_obj.get_game_state() if state: # 游戏结束 QMessageBox.information(self, "Oops!", "游戏结束!\n您的分数是" + str(score), QMessageBox.Yes) self.game_obj.__init__()▎后端
后端主要分为两个部分,初始化和更新信息。初始化内容由游戏信息决定,比如我们当前想要写一个能够随着手部移动而移动的游戏,则如下所示,只需要定义 self.x、self.y、self.score 用于保存坐标点信息和得分即可。
class GameObject(object): def __init__(self): self.x = 100 self.y = 100 self.score = 0信息更新阶段也是随着游戏内容决定的,例如对于一个能够随着手部移动而移动的游戏,只需要每个周期根据传入的 keypoints 更新对应的坐标值即可。方便起见,可以将功能拆解,例如专门使用一个函数绘制画面或判断游戏状态。例如实例中,如果坐标值超过250即判断为错误。
def update(self, keypoints):self.x = keypoints[9][0]self.y = keypoints[9][1]def get_game_state(self):game_status = Falseif self.x >250:game_status = Truereturn game_status, self.scoredef draw_canvas(self):# draw balanceimg = np.ones([500, 500, 3]).astype('uint8') * 255cv2.circle(img, (int(self.x), int(self.y)), 5, (255, 0, 0), 3) # draw circlereturn img▎运行
定义好一切后,只需要在主函数中启动 PyQt5即可。
if __name__ == '__main__': app = QApplication(sys.argv) ex = Window()sys.exit(app.exec_())基于上述框架,在开发一个简易的体感小游戏时,只需要在后端代码中更新所需要逻辑即可,不需要对前端内容进行大改。
04
总结
同样,也欢迎大家提交代码到 Liyulingyue/PaddleGames: Some games based on paddlepaddle (github.com),一起改进这个 Demo 或者共同开发出更多有趣的小游戏!
用户评论
厉害了!用PPTinyPose做轻量级体感游戏,这个想法真不错啊。我去后厂村试玩一下,感觉这很有潜力,比现有的体感游戏更亲民一点。
有20位网友表示赞同!
太赞了!这种简易开发框架简直是福音,以后想体验一下体感游戏的感觉也可以自己动手弄一个,不用花大价钱去买现成的设备。后厂村的小伙伴们一定可以玩出新花样!
有15位网友表示赞同!
我一直觉得后厂村就是个创意聚集地,现在又有了这个开发框架,肯定能吸引很多开发者来这里一起玩转体感游戏!我特别期待能够用这套框架开发一些有趣的交互类游戏。
有14位网友表示赞同!
嗯……基于PPTinyPose的简易体感游戏开发框架听起来确实有点意思,但不知道实际体验怎么样?后厂村的环境不太适合大型游戏厅开张吧?而且现在年轻人还是更喜欢手机游戏的趋势。
有14位网友表示赞同!
这个想法很有创意!我之前也想过要开个小型游戏厅,现在有了这种轻量级的开发框架,是不是可以试试用它来开发一些小规模的体感游戏呢?后厂村的技术氛围比较浓厚,肯定有很多专业人才可以提供帮助!
有11位网友表示赞同!
感觉这个PPTinyPose的框架还是比较局限性的。想做出真正好玩的游戏,还需要很多其他的技术支持,光是这个框架可远远不够。
有19位网友表示赞同!
去后厂村开游戏厅?感觉有点老旧了,现在年轻人更喜欢在家玩网游,或者是在手机上体验AR/VR游戏吧。体感游戏的用户群体还是相对较小。
有8位网友表示赞同!
我觉得这个开发框架很有潜力,能吸引很多热爱技术的年轻开发者们。如果能在后厂村举办一些相关的技术沙龙或比赛,相信会更有吸引力。也许可以组织一场“基于PPTinyPose的简易体感游戏设计大赛”呢?
有13位网友表示赞同!
后厂村真的适合开个有创意的游戏厅啊!现在很多年轻人喜欢探索新的游戏体验。用这个框架开发一些趣味性强的小游戏,肯定会有不少人愿意来玩玩看。
有17位网友表示赞同!
如果想提高游戏的质量和体验感,还需要更多的资源支持和技术积累。光靠一个简单的开发框架还难以做出引人入胜的游戏作品。后厂村的硬件设备是否能够满足体感游戏的需求呢?这块还是需要好好考虑一下
有10位网友表示赞同!
这个PPTinyPose的框架真是太棒了!感觉操作起来也相当方便,对于一些没有编程基础的人来说,也能轻松上手开发简单的游戏。说不定以后我也可以试试自己开发一款简易体感游戏,期待去后厂村体验一下其他人的作品!
有11位网友表示赞同!
其实想做好一个游戏厅还是非常有难度的,需要考虑很多方面的因素,包括场地租金、设备采购、人员招聘等等。这个基于PPTinyPose的框架只是一个工具,能否成功还得看项目的整体规划和运作策略。
有14位网友表示赞同!
后厂村开游戏厅?这可是个很棒的想法!我觉得很多年轻人都在找一个地方可以放松身心,体验新奇的游戏。加上这个简易开发框架,后厂村的小伙伴们一定能够发挥创意,制作出一些独具特色的体感游戏。
有13位网友表示赞同!
有点担心这个游戏厅的未来发展前景吧?现在的游戏市场竞争非常激烈,要想在一个相对封闭的空间获得足够的用户流量,难度还是蛮大的。还得好好想一下如何吸引观众和增加人气。
有20位网友表示赞同!
这个框架对我们学习体感游戏的开发原理来说很有帮助!它可以让我更直观地理解一些代码逻辑,也能让我更好地练习实践操作。说不定以后我也能用它制作出自己的作品,参加后厂村的一些比赛或者分享会呢?
有6位网友表示赞同!
去后厂村开游戏厅听起来挺酷的!如果能够开发一些社交互动的体感游戏,那肯定很受欢迎啊。比如可以做成团队合作的挑战类游戏,或是多人竞猜类的游戏等等,这样可以增加参与者的互动性和趣味性的同时也能吸引更多人慕名而来。
有15位网友表示赞同!
虽然这个框架很简单,但它已经足够我作为一个初学者入门了!我觉得现在有很多想体验体感游戏的玩家,而这些开发工具就可以帮助他们更容易地实现自己的想法。后厂村这种充满活力的环境也为他们的创作提供了很好的支持!
有17位网友表示赞同!
希望这个开发框架能够在后厂村的游戏项目中得到更多应用,也能吸引更多的优秀开发者加入进来,共同把体感游戏的玩家体验提升到更高的水平!期待看到他们打造出一些真正惊艳的作品!
有16位网友表示赞同!