5ème session du 6 juin 2011 – Réalité augmentée – 1ère partie

La Réalité Augmentée était le thème de la cinquième conférence du Paris Android User Group le 6 juin 2011.


Cette session a été sponsorisée par OXiane.

OXiane est un cabinet d’ingénierie, de conseil et de formation technologique qui développe son expérience dans la conduite de projets agiles et le développement d’applications Web, Java, Air ou Android.

Parmi ses activités, OXiane:

    1. investit en R&D sur Android.
  • accompagne ses clients dans le développement d’applications Android.

En 2008, la curiosité de quelques geeks de la société a amené à etudier cette nouvelle plateforme de Google basée sur Java. Par la suite, quelques personnes ont été mobilisées pour déminer le système, ses APIs, réaliser les premières applications.
Suite à cette étude, Oxiane a partagé son expérience à travers des conférences comme le Paris JUG de novembre 2009 (vidéo et slides) et d’une formation Android ajoutée à leur catalogue dès 2009.

Historiquement, Oxiane est une société de service technologique spécialisée dans les architectures distribuées et orienté vers le Système d’Information d’entreprise (la gestion en général). Cette première approche d’Android a permis d’identifier l’apport et les enjeux de la mobilité dans le S.I.

Parmi les enjeux identifiés, l’enjeu technologique: il s’agira de concevoir des architectures de services, distribuées, maintenables et à haute disponibilité, accessible depuis tout type de client par tout acteur du S.I., connecté ou pas.
Selon Oxiane, Android devient un candidat majeur, pour une raison très simple: il est écrit en java, le S.I. des grandes entreprises est de plus en plus majoritairement écrit en Java. En terme de maintenabilité, c’est un argument assez important.

An delà d’Android, la société s’intéresse au nouveau client Web (HTML5, CSS3, frameworks javascript, jQuery mobile, sensha touch) et à la convergence de la plate-forme client (PC/mobile/Tablette/TV) vers des standards technologiques communs.

Comme beaucoup de sociétés cette année, à la réponse d’une question du PAUG, Oxiane recrute aussi des développeurs.
Ils nous indiquent que la connaissance de Java et l’amour de la programmation est un préalable et un socle commun chez Oxiane.
Donc si vous avez une ou plusieurs spécialités qui vous tiens à coeur et que vous aimeriez développer (comme Android), ils cherchent à compléter leurs équipes.
Pour cela, leur site internet: http://www.oxiane.com/societe/offres/

Bref, OXiane s’implique de plus en plus sur Android et soutient ainsi cette communauté à travers le sponsoring du buffet de cette session.

La Réalité Augmentée
1 700 000 , c’est le nombre de résultats de la recherche « réalité augmentée » sur Google avec le terme français!
2,2 milliards de dollars, ce sera le marché de la Réalité Augmentée en 2015 selon le cabinet ARCchart

La Réalité Augmentée (RA ou AR pour les connaisseurs) connaît un buzz depuis quelques années et fait fantasmer plusieurs secteurs comme celui du tourisme, le divertissement/gaming avec l’AR Drone de Parrot, l’automobile, la publicité, le commerce et bien d’autres.

Certains fantasmes sont devenus réels et de plus en plus de professionnels se tournent vers cette technologie au vue des différents évènements qui y sont consacrés à Paris ces dernières semaines:

    1. L’Echangeur Augmente la Réalité, le 29 juin 2011, lieu de partage, réflexion, de démonstration et d’événementiel autour de l’innovation technologique et de services.
  • et bien sûr une conférence au PAUG!

Avant l’essor du téléphone mobile équipé d’appareil photo, le grand public connaissait la Réalité Augmentée au travers des cockpits des pilotes de chasse où des informations étaient superposées à la vue réelle du pilote.

Cette technologie superpose des images virtuelles sur un monde réel.
L’utilisateur devra en même temps voir les deux mondes en respectant les perspectives de ceux-ci afin de garder une précision de l’information.

Dans le cas du pilote dans son cockpit, les informations virtuelles sont projetées sur une vitre transparente.

Une autre méthode consiste à projeter une vidéo du monde réelle sur un écran et de superposer des informations supplémentaires sur ce même écran.

C’est cette dernière méthode qui a démocratisée la Réalité Augmentée auprès du grand public avec l’arrivée des smartphones intégrant les derniers matériels requis (appareil photo, GPS, boussole, accéléromètre, gyroscope). Il ne suffisait plus qu’à développer les applications utilisant la combinaison de ces matériels.

En raison de cet engouement depuis quelques temps, le PAUG nous a proposé une conférence pour apprendre à développer ces dites applications.

