当前位置: 首页 > 知识库问答 >
问题:

如何使用活动识别检测步行/跑步与步行

端木夕
2023-03-14

在Google Play服务活动识别中有

DetectedActivity.RUNNING,
DetectedActivity.WALKING,
DetectedActivity.ON_FOOT

每当我得到步行或跑步的活动更新时,我都会步行

如何区分?

我知道上面写着跑和走:“这是ON_FOOT的一个子活动”

谢谢你的帮助。

共有3个答案

公孙宸
2023-03-14

我也观察到类似的行为。我的理论是,当你收到一个ActivityRecognitionResult对象时,它通常会包含几个可解析的、可检测的Activity对象,每个对象的置信度都由一个整数指定。在行走的情况下,至少会有两个检测到的活动对象-一个具有较高置信水平的步行对象和一个具有较低或相等置信水平的行走对象。

在实践中,我想你经常会遇到一些不同的情况,比如步行,或者跑步,或者三种情况都有不同的信心分数,其中步行可能是最高的。

赏高格
2023-03-14

正如Sam提到的,行走和跑步活动作为次要活动出现在列表中(ActivityRecognitionResult.getProbableActivities()),您需要对它们进行解析。

// Get the update
ActivityRecognitionResult result = ActivityRecognitionResult.extractResult(intent);

// Get the most probable activity from the list of activities in the update
DetectedActivity mostProbableActivity = result.getMostProbableActivity();

// Get the type of activity
int activityType = mostProbableActivity.getType();

if (activityType == DetectedActivity.ON_FOOT) {
    DetectedActivity betterActivity = walkingOrRunning(result.getProbableActivities());
    if (null != betterActivity)
        mostProbableActivity = betterActivity;
}

private DetectedActivity walkingOrRunning(List<DetectedActivity> probableActivities) {
    DetectedActivity myActivity = null;
    int confidence = 0;
    for (DetectedActivity activity : probableActivities) {
        if (activity.getType() != DetectedActivity.RUNNING && activity.getType() != DetectedActivity.WALKING)
            continue;

        if (activity.getConfidence() > confidence)
            myActivity = activity;
    }

    return myActivity;
}

今天晚上我测试了上面的代码,包括步行和跑步,它看起来做得相当好。如果您不明确地只过滤RUNWALING,您可能会得到错误的结果。

孟凯泽
2023-03-14

emil10001提供的walkingOrRunning()方法可以工作,但是它无法获得置信度最高的活动(运行或行走),这是因为for循环中第二个if子句的条件总是将活动的置信度比较为0。

为了澄清这一点,让我们假设我们将大小为2的List“可能活动”作为参数传递给walkingOrRruning()方法,即:我们调用walkingOrRruning(可能活动)。

假设,

列出可能的活动

在哪里:

活动1=“步行”有75%的信心

activity2=“running”5%置信度。

简而言之,方法walkingOrRunning(probableActivities)的执行如下:

1) 在for循环的第一次迭代之后,myActivity=“walking”

2) 在for循环的第二次迭代之后,myActivity=“正在运行”

该方法将“运行”作为活动类型,同时我们期望返回的活动是“行走”。

总之,为了获得置信度最高的活动类型(行走/跑步),我将walkingOrRunning()方法修改为

[仅供参考:我已经实现并测试了该代码,它正在按预期工作,我欢迎任何反馈/评论/问题]。

 private DetectedActivity walkingOrRunning(List<DetectedActivity> probableActivities) {
    DetectedActivity myActivity = null;
    int confidence = 0;
    for (DetectedActivity activity : probableActivities) {
        if (activity.getType() != DetectedActivity.RUNNING && activity.getType() != DetectedActivity.WALKING)
            continue;

        if (activity.getConfidence() >= confidence) {
            confidence = activity.getConfidence();
            myActivity = activity;
        }
    }

    return myActivity;
}
 类似资料:
  • 在Android 4.4谷歌播放服务引入了“步行”活动识别,但已经有on_foot识别。 两者的区别是什么

  • 我正在intelliJ上用livereload测试spring-boot-devtools。我有一个简单的spring boot应用程序,效果很好。 当我从maven命令“mvn-spring-boot:run”启动应用程序时,除了livereload服务器不启动之外,所有工作正常。控制台上没有显示消息,chrome扩展显示错误,无法连接到livereload服务器。 如果我使用(右鼠标按钮/Ru

  • 跑步表现测试是专为跑步者而设计的工具,可以让他们追踪自己的进展,并找出自己在跑步运动中的独特训练区(心率、速度和功率区)。定期及频繁的测试可以帮助您合理地规划训练,并追踪您跑步表现的变化情况。 您可以最大心率或次最大心率(至少达到您最大心率的 85%)进行测试。最大心率值测试需要全力以赴,但获得的结果更加准确。以最大心率进行测试有助于找出您目前个人最大心率,并及时更新您的设置。与次最大心率值测试相

  • 我想对一个网站进行压力测试。主要目的是在并发用户数和命中视频数/秒(RPS)方面找到性能下降点。 我使用了ultimate thread group,并将用户数量设置为200,加速时间为200秒。我已经为终极线程组添加了吞吐量整形计时器,并将每秒请求数设置为8。(如果我每秒钟只有一次采样器点击,那就控制得很好,是8次点击/秒。如果我有一个以上的采样器点击不受控制,他们甚至达到20,25,40等..

  • 跑步指数以简单方式监测跑步成绩变化。跑步指数得分是对您最大有氧跑步成绩(VO2max)的估算值。通过随时间记录您的跑步指数,您可以监测跑步效果和如何改进跑步成绩。改进意味着以既定步速跑步时消耗的体力更少,或者在既定的体力消耗水平上,您的步速更快。 为接收到最准确的成绩信息,请确保您已经设置 HRmax 值。 每次训练期间,在测量心率时同时开启 GPS 功能/使用步幅传感器的情况下均会计算跑步指數,

  • 跑步指数以简单方式监测跑步成绩变化。跑步指数得分是对您最大有氧跑步成绩(VO2max)的估算值。通过随时间记录您的跑步指数,您可以监测跑步效果和如何改进跑步成绩。改进意味着以既定步速跑步时消耗的体力更少,或者在既定的体力消耗水平上,您的步速更快。 为接收到最准确的成绩信息,请确保您已经设置 HRmax 值。 每次训练期间,在测量心率时同时开启 GPS 功能/使用步幅传感器的情况下均会计算跑步指數,