查看类别

PoseNet—在 Scratch 中追踪全身姿态

🏃‍♂️ PoseNet—在 Scratch 中追踪全身姿态 #

PoseNet 扩展把由真正 AI 驱动的全身追踪功能带到了 Scratch 中。
它可以让你的项目对身体动作做出反应—走路、挥手、跳舞或跳跃—所有动作都可以直接在浏览器中实时识别,无需任何额外设置。
对学生来说足够简单,同时也足够强大,可以用于充满创意的课堂项目。 😊

PoseNet AI Extension Sample

 


🌟 概述 #

  • 检测全身: 追踪主要关节—头部、肩膀、肘部、手腕、髋部、膝盖和脚踝。
  • 33 个 landmark (特征点): 使用 BlazePose 模型,通过 33 个 keypoints (关键点) 追踪头部、手臂、躯干和腿部。
  • 读取坐标: 直接获取任何已检测身体关节在 Scratch Stage (舞台) 上的 X 和 Y 位置—可以用它们移动 sprite (角色) 或触发动作。
  • 测量: 计算两个关节之间的角度和距离。
  • 更改摄像头预览: 显示、隐藏或翻转实时摄像头画面,以适应你的使用方式。
  • 选择输入源: 可以分析实时摄像头画面,也可以直接分析 Scratch Stage 图像。

✨ 主要特点 #

  • 使用 BlazePose 模型进行单人全身追踪。
  • 为常用身体关节提供简单易用的下拉菜单。
  • 可调整“classify”检测间隔,让运行更加流畅。
  • 支持摄像头预览、透明度和设备选择控制。
  • 完全在浏览器中运行 — 安全且保护隐私。.

🚀 如何使用 #

  1. 前往: pishi.ai/play
  2. 打开扩展程序部分。
  3. 选择 PoseNet 扩展。
  4. 如果浏览器提示,请允许访问摄像头,并确认视频预览已经出现。
  5. 如果没有检测到摄像头,输入源会自动切换到 Stage 图像。
  6. 扩展加载完成后,会自动开始连续姿态检测(你可以随时调整检测模式)。
  7. 现在,你可以使用位置或测量积木,让 sprite 根据你的身体动作做出反应—移动、跳跃或挥手来控制你的项目!

尖端

  • 站在摄像头前,让整个上半身都清晰可见,并保持适当的光线。
  • 使用 people count (人数) 检查当前是否检测到一个人。
  • 在教室或较旧的设备上,建议先将分类间隔设置为 100–250 ms,以获得更流畅的运行效果。

🧱 积木和函数 #

📍 位置和数量 #

[KEYPOINT] 的 x 坐标,人物编号 [PERSON_NUMBER]
[KEYPOINT] 的 y 坐标,人物编号 [PERSON_NUMBER]

返回某个身体关节在 Stage 上的 X 或 Y 位置。
KEYPOINT:从下拉列表中选择一个关节(肩膀、肘部、手腕等)。
PERSON_NUMBER:选择要追踪的人(在 BazePose 中只能是 1)。“1”表示第一个检测到的人。

如果没有检测到人、所选关节位于摄像头画面之外,或者该关节的检测置信度低于最低阈值,则返回空值。

 

人数

返回当前检测到的人数(0 或 1)。为了获得最佳准确度,BlazePose 一次只追踪一个人。


📏 测量 #

关键点之间的角度: [KEYPOINT_1] 和 [KEYPOINT_2] 对象号: [PERSON_NUMBER]

返回同一个人身上两个关节之间的角度(单位:度)—非常适合检测抬手、身体倾斜或姿势。

关键点之间的距离: [KEYPOINT_1] 和 [KEYPOINT_2] 对象号: [PERSON_NUMBER]

返回两个关节之间的 Stage 像素距离—非常适合检查步幅或臂展。

当找不到 x/y 时返回 [RETURN_TYPE]

选择当找不到人或关节时,坐标积木应该返回什么。
RETURN_TYPE:可以保留最后一次找到的坐标,也可以返回空值。

注意:
Default keypoints (默认关键点): 11 (left shoulder) 和 12 (right shoulder).
坐标以 Stage 中心为原点(X ≈ −240240, Y ≈ −180180).
当视频被镜像时,X 坐标值也会翻转,以与你在屏幕上看到的方向保持一致。


🎯 置信度🎯 置信度 #

设置最低置信度为 [CONFIDENCE|text]

设置关节被视为有效检测结果所需的最低检测分数(0–1)。
如果某个关节的 confidence (置信度) 低于此阈值,它就会被忽略—也就是说,X/Y、角度或距离积木会返回空值,而不是不稳定的数值。

0.1 —默认值:适合一般使用,可获得流畅的追踪效果。
0.3–0.5 —将其提高到 0.3-0.5,可以减少抖动或错误移动。
0.1–0.2 —如果手腕或脚踝等较小关节经常无法检测到,可以将其降低到 0.1-0.2。

 

最低置信度

