基于姿态识别的滑雪闯关挑战

2026-09-0910

前文提要:基于手势识别的 AI 点球守门挑战:https://mc.dfrobot.com.cn/article-385882.html

 

一:项目背景

在上一篇项目中,我尝试利用 AI 视觉手势与姿态传感器,结合自定义手势学习功能,在无需额外穿戴设备的情况下,制作了一个基于手势识别的 AI 点球守门小游戏。在这个项目的实践过程中,我发现这款传感器除了支持自定义手势识别之外,还支持自定义姿态识别

这让我产生了一个新的想法:如果手部动作可以用来控制游戏,那么人体的整体姿态,是不是也可以成为一种更加自然、更加直观的交互方式?

于是,我进一步尝试利用 AI 视觉手势与姿态传感器的自定义姿态识别功能,制作了一个体感滑雪小游戏。

在游戏中,玩家不需要使用键盘、鼠标或者手柄,而是可以直接通过身体向左、向右、翻转以及加速等动作控制虚拟滑雪角色。通过这个项目,我也希望进一步探索一种更加自然的交互方式:让人体动作成为人与虚拟世界之间的控制接口。

基于姿态识别的滑雪闯关挑战_image_1.webp

二:快速体验滑雪游戏

在开始游戏之前,需要先使用传感器配套的软件,对游戏中需要使用的目标姿态进行学习,使传感器能够识别玩家设定的动作。

完成姿态学习后,打开对应的 HTML 游戏页面,并连接 SEN0670 AI 视觉手势与姿态传感器。进入游戏后,选择想要挑战的模式,根据页面中的姿态提示完成相应动作,就可以通过身体姿态控制虚拟滑雪角色。

整个过程不需要佩戴额外的动作捕捉设备,只需要站在传感器前,通过身体动作即可完成游戏操作。

基于姿态识别的滑雪闯关挑战_image_2.webp

基于姿态识别的滑雪闯关挑战_image_3.webp

了解不同姿态对应的游戏动作

在正式开始挑战之前,我们先了解一下游戏中的不同姿态分别对应哪些操作。

本游戏主要使用了 6 种人体姿态:

人体姿态游戏动作
向左角色向左滑行
向右角色向右滑行
前空翻前空翻 360°
左侧前空翻左侧前空翻 360°
右侧前空翻右侧前空翻 360°
加速进入加速状态

掌握这些姿态之后,就可以根据游戏场景中的提示做出对应动作,从而控制滑雪角色完成闯关。

基于姿态识别的滑雪闯关挑战_image_4.webp

游戏效果展示

选择需要挑战的游戏模式后,玩家只需要站在传感器的识别范围内即可。实际体验时,玩家距离传感器约 2 米左右比较合适。

游戏开始后,根据屏幕中的提示摆出相应姿态,传感器会实时检测玩家的身体动作,并返回当前识别到的姿态 ID。程序接收到姿态识别结果后,再将不同的姿态转换成对应的游戏控制指令。

例如:身体向左 → 识别为 left → 游戏角色向左滑行;身体向右 → 识别为 right → 游戏角色向右滑行;摆出前空翻姿态 → 识别为 power → 触发前空这样,就实现了从人体动作 → AI 姿态识别 → 游戏指令 → 虚拟角色动作的完整交互过程。

以下是整个游戏的体验过程,你可以下载文末附件,根据此视频的步骤快速体验基于姿态识别的滑雪闯关挑战。

三:如何实现基于姿态识别的滑雪闯关游戏

为了让人体动作能够与游戏操作对应起来,我首先需要解决一个问题:如何把游戏中的操作设计成人体可以自然完成,同时又容易被 AI 视觉传感器区分的姿态?

经过尝试,我最终选择了 6 种差异比较明显的自定义姿态,分别对应:

  • 向左滑行
  • 向右滑行
  • 前空翻 360°
  • 左侧前空翻 360°
  • 右侧前空翻 360°
  • 加速

通过自定义姿态学习功能,可以让传感器记住这些动作,并为每一种姿态分配对应的识别 ID。之后,只需要在程序中建立姿态 ID 与游戏动作之间的映射关系,就可以将 AI 识别结果转换为游戏控制指令。

基于姿态识别的滑雪闯关挑战_image_5.webp

什么是姿态识别

姿态识别,简单来说,就是让机器能够“看懂人的身体动作”。系统首先通过摄像头获取人体图像,然后检测人体的关键点,再根据不同关键点之间的位置、距离、角度以及变化关系,判断当前人体属于哪一种姿态。

目前常见的人体姿态识别方式主要有以下几类:

识别方式实现方式原理局限
基于计算机视觉的姿态识别普通摄像头 + OpenPose、MediaPipe Pose、YOLO Pose 等人体姿态模型通过摄像头获取人体图像,利用 AI 模型检测人体关键点,并根据位置关系判断动作和姿态需要电脑端运行视觉模型,对计算性能有一定要求
基于深度传感器的姿态识别RGB-D 摄像头、深度相机(如 Kinect、RealSense 等)通过深度信息获取人体空间位置,相比普通摄像头可以获得更准确的三维人体结构,再进行姿态分析硬件成本较高,设备体积较大,使用环境存在一定限制
基于惯性传感器的姿态识别IMU、加速度计、陀螺仪、可穿戴设备通过检测人体运动过程中的加速度、角速度和方向变化,分析人体姿态和动作通常需要佩戴设备,动作范围和使用体验受到限制

