android - 在 Android 上实时跟踪期间的计数问题
问题描述
我正在使用 ML KIT 制作应用程序。我目前正在做深蹲时进行计数。问题是当它下降到某个角度时它会计数,但因为它是实时跟踪,它会计数多次而不是一次。换句话说,实际上当我做一个深蹲时,计数远不止于此。所以我尝试使用计时器处理程序解决问题。但我失败了。这是我的代码我该怎么办?
//going down
if((rightKneeAngle<=90 && leftKneeAngle<=90) || (rightHipAngle<=135 && leftHipAngle<=135)){
//Timer setting
mTimer.schedule(new CustomTimer(), 2000);
Log.d("PoseGraphic.class", "goingdown"+"rightKneeAngle : " + rightKneeAngle+ " leftKneeAngle : " + leftKneeAngle);
Log.d("PoseGraphic.class","leftHip"+leftHipAngle+"RighHip"+rightHipAngle);
Log.d("PoseGraphic.class", "cnt: " + cnt);
//going up
if((rightKneeAngle>170 && leftKneeAngle>90)|| (rightHipAngle>135 && leftHipAngle>135)){
Log.d("PoseGraphic.class", "going up"+"rightKneeAngle : " + rightKneeAngle+ " leftKneeAngle : " + leftKneeAngle);
Log.d("PoseGraphic.class","leftHip"+leftHipAngle+"RightHip"+rightHipAngle);
if(cnt==12) {
canvas.drawText("complete!", x, y, textPaint);
//ExerciseCount.cnt = 0;
cnt=0;
}
}
}
// TIMER handler class
class CustomTimer extends TimerTask
@Override
public void run() {
cnt++;
}
解决方案
如果没有看到更多代码,我无法完全理解你是如何做到的。
一个建议是:当姿势处于 squat_down 状态时,不要 +1 计数,而是使用布尔值记录该状态的进入,并且仅在用户退出 squat_down 并进入 squat_up 状态时才 +1 计数。然后重置状态布尔值。通过这样做,您只会在用户完成从下蹲到上的整个周期时 +1。
实际上,ML Kit 刚刚推出了一个用于深蹲和俯卧撑分类和重复计数的示例。这是您可以尝试的应用程序。如果你想对其他一些姿势进行分类,这里有一些指南和一个 Colab。
推荐阅读
- java - 在 Java 中声明一个公共类
- mysql - 在包含唯一值的列上添加索引?
- excel - 如何在 Excel 中使用选择函数获取文本和单元格值
- python-3.x - 我制作了一个程序来打印使用星号形成的“字母”。我有很多行代码。有一个更好的方法吗?
- android - Android 4 上 packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH) 处的 java.lang.verifyError
- python - 用于 for 循环的字符串 join() 方法
- reactjs - 覆盖模块中的全局 CSS 样式不起作用
- assembly - 如何使用 Irvine32 for x86 从表中写入文本文件?
- java - 如何将 ActiveProfiles 与带有 WebMvcTest 的 Spring Boot 测试一起使用?
- python - 使用子图 Matplotlib 绘制水平线