13 points par xguru 2024-05-13 | 2 commentaires | Partager sur WhatsApp
  • En cherchant une application pour participer au « défi 100 pompes par jour » du centre britannique contre le cancer, l’auteur a décidé de créer lui-même quelque chose d’amusant pour compter les pompes
  • Exploration du framework Core Motion d’iOS
    • En cherchant comment exploiter les données des capteurs, il a choisi d’utiliser les données de mouvement des AirPods via CMHeadphoneMotionManager
    • Core Motion fournit des données issues de l’accéléromètre, du gyroscope, du magnétomètre, etc.
    • C’est utile pour mesurer avec précision et fiabilité les mouvements et l’orientation
    • L’accès aux données nécessite des autorisations afin de protéger la vie privée des utilisateurs
  • Réflexion sur la manière d’appliquer l’IA
    • Il existe déjà de nombreuses applications utilisant des frameworks comme ARKit
    • L’auteur a donc estimé que l’IA pouvait plutôt l’aider à concrétiser l’idée
    • Il a utilisé un GPT entraîné sur Core Motion pour poser des questions en langage naturel et obtenir des solutions
  • Conception de l’architecture de l’application
    • Motion Manager : streame les données des capteurs et gère les mises à jour des capteurs de l’appareil
    • Pushups Detector : analyse les données streamées pour détecter et compter les pompes selon des seuils prédéfinis
    • SwiftUI View : fournit une UI réactive qui se met à jour en temps réel pendant les pompes
  • Implémentation de Motion Manager
    • Utilisation du pattern délégué pour accéder aux valeurs mises à jour
    • Utilisation de CMHeadphoneMotionManager pour récupérer les données de mouvement de l’appareil
    • startUpdates() et stopUpdates() permettent de démarrer et d’arrêter les mises à jour des capteurs
    • Mise à jour des valeurs pitch et accelerationY, puis notification au délégué
  • Implémentation de Pushups Detector
    • Introduction du concept de « session » pour démarrer et arrêter l’analyse du flux de données
    • Interprétation des données brutes pour déterminer la posture de l’utilisateur et détecter les pompes
    • Utilisation de seuils pour détecter la descente et la remontée d’une pompe, puis incrémenter le compteur
    • Implémentation de MotionManagerDelegate pour gérer les variations des valeurs d’accélération et de pitch
  • Implémentation d’une vue simple avec SwiftUI
    • Composée d’un bouton de démarrage/arrêt de session et d’un grand chiffre affichant le nombre de pompes
    • Ajout d’un texte indiquant si la posture de l’utilisateur est correcte
  • Analyse et visualisation des données
    • Utilisation de Swift Charts pour visualiser les données brutes des capteurs et identifier des patterns
    • Découverte d’un pattern de descente (-1.0) et de remontée (+0.5) des pompes sur l’accélération de l’axe Y
    • Ajustement des seuils via des tests réels pour améliorer la précision (+0.4, -0.7)
  • L’attrait du suivi en temps réel
    • En portant les AirPods et en appuyant sur le bouton de démarrage, le nombre de pompes se met à jour automatiquement
    • Le système fonctionne sans interaction supplémentaire de l’utilisateur
  • Ce que le projet a permis d’apprendre
    • Confirmation de l’importance de la validation précoce et de l’amélioration itérative
    • Satisfaction et plaisir à créer quelque chose de significatif
    • Il reste des points à améliorer, comme l’UI ou le comptage des pompes sur plusieurs jours
    • Ajout d’un retour audio via les AirPods pour améliorer l’expérience utilisateur au-delà de l’interface visuelle
  • Conclusion
    • En combinant Core Motion, SwiftUI et l’IA, l’auteur a développé en 24 heures une application qui ajoute une nouvelle dimension au suivi fitness
    • Le défi important est de réfléchir à la manière d’appliquer de nouvelles technologies à des problèmes du quotidien

2 commentaires

 
ing03201 2024-05-13

Ça rappelle à quel point la Galaxy Watch est impressionnante pour compter les répétitions sur les trois mouvements de base.

 
jooyh1021 2024-05-13

Il y a quelques années, j’avais créé une appli de challenge de pompes appelée Thirty qui utilisait le capteur de proximité de l’iPhone, et apparemment il y a aussi une façon de le faire avec les AirPods… J’ai l’impression que la précision du capteur de proximité a un peu baissé depuis l’ajout de la Dynamic Island 😭