Dans un premier temps, Atef Haouari nous a expliqué le principe de Réalité Augmentée et nous a décrit les principaux navigateurs de RA.
Enfin, Sebastian Knödel et Ludovic Perrier nous ont présenté l’un des SDK de Réalitée Augmentée disponible sur Android: celui de Qualcomm.

Crédit Photos Patrick Scholtes

Atef Haouari, Consultant et passionné de Java/J2EE chez Valtech. Il intervient sur des missions de développement et d’industrialisation. Il a suivi l’évolution d’Android depuis ses débuts et est toujours impressionné par ce qu’offre cette plateforme mobile aujourd’hui.

Pour introduire sa présentation, Atef nous a précisé que l’on ne parle pas de librairie de Réalité Augmentée mais plutôt de Navigateur de Réalité Augmentée.
La tâche nous est facilitée avec une application déjà développée permettant de projeter des lieux et informations sur l’écran de son téléphone.

Pour illustrer sa présentation, il nous a proposé de télécharger l’application de démo à l’adresse
http://bit.ly/paugar (à installer sur son smartphone Android) et les sources (fichier zip).

Le navigateur de RA est composé de deux couches:

La couche virtuelle
Les informations sont affichées sur un fond transparent à travers l’implémentation de la class View qui est la classe mère de tous les éléments visuels.
Votre implémentation pourra utiliser des TextView, ImageView. Mais si vous voulez dessiner des formes plus complexes, vous devrez implémenter la méthode onDraw() en dessinant sur un Canvas.

public class InfoView extend View{
public void onDraw(Canvas canvas){
//draw what you want
}
}

La couche Réalité
La vidéo issue de la caméra du téléphone est affichée à l’écran de l’utilisateur avec la class SurfaceView

La class SurfaceView, bien qu’étendant la class View, est différente de son parent du fait que la class View n’autorise que le thread principal à dessiner dessus.

Or, pour afficher la vidéo de la caméra sur une SurfaceView, il y aurait un rafraîchissement d’au moins 15 images par seconde et le thread principal serait alors trop sollicité.
L’interface utilisateur risquerait alors d’être lente et l’interaction utilisateur impossible.
C’est la raison pour laquelle, la SurfaceView est dessinée sur un thread différent.

Après avoir traité l’implémentation des différentes couches, Atef nous informe qu’il existe deux techniques de Réalité Augmentée.Type 1: Traitement de l’image (SANS marqueur)

Le premier type superpose les informations en identifiant les images capturés. Ce type nécessite un traitement important de l’image.

Il ne fera pas parti de la présentation d’Atef car il est utilisé par le SDK Qualcomm qui a été présenté dans la deuxième partie de la soirée.



Type 2: Positionnement dans l’espace avec les capteurs (AVEC marqueur)

La plupart des applications qui utilisent la Réalité Augmentée ont besoin d’un marqueur.
Celui-ci permet au logiciel de création de la Réalité Augmentée de situer l’objet dans l’espace.

Ce marqueur va utiliser différents capteurs pour se positionner:

    1. La localisation (GPS ou par le réseau) permet de déterminer la latitude, longitude et l’altitude. Ces informations permettent de déterminer sa position géographique et la distance avec les points d’intérêts.
  • Le Gyroscope indique l’inclinaison du terminal par rapport à l’horizontal
  • La Boussole numérique indique le nord et donc l’orientation du terminal.
  • L’Accéléromètre permet de déterminer l’accélération suivi par le terminal à un instant t. Ce dernier capteur n’est pas vraiment utilisé dans les principaux cas.

Pour le premier capteur, il faudra implémenter l’interface LocationListener pour être notifié des changements de localisations:

public class MyLocationListener implements LocationListener {
public void onLocationChanged(Location location) {
//get latitude, longitude from location
}
}

Pour le deuxième et le troisième capteurs, il faudra utiliser un SensorEventListener en récupérant 3 valeurs:

public class MySensorListener implements SensorEventListener {
public void onSensorChanged(SensorEvent event) {
float values[] = event.values;
if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {
float direction = values[0]; // 0 to 359 degrees
float hautBas = values[1];
float gaucheDroite = values[2];
}
}
}

Lorsque vous dirigez votre smartphone vers une direction et que vous le passez du mode paysage au mode portrait, les valeurs hautBas et gaucheDroite changent.

Ces données vous permettront de placer correctement les éléments virtuels avec précision à l’écran.

Ensuite, lors du mouvement du smartphone, vous recevrez des mises à jours des informations. Il vous faudra donc faire une translation de ces éléments virtuels sur l’écran.

