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

Bar*_*zky 6 android google-play-services activity-recognition

在Google Play服务活动识别中有

DetectedActivity.RUNNING,
DetectedActivity.WALKING,
DetectedActivity.ON_FOOT
Run Code Online (Sandbox Code Playgroud)

当我得到行走或跑步的活动更新时,我得到ON_FOOT

我该如何区分?

我知道它说RUNNING和WALKING:"这是ON_FOOT的子活动"

谢谢你的帮助.

小智 6

所提供的walkingOrRunning()方法emil10001的作品,但它不能置信度最高,以获得活动(跑步或步行),这是因为,第二个条件,如果条款中他对循环总是比较活动的信心0.

为了澄清这一点,我们假设我们将一个大小为2的"probableActivities"列表作为walkOrRunning()方法的参数传递,即:我们调用walkingOrRunning(probableActivities).

假如,

列出probableActivities = [activity1,activity2],

哪里:

activity1 ="行走",信心为75%

activity2 ="正在运行"5%的信心.

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

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

2)在for循环的第二次迭代之后,myActivity ="running"

并且该方法将"running"作为活动类型重新运行,同时我们期望返回的活动是"行走".

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

[fyi:我已经实现并测试了代码,它按预期工作,我欢迎任何反馈/评论/问题].

 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;
}
Run Code Online (Sandbox Code Playgroud)


Sam*_*zor 2

我观察到类似的行为。我的理论是,当您收到一个ActivityRecognitionResult对象时,它通常会包含几个可解析的DetectedActivity对象,每个对象都有一个由整数指定的置信度分数。在 的情况下WALKING,将至少有两个DetectedActivity对象 - 一个DetectedActivity对象具有ON_FOOT较高的置信水平,另一个DetectedActivity对象具有WALKING较低或相同的置信水平。

ON_FOOT在实践中,我想你经常会得到+ WALKING||的一些排列。RUNNING,或所有三个具有不同的置信度分数,并且ON_FOOT可能是最高的。