与需要在电脑端运行姿态识别模型的方案不同,SEN0670 将 AI 视觉算法集成在传感器内部,可以直接完成人体姿态的检测与识别。电脑端不需要额外部署复杂的视觉模型,只需要接收传感器返回的识别结果,并根据结果完成后续的游戏逻辑。

更重要的是,SEN0670 支持自定义姿态学习。用户可以根据自己的项目需求,让传感器学习不同的人体动作,并为每个动作建立对应的识别结果。这也使它非常适合用来制作类似体感游戏、智能控制、机器人交互等需要人体动作作为输入的项目。所以本游戏选择使用SEN0670AI视觉手势与姿态传感器:https://www.dfrobot.com.cn/goods-4346.html

基于姿态识别的滑雪闯关挑战_image_6.webp

如何使用AI视觉手势和姿态传感器学习姿态

在设计滑雪游戏的控制方式时,我首先考虑的是:怎样把游戏中的移动、特技和加速操作,转换成玩家可以直接完成,同时又容易被传感器区分的人体动作?

在上一篇 AI 手势守门员项目中,我使用的是同一个手势 + 关节点坐标变化的方式,通过计算不同方向的坐标变化来判断扑球方向。这一次,我则直接利用 SEN0670 的自定义姿态学习功能,分别学习 6 种差异明显的人体姿态。

然后,将传感器返回的不同姿态 ID 映射到游戏中的不同动作: 姿态 → ID → 游戏指令 → 角色动作

这样就可以实现从人体姿态到游戏控制指令的直接转换。

基于姿态识别的滑雪闯关挑战_image_7.webp

第一步:打开官方学习工具

首先下载 SEN0670 AI 视觉手势与姿态传感器配套的官方软件,也就是文章最后的附件 1

解压后,双击其中的 .exe 文件即可启动软件。使用 USB 数据线将电脑与 SEN0670 连接,软件会自动识别传感器对应的串口。选择对应的串口并打开。

基于姿态识别的滑雪闯关挑战_image_8.webp

第二步:进入姿态识别模式,学习自定义姿势

在软件中选择姿态识别模式。然后站在距离传感器大约 2 米的位置,摆出自定义的姿势,这里以“向左”姿态为例。摆出姿态后,可以在左侧画面中看到人体关键点以及人体检测框。在还没有完成学习之前,人体关键点会以绿色显示。

基于姿态识别的滑雪闯关挑战_image_9.webp

摆出“向左”姿态后,点击学习按钮,保持这个姿态不动3秒左右,待身体关节点颜色由绿色变成其他颜色时,表示学习成功,然后可以自定义手势名称,命名为“left”。下方的实时数据显示的各个关节点的坐标。

按照同样的方法,可以继续学习:right、power、left360、right360、fast最终完成 6 种游戏控制姿态的学习。

基于姿态识别的滑雪闯关挑战_image_10.webp

下面是具体的姿态学习过程。也可以参考官方姿势学习教程:https://wiki.dfrobot.com/sen0670/docs/23979

姿态滑雪游戏程序实现

完成姿态学习之后,下一步就是让网页游戏能够接收 SEN0670 返回的姿态识别结果。完整的姿态滑雪游戏程序见文章最后的附件 2,打开 HTML 文件即可查看完整源代码。

基于姿态识别的滑雪闯关挑战_image_11.webp

整个 姿态滑雪游戏程序代码可以分为接入层、感知层、判断层和表现层四个部分。

基于姿态识别的滑雪闯关挑战_image_12.webp

接入层:获取传感器数据

在接入层:首先,程序需要与 SEN0670 建立通信,并接收传感器返回的数据。传感器识别到人体姿态后,会返回对应的姿态 ID。程序获取这个 ID 后,就可以进入下一步判断。

感知层:获取当前姿态

例如,假设当前传感器识别到的姿态 ID 为:

let poseId = detectedPoseId;

这里的 datectedPoseId 就代表传感器当前识别到的人体姿态。但对于游戏程序来说,直接使用数字 ID 并不直观。因此,我建立了一张姿态 ID → 游戏动作名称的映射表。

// 建立 SEN0670 姿态ID与游戏动作之间的映射关系
// 每一个ID对应一个已经学习完成的人体姿态
const POSE_MAP = new Map([
    [1, "left"],       // ID 1:向左滑行
    [2, "right"],      // ID 2:向右滑行
    [3, "power"],      // ID 3:前空翻 360°
    [4, "left360"],    // ID 4:左侧前空翻 360°
    [5, "right360"],   // ID 5:右侧前空翻 360°
    [6, "fast"]        // ID 6:加速
]);


// 获取 SEN0670 当前识别到的姿态ID
let poseId = detectedPoseId;


