在当今快节奏的社会中,久坐成为了许多人日常生活的一部分。长时间保持同一姿势,尤其是不正确的坐姿,可能导致颈部肌肉紧张和疲劳,进而引发各种健康问题。然而,由于工作或生活习惯,许多人难以找到足够的时间或动力来进行规律的身体锻炼。因此,开发一种既能吸引用户参与,又能在日常生活中轻松融入的锻炼方式变得尤为重要。
本项目正是基于这样的背景,利用Mind+软件中的AI机器学习ML5功能,特别是人脸关键点识别技术,来创造一种新型的互动体验。通过这项技术,我们能够精确捕捉到用户的面部动作,尤其是眼睛的坐标点。通过分析两眼坐标点在垂直方向上的差值,我们可以判断出用户的头部倾斜方向。这种判断机制被巧妙地应用于控制一个虚拟角色飞机的运动,用户通过倾斜头部来操纵飞机,躲避陨石,或接收“红包”奖励。
这种游戏化的锻炼方式不仅增加了锻炼的趣味性,还鼓励用户在享受游戏的同时,进行颈部的伸展和运动,从而缓解久坐带来的颈部压力。此外,通过将锻炼与日常活动相结合,用户可以在不知不觉中提高自己的身体健康水平,同时也能够享受到科技带来的便利和乐趣。
制作过程
步骤1 增加“扩展”——功能模块——机器学习(ML5)
步骤2 人脸关键点识别
使用Mind+软件和AI机器学习ML5库中的FaceAPI进行人脸关键点识别的脚本。程序的主要目的是通过识别和分析用户的面部动作来控制一个虚拟角色飞机的运动。以下是对程序各部分的详细说明:
初始化阶段:
程序开始时,首先需要初始化FaceAPI,这是ML5库中用于人脸追踪和关键点识别的功能模块。摄像头控制:
程序提供了一个功能,允许用户通过按下空格键来开启或关闭摄像头。这允许用户在需要时激活或停用面部识别功能。人脸追踪和关键点标记:
一旦摄像头开启,FaceAPI将开始追踪画面中的人脸,并标记出关键点,特别是左右眼的位置。循环执行:
程序进入一个循环执行阶段,这将不断检测和更新人脸的关键点信息。人脸检测:
在循环中,程序首先检查FaceAPI是否检测到了人脸。如果检测到人脸,程序将进入下一步。计算差值:
程序计算画面中第一个人的左眼和右眼的垂直坐标差值。这个差值将用于判断用户的头部倾斜方向。差值约束:
为了保证差值的稳定性和防止极端值的出现,程序将差值限制在一个最小值和最大值之间,这里是-50到50。差值映射:
将计算出的差值映射到一个新范围内,这里是从-50映射到240。这个映射过程可能用于调整控制飞机运动的灵敏度或范围。控制逻辑:
映射后的差值将用于控制虚拟角色飞机的移动,例如,当用户头部向右倾斜时,差值增大,飞机可能向右移动以躲避障碍物或接收奖励。步骤3 “飞机”程序
这段程序是一个基于Mind+软件的飞行游戏控制脚本,它使用变量"差值"来控制卡通飞机角色的动画和位置。以下是对程序各部分的详细说明:
空格键控制:
当按下空格键时,程序会触发一些操作,但具体操作在这段代码中未给出。卡通飞机造型切换:
程序中定义了两种不同的卡通飞机造型:"卡通飞机-顶部"和"卡通飞机-正面"。用户可以通过点击来在这两种造型之间切换。飞机大小调整:
根据造型的不同,飞机的大小也会相应调整,"卡通飞机-正面"的大小设为100,而"卡通飞机-顶部"的造型大小设为30。循环执行:
程序进入一个不断循环的阶段,这允许飞机动画和位置的连续更新。差值变量控制:
根据变量"差值"的值,程序会执行不同的动画和位置设置。这个"差值"是由前面提到的FaceAPI计算得到的,用于控制飞机的移动。动画播放:
如果"差值"变量的值满足特定条件,程序将播放一系列的飞机动画造型,例如"卡通飞机-顶部4"到"卡通飞机-顶部6",并在每个造型之间等待0.1秒。位置调整:
在动画播放过程中,飞机的x坐标会根据"差值"变量的值进行调整,以实现飞机在屏幕上的水平移动。反向动画播放:
如果"差值"变量的值在另一个范围内,程序将播放另一系列反向的飞机动画造型,例如"卡通飞机-顶部7"到"卡通飞机-顶部9"。默认造型和位置:
如果"差值"变量的值不在上述任何范围内,程序将设置飞机回到默认造型"卡通飞机-顶部",并可能将其位置重置到屏幕中心或某个预设位置。动画循环:
无论飞机执行了哪种动画,最后都会回到初始造型"卡通飞机-顶部",并可能再次播放"卡通飞机-顶部2"到"卡通飞机-顶部3"的动画循环。步骤4 “陨石”程序
这段程序是一个飞行游戏的控制脚本,用于生成和管理陨石的行为,同时处理玩家与陨石的交互。以下是对程序各部分的详细说明:
初始化陨石生成:
当按下空格键时,程序会初始化陨石的生成。陨石的X坐标是一个在-200到200之间随机选取的数,Y坐标固定为240,这代表陨石从屏幕顶部生成。随机标识设置:
程序为每个陨石设置一个随机的"标识"值,这可能用于区分不同类型的陨石。循环执行:
程序进入一个循环执行阶段,不断更新陨石的位置和状态。陨石移动和检测:
如果陨石移动到屏幕边缘(坐标200或-200)或者碰到了卡通飞机,程序会执行相应的操作。如果陨石碰到飞机,会触发得分增加的逻辑,并将"标识"重置为一个新的随机数,然后将陨石的位置重置到屏幕顶部。陨石动画:
根据"标识"变量的值,程序为不同类型的陨石播放预设的动画序列。每个动画序列由一系列造型和等待时间组成,造型之间的切换以0.1秒为间隔。陨石类型和动画:
程序定义了至少四种不同类型的陨石(标识1至4),每种陨石都有自己独特的造型和动画序列。如果"标识"变量的值不在这四个值之内,程序将执行默认的陨石5的动画序列。陨石下落:
如果陨石没有碰到飞机或到达屏幕边缘,程序将增加陨石的Y坐标(即向下移动),模拟陨石从屏幕顶部向下落的效果。这里Y坐标增加-10,表示陨石向下移动。陨石造型切换:
在循环的每次迭代中,根据"标识"变量的值,程序会切换陨石的造型,为游戏增加视觉多样性。得分机制:
当陨石碰到卡通飞机时,除了重置陨石的位置和"标识",还会增加玩家的得分,这是游戏中玩家获得奖励的一种方式。步骤5 “红包”程序
这段程序是一个飞行游戏中控制红包生成和交互的脚本。程序的主要功能是在玩家按下空格键时生成红包,并允许玩家通过操作卡通飞机来收集红包以增加得分。以下是对程序各部分的详细说明:
空格键触发显示:
当玩家按下空格键时,程序会触发红包的生成和显示。红包初始位置:
红包的X坐标被设置为一个在-200到200之间随机选取的数,而Y坐标固定为240,这意味着红包会在屏幕顶部的某个随机水平位置生成。循环执行红包逻辑:
程序进入一个循环,不断检查红包的状态和位置,以及玩家的互动。红包移动和屏幕边缘检测:
红包会向下移动,如果其Y坐标增加至-185(接近屏幕底部),或者如果红包碰到了卡通飞机。红包与飞机的交互:
如果红包碰到卡通飞机,玩家的得分会增加。程序还会改变红包的造型,可能是为了表示红包已被收集。红包造型和位置重置:
在红包被触碰后,程序会等待一秒钟,然后将红包的造型切换为另一种(例如从"红包1"切换到"红包2"),并重置红包的X坐标为一个新的随机数,Y坐标保持在240,准备生成新的红包。红包持续下落:
如果红包没有碰到飞机,程序会持续增加红包的Y坐标(即向下移动),模拟红包从屏幕顶部向下落的效果。这里Y坐标增加-10,表示红包向下移动。等待时间:
在每次循环迭代中,程序会等待0.2秒,这可能是为了控制红包下落的速度,使其与游戏的节奏相匹配。附件
演示视频
罗罗罗2024.10.13
太牛了