返回当前的置信度阈值—可以用于将其显示在屏幕上,或在项目运行过程中动态调整。

注意: Confidence 筛选是针对每个关节单独进行的,而不是针对整个人。
如果某个特定关节没有达到阈值,那么任何使用该关节坐标的积木(例如位置、角度或距离)都会返回空值。


⚙️ 检测控制 #

  • 分类 [INTERVAL] - 选择检测运行的频率:
    • 每次运行此积木时检测一次
    • 连续检测,无延迟
    • 连续检测,每隔 50–2500 ms 运行一次
  • 将分类 [ON_OFF] - 开始或停止连续检测。
  • 分类间隔 - 返回当前检测间隔,单位为毫秒。
  • 连续分类 - 返回连续检测当前是“on”还是“off”。
  • 选择输入图像 [camera/stage] - 选择 camera(摄像头)或 Stage(舞台)。
  • 输入图像 - 返回当前正在使用的输入源。

🎥 视频控制 #

  • 将视频 [off/on/on-flipped]
    • on:以镜像方式显示摄像头预览(就像普通网络摄像头或镜子一样)。
    • on-flipped:以非镜像方式显示摄像头预览——方向与现实世界中的左右方向一致。
    • off:关闭摄像头预览。在 Stage 输入模式下,检测仍会继续运行。
  • 将视频透明度设为[TRANSPARENCY|text] — 调整摄像头预览的可见程度:
    • 0:完全可见(不透明图像)
    • 100:完全透明(不可见,但仍在运行)
    使用 0–100 之间的值来调整摄像头背景的透明度,让 sprite 能够清晰地显示在摄像头预览上方。
  • 选择摄像头 [CAMERA] — 从设备上的可用摄像头中进行选择。下拉菜单会列出检测到的所有摄像头,扩展会自动切换到你选择的摄像头。
  • 显示检测框 [开启/关闭]
    打开或关闭检测框显示。 打开后,每个检测到的物体周围都会显示一个方框,让你可以看到模型正在跟踪哪些物体。 这对于测试摄像头、检查模型的识别效果以及实时调试项目都很有帮助。


🦵 常用关键点(实用编号) #

可以使用下面这些常见身体关节的快捷编号,也可以从下拉菜单中进行选择。

BlazePose(33 个 keypoint):

0:鼻子
1 / 2 / 3:左眼内侧 / 中心 / 外侧
4 / 5 / 6:右眼内侧 / 中心 / 外侧
7 / 8:左耳 / 右耳, 9 / 10:嘴巴左侧 / 右侧
11 / 12:左肩 / 右肩, 13 / 14:左手肘 / 右手肘
15 / 16:左手腕 / 右手腕, 17 / 18:左小指 / 右小指
19 / 20:左食指 / 右食指, 21 / 22:左拇指 / 右拇指
23 / 24:左髋 / 右髋 25 / 26:左膝 / 右膝
27 / 28:左脚踝 / 右脚踝, 29 / 30:左脚跟 / 右脚跟
31 / 32:左脚前端 / 右脚前端

这些编号与 MediaPipe BlazePose 使用的 landmark 索引一致。


🎓 教育用途 #

  • 使用实时关节角度和距离探索 biomechanics (生物力学)。
  • 将身体动作与 Stage 上 sprite 的位置关联起来,学习坐标系统。
  • 运用数学和几何知识测量对称性、步幅或姿势。
  • 创建由身体动作控制的互动艺术、舞蹈或健身项目。

🎮 示例项目 #

  • 跳跃计数器: 检测脚踝的 Y 方向移动,对跳跃次数进行计分。
  • 抬手控制器: 抬起手,让 sprite 向上移动。
  • 平衡游戏: 使用肩膀角度让 sprite 保持在中央。
  • 舞蹈镜像: 将手腕和脚踝的位置映射到彩色特效。
  • 深蹲训练器: 使用髋部和膝盖之间的角度计算深蹲次数。

✨ 试试一个项目 #

准备好把你学到的知识应用到实践中了吗?
用你的肩膀在 Scratch 中控制 Pishi
使用 PoseNet,通过向左或向右倾斜肩膀来控制 Pishi。
查看项目

 

🧩 自己试试: pishi.ai/play