// 根据姿态ID查询对应的游戏动作
// 例如:ID 1 → left,ID 6 → fast
let currentAction = POSE_MAP.get(poseId);

通过这张映射表,传感器返回的数字 ID 就被转换成了更加直观的游戏动作名称。例如:

ID 1 → left → 向左滑行;ID 2 → right → 向右滑行;ID 6 → fast → 加速

这一步实际上就是连接AI 感知结果与游戏控制逻辑的桥梁。

判断层:根据姿态执行游戏逻辑

获得当前动作名称之后,程序就可以进一步判断玩家想要执行什么操作。

例如,左右滑行可以通过下面的代码实现:

// ===== 左右滑行控制 =====

// 当识别到向左或向右姿态,并达到置信度要求时
if(steeringName && conf >= 35){

    // left  → 向左滑行
    // right → 向右滑行
    Game.setSteer(
        steeringName === 'left' ? 1 : -1
    );
}

这里首先判断当前是否识别到了有效的转向姿态,同时要求识别置信度 conf 达到一定阈值。

当识别结果为 left 时:角色向左移动。

Game.setSteer(1);

当识别结果为 right 时:角色向右移动。通过这种方式,就可以把玩家的身体左右动作转换成游戏角色的左右移动。

Game.setSteer(-1);

这样,不同的人体姿态就分别对应了不同的游戏行为。最终,整个游戏形成了这样一条完整的数据链路:这也是整个体感滑雪游戏最核心的实现思路。

人摆出对应动作

   ↓
AI传感器识别人体姿态

   ↓

返回姿态 ID

   ↓

姿态 ID 映射为游戏动作

   ↓

程序判断置信度与动作状态

   ↓

执行游戏控制逻辑

   ↓

虚拟滑雪角色完成对应动作

核心程序解析

核心程序首先读取 SEN0670 返回的姿态 ID,再通过预先建立的姿态映射表,将不同姿态转换为对应的游戏控制指令。其中,ID 1 和 ID 2 分别用于控制角色左右滑行,ID 3~5 对应不同的翻转动作,ID 6 用于触发加速。这样就实现了从“自学习人体姿态”到“虚拟角色动作”的直接映射。

// 建立 SEN0670 姿态ID与游戏动作之间的映射关系
// 每一个ID对应一个已经学习完成的人体姿态
const POSE_MAP = new Map([
    [1, "left"],       // ID 1:向左滑行
    [2, "right"],      // ID 2:向右滑行
    [3, "power"],      // ID 3:前空翻 360°
    [4, "left360"],    // ID 4:左侧前空翻 360°
    [5, "right360"],   // ID 5:右侧前空翻 360°
    [6, "fast"]        // ID 6:加速
]);


// 获取 SEN0670 当前识别到的姿态ID
let poseId = detectedPoseId;


// 根据姿态ID查询对应的游戏动作
// 例如:ID 1 → left,ID 6 → fast
let currentAction = POSE_MAP.get(poseId);

当玩家摆出相应姿态,传感器读取到,程序会根据不同动作进入对应的游戏控制逻辑。其中,left 和 right 用于改变滑雪角色的移动方向,fast 用于控制加速状态,power、left360 和 right360 则进入特技动作判断。这样便完成了从“姿态识别结果”到“角色实际动作”的转换。

// ===== 左右滑行控制 =====

// 当识别到向左或向右姿态,并达到置信度要求时
if(steeringName && conf >= 35){

    // left  → 向左滑行
    // right → 向右滑行
    Game.setSteer(
        steeringName === 'left' ? 1 : -1
    );
}


// ===== 加速控制 =====

// 当识别到 fast 姿态时开启加速
if(name === 'fast' && conf >= 40){
    Game.setFast(true);
}else{
    Game.setFast(false);
}


// ===== 特技动作控制 =====

// 三种可以触发空中特技的姿态
const trickPose = [
    'power',
    'left360',
    'right360'
];

// 当姿态满足触发条件后执行对应动作
if(trickPose.includes(name)){
    Game.performTrick(name);
}

四:总结

通过这个项目,我对姿态识别在体感交互中的应用有了更直观的理解。SEN0670 AI视觉手势与姿态传感器不仅能够识别不同的人体姿态,还可以通过自定义学习建立属于自己的动作类别。在这个滑雪游戏中,我根据实际玩法设计了向左、向右、前空翻、左侧前空翻、右侧前空翻和加速等 6 个姿态,并将传感器返回的姿态 ID 映射为对应的游戏控制指令,再结合稳定判断、防抖和动作触发逻辑,实现了从真实身体动作到虚拟滑雪角色动作的实时转换。

从手势识别到姿态识别,我从 AI 视觉手势与姿态的交互方式不断学习到新的内容,未来,如果能够结合更多姿态数据和应用场景,人体动作还可以成为更多设备和系统的控制方式,例如体感游戏、智能设备控制、机器人交互等。也许未来人与机器之间的交流方式,不一定需要依赖键盘、鼠标或触摸屏,而是可以通过更加自然的动作完成沟通。

 

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(0)
- 没有更多了 -