Je développe une application Podomètre Android pour compter le nombre de pas effectués et utilise ces étapes pour calculer la distance parcourue et les calories brûlées. J'ai suivi le tutoriel Créer un podomètre simple et un compteur de pas sous Android et l’utiliser exactement. Il détecte le nombre de pas lorsque le capteur détecte un mouvement.
Mais il y a quelques problèmes avec cela:
J'ai vérifié d'autres applications de Play Store, ils ne font pas ce genre de choses.
J'ai effectué une recherche mais je ne trouve pas de solution ni de tutoriel appropriée. Toute aide ou suggestions. Merci
En implémentant l'écouteur SensorEventListener au sein d'une classe et en ignorant les deux méthodes onSensorChanged et onAccuracyChanged , vous pouvez commencer à suivre les étapes.
public class StepActivity extends Activity implements SensorEventListener{
SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor sSensor= sensorManager .getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
...
}
Maintenant que nous avons initialisé SensorManager et Sensor et que le capteur est enregistré en tant qu'auditeur dans l'activité, nous devons maintenant implémenter la fonction onSensorChanged qui sera déclenchée par un SensorEvent à chaque modification de la Capteur nous avons enregistré, dans notre cas le TYPE_STEP_DETECTOR .
private long steps = 0;
@Override
public void onSensorChanged(SensorEvent event) {
Sensor sensor = event.sensor;
float[] values = event.values;
int value = -1;
if (values.length > 0) {
value = (int) values[0];
}
if (sensor.getType() == Sensor.TYPE_STEP_DETECTOR) {
steps++;
}
}
Le problème ici est que votre implémentation n'est pas assez sophistiquée: elle vérifie uniquement s'il existe une pointe dans les données de l'accéléromètre et suppose que la pointe provient d'une étape. Il n’a aucune idée de l’origine du pic d’accélération: il pourrait tout aussi bien provenir du fait que vous sautez ou secouez l’appareil dans votre main.
Comment le rendre plus précis alors? Eh bien, c’est une question très difficile qui fait l’objet de nombreux articles scientifiques depuis très longtemps. Même les suiveurs de fitness les plus sophistiqués (qui utilisent l'apprentissage automatique, le traitement du signal et d'autres méthodes statistiques) ont des difficultés à déterminer quand le pas est réel et quand il ne s'agit que d'un utilisateur ou d'un utilisateur qui joue avec l'appareil.
Heureusement, Android possède ses propres step counter et step detect , qui sont plus sophistiqués que la classe par exemple.
Donc, à moins que vous ne vouliez vraiment apprendre le traitement du signal et l'IA (ce que j'ai fortement recommandé, bien que je ne connaisse pas grand chose à la science des données de la détection de pas), je suggérerais d'utiliser un détecteur et un compteur intégrés.
C'est une méthode très naïve pour atteindre le nombre de pas. Vous devez utiliser le compteur de pas intégré d'Android, car il utilise également d'autres capteurs, tels que le gyroscope, le cas échéant, qui peuvent améliorer la détection de pas. Vous devriez surtout utiliser cette version intégrée si vous voulez construire des choses par-dessus. Vous avez besoin d'une couche sous-jacente fiable. Vous pouvez également essayer d'utiliser un capteur d'accélération linéaire qui est calculé en supprimant la composante de gravité de l'accéléromètre. La gravité rend l'accéléromètre très sensible, c'est pourquoi vous voyez le compteur de pas augmenter quand vous vous tenez debout.
Les détails se trouvent ici: https://source.Android.com/devices/sensors/sensor-types#step_detector
Si vous souhaitez toujours développer le vôtre à partir de rien, consultez le code suivant: https://github.com/bagilevi/Android-pedometer
Vous pouvez également essayer Google scholar pour les derniers articles sur les algorithmes de comptage des étapes. Essayez en particulier de lire le dernier sondage sur le sujet.