Sto provando a utilizzare il riconoscimento attività in un progetto per rilevare quando l'utente è "IN-VEHICLE". (Guida) Il problema è che è quasi impossibile utilizzarlo, dato che mostProbableActivity spesso riporta "IN-VEHICLE" anche se sono stato seduto alla mia scrivania per molto tempo o sono semplicemente andato in giro a casa mia. Sarebbe molto bello sapere come l'API conclude questo.API di riconoscimento attività inaffidabili?
Penso che questa funzione abbia un grande potenziale, ma come ora qualcosa chiaramente non funziona.
Questo è un registro di MostProbableActivity eseguito ogni 30 secondi per mostrare cosa intendo. Seduto alla mia scrivania, dopo 4 minuti accendo il telefono un paio di volte e questo risulta in un risultato "mostProbable IN-VEHICLE".
Ho provato diversi telefoni e il risultato è lo stesso. Quindi non penso sia collegato all'hardware.
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]
Questo è il codice, niente di speciale:
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));
}
}
Da questo link:
posso vedere che gli altri hanno un'esperienza simile, ma alcune affermazioni che funziona OK.
Penso che questo sia un bug nell'algoritmo di confidenza dell'API. Dovrebbe essere facile concludere che il telefono non si muove in nessuna direzione, né su una strada, quindi NON è "mostProbable" in un VEICOLO.
Qualcuno può confermare questo problema o lo uso nel modo sbagliato?
migliori saluti
Thomas
Si sta usando nel modo giusto. Il problema è che senza campionare il GPS e scaricare la batteria sarà molto difficile rilevare l'attività di guida. Google probabilmente tiene traccia dei dati dei sensori (accelerometro, giroscopio, magnetometro ecc.) In alcuni periodi e cerca uno schema di guida (che è molto simile a quello fermo ma ha una vibrazione unica). A volte l'algoritmo non è abbastanza preciso. – MikeL