Vous êtes sur la page 1sur 2

Partie recup des données

En utilisant l'API java de google, nous avons écrit un programme qui prend en entrée des
coordonnées GPS de deux points sur une route, ainsi qu'une distance en mètre représentant une
distance égale entre chaque point du trajet renvoyé par les serveurs de google. Le trajet renvoyé est
le trajet par défaut de l'API, c'est à dire le premier trajet que renverrait google map en lui donnant
les coordonnées GPS de deux points.
En sortie, le programme renvoie un fichier texte contenant des points sur le trajet à intervalle
constant, avec sur chaque ligne les coordonnées GPS et l'altitude correspondante à ce point.
Dans l'ordre, le programme fait une requête de distance entre le point de départ et d'arrivée pour
déterminer le nombre de points que l'on va récupérer.
On fait ensuite une requête de « direction », qui renvoit sous une forme encodée le chemin entre les
deux points.
On peut ensuite à partir de l'objet EncodedPolyline récupérée par la requête précédente, émettre une
dernière requete qui prend en paramètre cet objet et renvoit l'altitude de points à intervalle constant
sur le trajet.
Avec les coordonnées GPS et l'altitude on peut ensuite approximer la pente de la route sur tout le
trajet.

Partie traitement d'images.

La surface frontale est déterminante dans le calcul de la résistance de l'air. Elle peut être estimée à
partir du poids, de la taille et de modèles préexistants, mais ils nous semblaient intéressant de la
mesurer précisément à l'aide d'une photographie et de techniques de traitement d'images.

Une fois l'utilisateur découpé, on utilise sa taille comme étalon, en calculant des pieds à la tête le
nombre de pixels qui composent l'utilisateur, et en assumant que les pixels soient carrés, on obtient
alors la surface que représente un pixel au plan de l'utilisateur. On peut alors calculer la surface du
plan au niveau de l'utilisateur sur toute l'image, puis récupérer le pourcentage de pixel considéré
comme faisant partie de l'utilisateur, ce qui finalement donne la surface frontale de l'utilisateur.

Nous nous sommes d'abord intéressé au cas le plus simple, quand le fond derrière l'utilisateur est
uni et blanc, avec un algorithme qui passe en noir tout pixel dont la valeur dans le modèle RGB est
supérieure à une valeur arbitraire considérée blanche comme par exemple 220 220 220.
Cette méthode fonctionne mais est contraignante pour un utilisateur, elle implique que l'utilisateur
puisse prendre une photographie sur un fond aussi blanc que possible, et avec des conditions
d'éclairages telles qu'il ne projette pas d'ombre .

L'image suivante est le résultat de l'application ci-dessus, et renvoie une surface en m² de 1,12.
[nathanDecoupe.jpg]

Ce resultat n'est pas abberrant mais semble incorrecte comparé à des sources comme
http://wwwwingsuit.blogspot.fr/2009/12/1-chute-verticale-dun-homme.html
qui affime que pour une personne d'une taille de 1m73 et de 63 kg sa surface est de 0,56 m².
Les contraintes importantes avec cette méthode nous ont emmenés à nous intéresser à des
algorithmes plus avancés pour extraire le contour d'une personne du fond de l'image, pour un fond
pas nécessairement uni en couleur. Nous avons pour cela utiliser une librairie de vision par
ordinateur, openCV.

OpenCV nous as permis d'expérimenter avec des algorithmes déjà existant pour chercher une
solution à notre problème :

Grabcut est un algorithme basés sur les graphes auquel on donne en entrée un masque contenant le
maximum de pixel appartenant au premier plan, grabcut utilise alors des méthodes statistiques pour
réunir des pixels entre eux basés sur leurs couleurs. L'algorithme fait un nombre d'itérations fixés et
converge vers la partie de l'image à découper si le masque est assez précis.

Cette méthode présente l'inconvénient d'être très peut efficace en terme de complexité, du moins
avec l'implémentation de openCV, une itération prenant plusieurs dizaines de secondes. Elle
demande aussi une importante assistance de la part de l'utilisateur, puisque le découpage inclut
souvent des parties de l'image non voulues.

Voici un résultat : [AgnesAvantGrabcut.jpg] [Agnesgrabcut.jpg]