活动识别API不可靠?

7
我正在尝试在项目中使用活动识别来检测用户何时处于“IN-VEHICLE”状态(驾车)。问题是很难使用它,因为mostProbableActivity经常报告“IN-VEHICLE”,即使我已经在桌子前坐了很长时间或者只是在房子里走来走去。希望知道API是如何得出这个结论的。

我认为这个功能有巨大的潜力,但现在显然存在问题。

这是每30秒记录一次MostProbableActivity的日志,以说明我的意思。我坐在桌子前,在4分钟后转动了几次手机,这导致了一个“mostProbable IN-VEHICLE”的结果。

我尝试过不同的手机,结果是相同的。所以我不认为这与硬件有关。

DetectedActivity [type=STILL, confidence=43]
DetectedActivity [type=STILL, confidence=54]
DetectedActivity [type=STILL, confidence=100]
DetectedActivity [type=STILL, confidence=100]
DetectedActivity [type=STILL, confidence=69]
DetectedActivity [type=STILL, confidence=100]
DetectedActivity [type=STILL, confidence=92]
DetectedActivity [type=TILTING, confidence=100]
DetectedActivity [type=IN_VEHICLE, confidence=49]
DetectedActivity [type=TILTING, confidence=100]
DetectedActivity [type=STILL, confidence=51]
DetectedActivity [type=STILL, confidence=100]
DetectedActivity [type=STILL, confidence=100]
DetectedActivity [type=STILL, confidence=85]
DetectedActivity [type=STILL, confidence=100]
DetectedActivity [type=STILL, confidence=66]
DetectedActivity [type=STILL, confidence=100]

这是代码,没有什么特别的地方:
public class ActivitiesIntentService extends IntentService {


    private static final String TAG = "ActivitiesIntentService";


    public ActivitiesIntentService() {
        super(TAG);
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        ActivityRecognitionResult result = ActivityRecognitionResult.extractResult(intent);
        Intent i = new Intent(Constants.STRING_ACTION);


        DetectedActivity mostProbableActivity = result.getMostProbableActivity();


        i.putExtra("MOST_PROBABLE_ACTIVITY",mostProbableActivity);



        LocalBroadcastManager.getInstance(this).sendBroadcast(i);


        Log.e(TAG, String.valueOf(mostProbableActivity));
        }

}

从这个链接中:

活动识别API

我可以看到其他人有类似的经验,但是有些人声称它工作正常。

我认为这是API置信度算法中的一个错误。很容易得出结论,手机没有朝任何方向移动,也不在道路上,因此显然不是“mostProbable”在车辆中。

有人能够确认这个问题吗,还是我使用方法不对?

最好的问候

托马斯


1
你正在正确地使用它。问题在于,如果不对GPS进行采样并耗尽电池,将很难检测到驾驶活动。Google可能会定期跟踪传感器数据(加速度计、陀螺仪、磁力计等),并寻找驾驶模式(与静止非常相似但具有独特的振动)。有时算法并不够精确。 - MikeL
从我的测试来看,如果设备确实静止了几秒钟(即至少约10秒钟),那么“ STILL”类别似乎是最可靠的。虽然它的实用性有限,但在某些适用场景下仍然可能会有所帮助。 - Michael Osofsky
2个回答

5
请记住,这是一项非常低能耗的服务,因此不能不断查看设备传感器。这会使电池过快耗尽而无法使用。务必阅读文档以了解限制。
如果您想要更准确的读数,请增加检测间隔。这将为其提供更多数据以供使用。
还要注意,这些测量值是要广泛应用的。可能的用例是估计设备携带者参与体育活动的时间,或在检测到某些活动时激活和停用应用程序组件。

3
如果你需要更准确的读数,你可以提高设备的检测级别,但这会导致电池快速耗尽。至于结果的反应,为了确保用户正在执行某项活动,Google Play服务的置信度必须>75,否则可以安全地假定您的用户没有执行该操作。在您的情况下,Google Play服务的置信度为49,这意味着它不确定您的用户是否在驾车。你也可以尝试使用简单的“IF语句”。
if(DetectedActivity == “In_Vehicle” && result.getConfidence()> 75)
 {
 // output = User is Driving;
 // Perform task 
 }

除了让电池电量耗尽,还可以尝试使用一些API(如Tranql、Context Hub或Neura)来获取有关用户活动和位置的更准确见解。


2
你是如何得出75%是一个好的数字的结论的?有什么参考资料支持你的建议吗? - Pranaysharma
@Pranaysharma 不错的问题。我找到了一个教程,提到了这个75%,但我不知道他们是如何选择那个数字的:https://code.tutsplus.com/tutorials/how-to-recognize-user-activity-with-activity-recognition--cms-25851 - nbeuchat
视频中提到了75%的内容,该视频出现在此Google页面上: https://developers.google.com/location-context/activity-recognition/ - A.Alqadomi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接