使用ML Kit进行蹲姿姿势检测并计数

问题描述

如何使用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
}

我从自己的角度补充了逻辑,但如果我有任何适当的方法,仍然希望获得帮助。我每次都在检查角度。

我想根据用户的锻炼情况显示计数和反馈。

解决方法

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

我刚刚做出了三个简单的逻辑判断

  1. 肘部的高度高于肩膀,否则提示“请把手放在头部后面”
  2. 直立是通过大腿和小腿的角度来判断的,目前效果不佳。
  3. 比较腿和肩膀之间的距离,并且腿应该与肩膀的宽度成一定比例,否则提示“请张开双脚和肩膀的宽度”站立和蹲坐均以人的腿长来判断/ 5作为最小移动单位,以及到最后一个坐标的最小距离。因为站立的人和相机之间的距离会影响坐标比

我的英语不好,大部分句子都被谷歌翻译了

,

您可以尝试以下几种操作:

(1)您需要要求用户以某种方式面对相机,例如侧向方式可能最容易检测到下蹲,而正面则最困难。您可以在两者之间尝试一下。同样,摄像机的高度(在地面,头部水平等)也会影响角度。

(2)然后,您可以计算和跟踪身体与大腿之间的角度以及大腿与小腿之间的角度,以确定是否下蹲。

(3)关于反馈,您可以设置一些期望角度,如果用户的角度小于该角度,则可以说“深蹲” ...

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