🔧 提示和故障排除 #

  • 没有摄像头?
    • 确保摄像头已经连接,并且浏览器已获得摄像头访问权限。
    • 如果摄像头被阻止,请在浏览器的网站设置中启用摄像头权限,然后重新加载页面。
    • 加载扩展时,如果未检测到摄像头,输入图像会自动切换到 Scratch 舞台,也就是显示背景和角色的画布,这样你仍然可以继续使用和测试扩展的功能。
  • 没有检测结果?
    连续分类:使用这个 reporter(报告积木)查看检测功能是否处于启用状态。
    • 如果检测已经启用,请改善环境光线,并正对摄像头。
    将分类 [ON]:如果检测没有启用,请使用这个积木,然后再次使用上面的 reporter 检查检测状态。
    • 在 camera 输入模式下,当摄像头关闭时,检测也会停止——你必须重新打开视频,或者将输入源切换到 Stage。
    • 在 Stage 输入模式下,系统会检测 Stage 上所有可见的内容——背景、sprite 或图像。你可以完全关闭视频,同时仍然处理 Stage 图像。
    • Stage 模式比 camera 输入速度慢,因此可以使用这个积木将检测间隔调低一些(例如 100–250 ms),以获得更流畅的效果: 分类 [INTERVAL]
    • 在 Stage 模式中,“left”和“right”对应的 landmark 会互换,因为 Stage 图像没有镜像——坐标空间表示的是真实的非镜像视图。
    • 当你使用以下积木时,检测也可能自动重新启动:
    将视频 [开启] / 分类 [INTERVAL] / 选择摄像头 [CAMERA] / 选择输入图像 [camera/stage].
  • 画面方向翻转了?
    将视频 [镜像开启]:使用此积木可以显示非镜像的摄像头画面。“on”会像自拍画面一样进行镜像;“on-flipped”则显示真实的左右方向。
  • 卡顿或运行缓慢?
    使用 100–250 ms 之间的检测间隔,或者关闭其他浏览器标签页,以减少设备的处理负担。
  • 出现 WebGL2 警告?
    尝试使用 Firefox,或者使用支持 WebGL2 图形加速的较新设备。
  • 想分析 Stage 而不是摄像头?
    选择输入图像 [stage]:使用这个积木分析 Scratch Stage 图像,而不是实时摄像头画面。 Scratch 舞台可以包含摄像头画面,以及当前在舞台上可见的任何角色和背景。
    注意: 处理 Scratch 舞台的速度可能会比直接使用摄像头更慢。

🏃‍♂️ PoseNet 专用提示 #

  • 检测不到人物? 确保整个上半身都清晰可见—至少头部、肩膀和手臂应该出现在画面中,这样才能保持稳定检测。
  • 有些关节检测不到? 如果手腕或脚踝等关节被遮挡或位于画面之外,它们可能会消失。检查 people count 以确认是否检测到人物。
  • 某个关节的 confidence 太低? 改善光线,或者稍微降低 minimum confidence 的值(例如 0.1–0.2),以帮助检测脚踝等较难识别的关节。
  • 追踪不稳定? 与摄像头保持大约 3–6 feet 的距离,确保全身可见并且光线均匀。
  • 追踪不稳定? 比较 keypoint 15 或 16(手腕)的 Y 位置与 keypoint 11 或 12(肩膀)的 Y 位置。如果手腕
  • 计算跳跃次数? 追踪 keypoint 27 或 28(脚踝)的 Y 位置。突然向上的移动表示发生了一次跳跃。
  • 检测深蹲? 测量 keypoint 23(髋部)、25(膝盖)和 27(脚踝)之间的角度。角度越小,表示蹲得越深。
  • 检查姿势或平衡? 计算 keypoint 11 和 12(肩膀)之间的角度。偏离水平线的倾斜表示身体可能正在侧倾或失去平衡。
  • 检测走路? 观察 keypoint 27 和 28(脚踝)的 X 位置是否交替移动。规律的左右移动表示正在走路。
  • BlazePose 只检测到一个人? 这是正常的—BlazePose 专注于高精度的单人全身追踪。
  • 在 Stage 模式下使用人体照片? Stage 模式中的 landmark 不会被镜像—left 和 right 与真实的人体解剖左右方向一致。

🔒 隐私与安全 #

  • 所有处理都在你的浏览器本地运行。
  • 不会将任何图像或视频上传到其他地方。
  • 扩展启动时,模型文件会直接从 Pishi.ai 加载,因此不会使用任何第三方模型服务器。
  • 使用摄像头之前,请务必先询问老师或家长。
  • 你可以随时安全地使用此积木 将视频 [关闭].

🧪 技术信息 #

  • Model (模型): MediaPipe BlazePose
  • Framework (框架): TensorFlow.js (latest version)—完全在浏览器中运行,并使用 WebGL2 加速
  • People (人数): 1(单人检测)
  • Landmarks (特征点): 33 keypoints (0–32)
  • Coordinates (坐标): 以 Stage 中心为原点的像素坐标(X 向右,Y 向上)
  • Mirroring (镜像): “on” = 镜像预览,“on-flipped” = 真实方向视图
  • Inputs (输入源): camera 或 Stage canvas
  • Default keypoints (默认关键点): 11(left shoulder,左肩)、12(right shoulder,右肩)
  • Requires (要求): 为获得最佳性能,需要支持 WebGL2

🔗 相关扩展 #

  • 😎 人脸网格 — 检测面部 landmark
  • 🖐️ Hand Pose – 检测手部 landmark
  • 🖼️ Image Trainer – 创建自定义 AI model
  • 🏫 Google 可训练机器 – 导入你自己的 TM model

📚 了解更多 #


滚动至顶部