2016-04-14 31 views
5

私はプロジェクトで活動認識を使用して、ユーザーが「車内」であることを検出しようとしています(運転中)問題は、ほとんどのProbableActivityが "IN-VEHICLE"たとえ私が長い間机の上に座っていたとしても、私の家の中を歩いていても。 APIがこれをどのように結論付けるかを知ることは非常にうれしいでしょう。アクティビティ認識APIが信頼できませんか?

この機能には大きな可能性があると思いますが、今のところ明らかに機能していません。

これは、30秒ごとに取得したMostProbableActivityのログで、私の意味を示しています。私の机の上に座って、4分後に電話を数回鳴らすと、「最も可能性の高いIN-VEHICLE」という結果になります。

私はさまざまな電話機を試しましたが、結果は同じです。だから私はそれがハードウェアに関連しているとは思わない。

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)); 
     } 

} 

このリンクから:

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] 

これは、コード、そこに何も特別である

Activity Recognition API

私は他の人が同じような経験を持っていますが、いくつかのクレームがそのそれをすることを見ることができますOKです。

これはAPIの信頼アルゴリズムのバグだと思います。電話機がどの方向にも、道路上でも動いていないと結論付けるのは簡単なことです。明らかに、自動車では「最も確からしい」ものではありません。

誰でもこの問題を確認できますか、それとも間違った方法で使用できますか?それは常にデバイスのセンサーを見てすることはできませんので、これは、非常に低エネルギー消費のサービスであることを念頭に置いて

敬具

トーマス

+0

正しい方法で使用しています。問題は、GPSをサンプリングしてバッテリを放電させなければ、運転活動を検出することが非常に難しいことです。おそらく、Googleはセンサーデータ(加速度計、ジャイロ、磁力計など)をいくつかの時期に追跡し、運転パターン(非常に類似していますがユニークな振動があります)を探します。場合によっては、アルゴリズムが正確ではない場合もあります。 – MikeL

答えて

3

ベア。そうすれば、電池が消耗しすぎて役に立たなくなります。制約を理解するには、必ずread the docsにしてください。

より正確な読み取りが必要な場合は、検出間隔を長くします。そうすれば、より多くのデータを扱うことができます。

これらの測定値は広範囲に考慮する必要があります。可能なユースケースは、デバイスのキャリアが物理的な活動に関わった時間を推定すること、またはキャリアが検出されたアクティビティの1つを行っているときに実行されるはずのアプリのコンポーネントをアクティブまたは非アクティブにすることです。

1

より正確な読み値が必要な場合は、デバイスの検出レベルを上げる必要がありますが、これによってバッテリがなくなります。 あなたの結果の回答に関する限り、ユーザーが特定のアクティビティを実行していることを確認するには、Google Playサービスの信頼度が75を超えている必要があります。あなたの場合、Google Playサービスの信頼度は49です。つまり、ユーザーが運転しているかどうかはわかりません。 あなたはまた、あなたのバッテリーを排出せずに、ユーザーの活動や場所についてのより正確な洞察を得るために

if(DetectedActivity == “In_Vehicle” && result.getConfidence()> 75) 
{ 
// output = User is Driving; 
// Perform task 
} 

他の方法を、単純な「if文」を使用してみてください可能性があり、tranqlのようなAPI年代のいくつかを試してみることです、コンテキストハブまたはNeura

+2

あなたは75%が良い数字であるという結論にどのように達しましたか?あなたの提案を裏付けるための参考資料はありますか? – Pranaysharma

+0

@Pranaysharma良い質問です。チュートリアルでこの75%について言及していますが、その数字をどのように選んだのでしょうか?https://code.tutsplus.com/tutorials/how-to-recognize-user-activity-with-activity-recognition--cms-25851 – nbeuchat

+0

このGoogleページに表示されるビデオには75%が記載されています https://developers.google.com/location-context/activity-recognition/ –

関連する問題