【问题标题】:How to make Human Activity Recognition less sensitive in Android如何使 Android 中的人类活动识别不那么敏感
【发布时间】:2017-02-25 18:40:27
【问题描述】:

我正在开发一个 Android 应用,该应用每 3 秒识别一次用户所做的活动(设计上必须如此频繁)(例如静态、步行、跑步)。我的数据库中有一个 Activity 表,它增加了以下值:

private int activeTime;
private int longestInactivityInterval;
private int currentInactivityInterval;
private int averageInactInterval;

这些以片段的形式呈现。目前,它非常“敏感”。例如,如果用户是静止的(即躺在他们的床上)并且他们将手机从口袋里拿出来,它会识别出像“走路”这样的活动。公认活动的历史如下所示:

static
static
walking
static
static

如何确保这种偶然的“步行”识别活动被识别为“静态”。有什么办法可以纠正吗?

这是进行活动监控的类(根据识别的活动增加值。

public class ActivityMonitor implements Observer, IActivityMonitor {
private User mUser;
private IActivityDataManager mDataManager;

public ActivityMonitor(IActivityDataManager dataManager) {
    mDataManager = dataManager;
}

@Override
public void update(Observable observable, Object activity) {
    monitorActivity(activity);
}

private void monitorActivity(Object activityClass) {

    switch ((int) activityClass) {
        case 0:
            //activity = "walking";
        case 1:
            //activity = "running";
        case 3:
            //activity = "cycling";
            mDataManager.incActiveTime();
            mDataManager.clearCurrentInacInterval();
            break;
        case 2:
            //activity = "static";
            mDataManager.incCurrentInacInterval();
            break;
    }

}

【问题讨论】:

    标签: android weka activity-recognition


    【解决方案1】:

    我自己找到了解决问题的方法。我正在使用 apache 的常见 CircularFifoQueue 并将大小设置为 2。

    这就是我的解决方案的样子:

    private void monitorActivity(Object activityClass) {
        int activityInt = (int) activityClass;
        correctionList.add(activityInt);
        int correctResult = applyCorrection(activityInt);
    
        if (correctResult == correctionList.size()) {
            mDataManager.incActiveTime();
            mDataManager.clearCurrentInacInterval();
        } else {
            mDataManager.incCurrentInacInterval();
        }
    
    
    }
    
    
    private int applyCorrection(int classInt) {
        int count = 0;
        for (int item : correctionList) {
            if (item == 0 || item == 1 || item == 3) {
                count++;
            }
        }
    
        return count;
    }
    

    基本上,它添加了可能是(0,1,2 或 3)的 classInt - walk = 0,running = 1,cycling = 3 和 static = 2。applyCorrection 方法查看大小为 2 的队列(这起到了因素的作用,2 对我很有用)并计算和检查整数。如果返回的计数correctResult 为 2,则表示活动的时间确定为 ACTIVE (1,2,3) 而不是 STATIC (2)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 2010-10-06
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多