Navigation

    CreatiCode Scratch Forum

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • CreatiCode

    人工智能 - 利用人体姿势检测做健身游戏(仅限高级版,难度:3级)

    小教程
    1
    1
    217
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      creaticodeteacher2-mail last edited by admin

       

      用到的相关知识

      • 使用变量
      • 读取列表
      • 图形特效
      • 肢体检测人工智能

       
       

      介绍

      在这篇教程中,大家将利用人体姿势检测做一个健身游戏。不同的姿势将显示在舞台上,玩家要以最快速度做出这些姿势。

       
       

      第1步 - 新建一个项目

      在创益编程游乐场中新建一个项目。删除角色“角色1”,把角色“空的1”改名为“主角”。

       
       

      第2步 - 运行身体部位检测

      当点击绿旗时,我们要立即运行身体部位检测。这会打开摄像头并实时分析摄像头影像。大家要把“调试”设置为“是的”,就会自动显示身体关键部位。

      1.png

       
      在“变量”类别中会自动创建一个表格“i”。请勾选表格“i”前面的勾选框,使其在舞台显示:

       
      然后运行程序。大家会看到身体关键部位被标记出来,表格“i”实时更新:

       
       

      第3步 - 添加深蹲造型

      接下来,取消勾选表格“i”,添加一个“深蹲”姿势的造型。大家可以用造型“多利亚-d”,然后改名为“深蹲”:

       
      把角色大小设为130,然后移动到舞台右下角。这是玩家的第1个目标姿势。

       
       

      第4步 - 分析这个深蹲姿势

      尽管我们知道每个身体部位的位置,但我们不知道玩家摆的是什么姿势。为了自动检测玩家是否是深蹲姿势,我们重点看这4个点位:左胯、右胯、左膝、右膝。

      主要观察点为,当玩家做深蹲姿势时,两个膝盖的距离要比左右胯部距离宽得多。

       
      为了让逻辑简单,我们假设玩家的身体没有左右倾斜,那么我们就可以只用这4个部位的x坐标计算距离:

      • 膝盖距离 = 右膝x坐标 - 左膝x坐标
      • 胯部距离 = 右胯x坐标 - 左胯x坐标

       
       

      第5步 - 读取表格

      现在我们新建4个变量来表示这4个身体部位的x坐标:“左胯x”、“左膝x”、“右胯x”、“右膝x”。

      我们可以从表格“i”读取变量的值。再次勾选表格“i”的勾选框来查看内容。例如左胯的x坐标,我们先找到“X”列,然后找到其行号为12:

       
      那么,我们就可以把这个值读取到变量“左胯x”,如下所示:

      3.png

       
      读取这4个变量的积木如下所示:

      4.png

       
       

      第6步 - 计算距离

      我们得到了4个身体部位的x坐标,现在可以计算膝盖之间的距离、胯部之间的距离。

      新建2个变量“膝盖距离”、“胯部距离”,来表示这两个距离。

      “胯部距离”就是右胯与左胯的x坐标之差:

      6.png

       
      同理,膝盖距离就是右膝盖与左膝盖的x坐标之差。这一步做完后的完整程序如下所示:

      5.png

       
       

      第7步 - 根据距离计算姿势

      我们的程序知道了这2个距离,现在就可以对比二者以判定玩家是否为深蹲姿势。我们可以用一个简单规则:如果膝盖距离大于跨步距离的两倍,就算是一个好的深蹲姿势。

      新建一个变量“姿势”,将其默认值设为“未知”。如果膝盖距离大于胯部距离的两倍,我们就把“姿势”设为“深蹲”。

      7.png

       
       

      第8步 - 重新编排积木

      因为我们添加的所有新积木都为了计算玩家姿势这一个目的,我们应该制作一个新积木。新积木命名为“计算姿势”,然后把所有新积木移动到这个积木的定义中:

      8.png

       
       

      第9步 - 防备无效值

      如果摄像头影像检测不到身体部位,表格中的对应项就将被设为-10000。如果胯部、膝盖的x坐标这4个变量有一个为-10000,这些数据就作废无效。

      因此,我们应当再添加一些逻辑来忽略无效数值,比如要求全部4个变量大于-250。提示,如果舞台上能看到身体部位,那么x坐标就一定大于-240。

      9.png

       
       

      第10步 - 重复不断计算姿势

      当玩家移动并修改姿势后,表格“i”中的数值将持续不断更新。因此,我们应当重复不断计算玩家的姿势,可以用一个无限循环来完成:

      10.png

       
       

      第11步 - 检查是否为“深蹲”姿势

      现在我们可以重复不断检查变量“姿势”的值。一当该值变为“深蹲”,我们就展示一条成功消息。

      11.png

       
      运行程序后得到如下结果:

      succ1.gif

       
       

      第12步 - 设置目标姿势

      现在我们把基本的游戏机制做出来了,下一步就是让游戏更有趣。我们给玩家提供多个目标姿势,玩家要尝试完成这些姿势来得分。

      第一步,我们新建一个变量“目标姿势”,表示玩家要做的下一个目标姿势。

      我们可以用这个新变量重新编写代码:

      12.png

       
       

      第13步 - 将目标姿势在“深蹲”和“站立”之间切换

      当用户完成目标姿势后,我们就应当把目标换成一个新姿势。简便起见,我们让目标在这两个姿势之间切换:“深蹲”和“站立”。

      我们可以为此制作一个新积木“切换目标姿势”。如果“目标姿势”为“深蹲”,那么下一个目标应当为“站立”。否则,如果“目标姿势”不是“深蹲”,那一定是“站立”,那么我们就要切换回“深蹲”。

      13.png

       
       

      第14步 - 制作“站立”造型

      为了显示出目标姿势改变了,我们也要更换角色的造型。

      找到“多利亚-c”造型并添加到角色中,重命名为“站立”。

      14.png

       
      我们还需要为这个造型做一些细微调整。原来左边的腿向旁边伸出,我们可以选中整条腿并旋转到直立位置:

      Animation3.gif

       
      此外,头部侧视,可能会让玩家感到迷惑。我们只需删除这个头部,然后从“深蹲”造型复制一个头:

      Animation4.gif

       
       

      第15步 - 切换造型

      当我们切换“目标姿势”,同时也要切换造型,从而使玩家看到下一步做什么姿势:

      15.png

       
       

      第16步 - 视觉效果/听觉效果

      当目标姿势切换完成后,为了给玩家清晰反馈,我们要展示一些视觉效果。例如,在切换至下一个造型之前我们可以让角色瞬间变亮。并且,我们还可以播放收集硬币的声音:

      16.png

       
       

      第17步 - 检测玩家是否为“站立”姿势

      在积木“计算姿势”的定义中,目前我们只检查了是否为“深蹲”姿势。我们还要检查玩家是否为“站立”姿势。简便起见,我们还是看膝盖距离和胯部距离。如果玩家站立,膝盖距离应该比胯部距离稍大一点点。我们假设,当膝盖距离小于跨步距离的1.2倍时就算是站立:

      17.png

       
      现在游戏就做好了。每当玩家做出目标姿势,我们就切换至下一个目标姿势:

       
       

      创意扩展

      在这个项目的基础上大家可以制作一些更有趣的东西:

      • 游戏规则:大家可以设置不同的游戏规则。例如,大家可以为玩家设置时间限制(比方说1分钟),获得金币最多的玩家胜利。还可以要求玩家完成60次姿势,用时最短的获胜。

      • 改进姿势检测方法:现在我们只看膝盖和胯部,大家还可以检查胳膊。比如,要求胳膊水平伸直,大家可以比较手腕和肩部的y坐标。

      • 其他目标姿势:大家可尝试添加更多有趣的姿势。例如,让玩家做一个“X”姿势,如下图所示。需要用手腕和脚踝的x坐标和y坐标来检测这一姿势。

      • 双人模式:当有两个玩家站在摄像头前面时,两个人都能被身体姿势检测引擎所检测到,这使得大家能够制作双人游戏。例如,每当玩家A做一个姿势,这个姿势就作为玩家B的目标。这样的话,玩家B就要重复玩家A的姿势。
      1 Reply Last reply Reply Quote 0
      • First post
        Last post