Cette translation en pixels se calcule en définissant le ratio suivant :

Ratio : largeur (pixels)/ angle d’ouverture (degrés)

Si il y a un changement de direction, il sera appliqué une translation de X degrés fois le ratio pour calculer le nombre de pixels à déplacer (ex 13 pixels par degré) .

La problématique de cette translation n’est pas de combien de pixels les éléments vont être déplacés mais plutôt seront-ils visibles aux extrémités de l’écran.
En effet, chaque terminal possède un angle d’ouverture / vision de la caméra différent. Par conséquent, il n’y aucune garantie de visibilité à l’écran pour les objets mis aux extrémités gauche, droit, haut et bas.

Il n’y a malheureusement pas de base de données des angles d’ouverture par terminal. Atef a indiqué qu’il a dû trouvé par lui-même l’angle d’ouverture de son HTC Desire HD qui est de 54,8°.
A partir d’Android 2.2, il est possible de récupérer cette valeur mais elle n’est pas toujours renseignée par les constructeurs.
Il va falloir donc gérer parfois au cas par cas.

Projection d’un POI

Pour situer un Point Of Interest sur l’écran par rapport à la direction du smartphone, il est important de savoir la direction pointée par le smartphone et l’angle du POI par rapport à sa localisation.
Le premier s’obtient avec la valeur venant de la boussole, le second s’obtient avec une méthode de l’API: userLocation.bearingTo(objectLocation).

Exemple: Imaginons qu’un monument soit est à 50° Est de l’utilisateur. Si l’utilisateur regarde à 40° Est, le monument sera donc affiché à 10° à droite de l’écran. Il faudra ensuite ramené ces 10° en pixels.
Moteurs de navigation gratuits
Après nous avoir montré les traitements à gérer dans une application de Réalité Augmentée, Atef nous a démontré la valeur ajouté des moteurs de navigation en Réalité Augmentée qui facilite le travail de développement en abstrayant la gestion des capteurs, le mode portrait/paysage, la gestion des angles d’ouvertures, la fragmentation des terminaux Android.

Parmi les moteurs de navigation, deux sortent du lot. Ce ne sont pas des librairies mais des applications autonomes dans lesquels le développeur fournit les informations à afficher.
Tout le travail de rendu à l’écran est alors géré par le moteur qui facilite ainsi l’intégration des données et de plus ils sont majoritairement gratuits.

Néanmoins, il est nécessaire d’installer l’application du moteur et accepter les conditions de celui-ci dont l’apparition de son logo.

Wikitude
Philipp Breuss, fondateur autrichien de Mobilizy, a fait une remarquable entrée en étant dans le TOP 50 des appplications du concours Android Developer Challenge en 2008, concours organisé par Google pour inciter les développeurs à créer des applications pour sa plateforme annoncée en novembre 2007.

Le moteur fonctionne avec les Intents d’Android.
Il gère le mode paysage/portrait et est l’un des premiers moteurs compatible Android.

Layar,
Layar, société néerlandaise, a été fondée en 2009.

Son moteur de navigation n’est pas aussi ouvert que celui de Wikitude car il faut se connecter sur leur site web, se créer un compte développeur, créer une couche et fournir l’URL de son service.

La nouvelle couche est affichée dans l’application Layar qui va récupérer vos données via un service REST en JSON.

Malheureusement, une démo n’a pas été possible car la société ne permet pas de créer des couches de démo.

Mais une fois votre couche créée, vous verrez vos informations dans l’application Layar. Il est à noter que les POI sont limités à 5 km autour de sa position.

Questions:
– pourquoi les images se déplacent par cran?
>1 degré correspond à 14 pixel (800/54,8) . De plus, les informations du capteur sont instables. Pour remédier à ce problème il faut lisser les valeurs en envoyant par exemple la moyenne des 10 dernières valeurs.

– Quelles librairies pour Android?
>Mixar par exemple, mais Wikitude et Layar sont principalement utilisés en tant que navigateur.

PS: N’hésitez pas à commenter ou à poser des questions dans les commentaires.

Retransmission du live stream

Watch live streaming video from parisandroidug at livestream.com
Autre vidéo filmée de plus près

Galerie photos

A propos de l’auteur

*Quang-hai PHAN, développeur indépendant.
Rôle: organisation, rédaction
A travaillé sur divers projets Web, iPhone et Android.
Suit de près les nouveaux usages des technologies “post-ordinateur”.
Vous pouvez le suivre sur twitter (@parisfreelance), Google+ , linkedin, plancast ou un de ses blogs.“Android sera dans des dispositifs que vous utiliserez tous les jours”

paug