1

如何使用 ML 套件获取实时运动计数和角度?在这里,我检查了https://ai.googleblog.com/2020/08/on-device-real-time-body-pose-tracking.html的俯卧撑和深蹲运动计数。

我通过以下方法获得角度:

fun getAngle(firstPoint: PoseLandmark, midPoint: PoseLandmark, lastPoint: PoseLandmark): Double {
    var result = Math.toDegrees(atan2(lastPoint.getPosition().y - midPoint.getPosition().y,
            lastPoint.getPosition().x - midPoint.getPosition().x)
            - atan2(firstPoint.getPosition().y - midPoint.getPosition().y,
            firstPoint.getPosition().x - midPoint.getPosition().x))
    result = Math.abs(result) // Angle should never be negative
    if (result > 180) {
        result = 360.0 - result // Always get the acute representation of the angle
    }
    return result
}

我已经从我的角度添加了逻辑,但如果我有任何适当的方法,我仍然需要帮助。我每次都在检查角度。

我想根据用户进行锻炼来显示计数和反馈。

4

2 回答 2

3

我做了一个关于深蹲次数的简单演示 https://www.youtube.com/watch?v=XKrZV864rEQ

我只是做了三个简单的逻辑判断

  1. 肘部高度高于肩部,否则提示“请双手抱在脑后”
  2. 站直以大腿和小腿的角度来判断,目前效果不好。
  3. 比较腿和肩膀的距离,腿应该有一定比例的肩宽,否则提示“请张开双脚和肩宽” 站立和蹲下都是以人腿长/5为判断最小移动单位,距离最后一个坐标的最小距离。因为站着的人与相机的距离会影响坐标比

我的英语很差,大部分句子都是谷歌翻译的

于 2020-09-14T04:03:46.413 回答
1

您可以尝试以下几件事:

(1) 你需要让你的用户以某种方式面对摄像头,例如侧向可能是最容易检测深蹲的,而正面是最难检测的。你可以尝试一些介于两者之间的东西。此外,相机的高度(在地面上、头部水平等)也会影响角度。

(2)然后你可以计算和跟踪身体与大腿之间的角度和大腿与小腿之间的角度,以确定是否完成了深蹲。

(3)关于反馈,你可以设置一些期望的角度,如果用户的角度小于这个角度,你可以说“蹲得更深”……

(4) 要获得预期的角度,您需要找到一些样本图像并在其上运行检测器以获取它们。

于 2020-09-11T17:53:59.460 回答