ARKit – ARCore – Vuforia

De nos jours, plusieurs géants proposent des outils de développement pour créer des applications mobiles de Réalité Augmentée, cependant lequel choisir ?

Dans cet article, nous allons nous concentrer sur ARKit proposé par Apple, ARCore de Google et Vuforia de PTC. Ces trois outils qui se concurrencent essayent de suivre les tendances actuelles (Suivi, Estimation de lumière, VIO, …)

ARKit

Prérequis
  • iPhone, iPad avec puce A9+
  • Xcode 9

ARKit, sortie l’année dernière avec iOS 11, a fait le buzz. En effet, Apple propose un kit de développement très bien pensé et de haut niveau. ARKit contient trois couches de fonctionnalités permettant de concevoir une application de Réalité Augmentée:

Suivi de position

ARKit permet de suivre l’appareil dans l’espace en temps réel. Grâce aux données de la centrale inertielle et de la caméra, ARKit détermine à la fois la position et l’orientation du téléphone au fur et à mesure qu’il se déplace. Cela permet d’adapter en temps réel le point de vue sur les différents objets virtuels placés dans la scène. C’est le principe de l’odométrie visuelle et inertielle (VIO) décrite dans un précédent article.

Compréhension de l’environnement

ARKit, en analysant la scène, est capable d’identifier les surfaces planes horizontales ou verticales (sol, table, porte, mur, etc). Il est également possible d’enregistrer des images/marqueurs 2D dans l’applications qu’il sera alors possible de détecter durant l’utilisation de celle-ci. Enfin, ARKit fournit une estimation des conditions d’éclairage ambiant permettant un rendu plus réaliste, notamment en ajoutant des ombres.

ARKit – Détection de plan vertical et horizontal
Moteur de rendu

ARKit offre la possibilité de choisir entre plusieurs moteurs graphiques pour afficher des modèles 3D.

  • SpriteKit : moteur 2D utilisé pour créer des jeux 2D.
  • SceneKit : moteur 3D de haut niveau qui permet d’afficher des modèles 3D, de la simulation physique et des animations.
  • Metal : moteur graphique 3D de bas niveau (l’OpenGL d’Apple)
    • Celui-ci permet de créer des rendus 3D très avancés
    • Requiert des grandes connaissances en infographie.

Il est ainsi possible de gérer une scène et/ou des modèles 3D à différents niveaux d’abstraction.

Intégration d’ARKit dans l’environnement iOS (source)

Concrètement, que peut-on faire avec ARKit ?

# Affichage de modèles 3D à la volée

Grâce à la détection de plans, il est possible pour l’utilisateur de venir déposer explicitement un modèle 3D dans l’environnement réel de manière cohérente et simplifiée. En effet, sur Smartphone, l’interaction se fait majoritairement sur un écran tactile, donc en 2D. Or, les environnement réels et virtuels sont en 3D. Il est alors potentiellement possible de déplacer un objet virtuel selon ces 3 dimensions. Or c’est une tâche délicate à réaliser en utilisant un moyen d’interaction 2D (ici l’écran tactile). La détection de plan permet ainsi de fixer une dimension (l’axe vertical pour une surface horizontale par exemple), et restreint donc l’espace de déplacement à 2 dimensions, permettant ainsi de déplacer le modèle plus aisément.

ARKit – Déplacement d’un modèle 3D ancré sur une surface détectée
# Affichage de modèles 3D automatique

Tout nouveau depuis la version iOS 11.3 (ARKit 1.5) la détection d’image/marqueur est enfin possible. Contrairement à l’affichage de modèles à la volée, où c’est l’utilisateur qui va explicitement placer un modèle là où il le souhaite, la détection d’image/marqueur permet d’afficher automatiquement un ou plusieurs modèles lorsqu’une image/marqueur prédéfinie est détectée. Ceci peut être utile dans certains cas d’usage. Par exemple, on peut vouloir afficher des informations sur des peintures dans un musée. En ayant enregistré au préalable une photo de chaque peinture, il sera alors possible d’afficher automatiquement les informations associées lorsque la peinture sera détectée dans le champ de vision de la caméra.

Détection d’une peinture (source)

Observations

Après avoir testé toutes les fonctionnalités proposé par ARKit, j’ai quelques remarques à vous faire partager. Premièrement, lorsqu’ARKit détecte un plan, qu’il soit vertical ou horizontal, le plan ne s’adapte pas parfaitement sur la surface. Cela peut causer des problèmes dans certains cas particuliers. Par exemple, on veut pouvoir utiliser cette fonctionnalité pour ancrer un modèle 3D à la surface plane détectée. On s’attend donc ce que notre modèle soit plaqué contre cette surface. Or, il existe très souvent un décalage entre le plan détecté et la surface physique. Ce décalage peut donc casser l’effet d’incrustation du modèle virtuel dans l’environnement réel.

ARKit – Mauvaise précision du plan détecté

De plus, ARKit n’est pas capable de détecter plusieurs fois la même image sans contournement fastidieux. En effet, ARKit considère qu’une image détectée est associée à un modèle 3D, ainsi, lorsqu’elle a été détectée, elle ne peut pas l’être une seconde fois. Ce point peut être gênant dans certains cas d’usage. Par exemple, on peut vouloir ajouter plusieurs fois le même objet virtuelle à des endroits prédéfinis dans l’espace. L’utilisation d’images/marqueurs prend alors tout son sens. Or, il sera nécessaire d’utiliser une image/marqueur différente par objet virtuel affiché, même si ces derniers sont identiques.

Malgré ces petites faiblesses, ARKit reste un outil très robuste, notamment en terme de suivi de position grâce à l’utilisation de la VIO. Cette technologie permet de fournir des résultats impressionnants même en basse lumière.

ARCore

Prérequis

En ce début d’année 2018, un nouvel outil de développement est arrivé sur le marché, ARCore, proposé par Google. Ce nouveau framework Android tente de concurrencer ARKit sortie quelques mois auparavant. ARCore suit les principes simple de la Réalité Augmentée et fournit des fonctionnalité similaire à celle d’ARKit.

# Suivi de position

ARCore fonctionne de la même façon qu’ARKit, il utilise les données de la centrale inertielle et de la caméra (VIO) pour déterminer la position et l’orientation du téléphone.

# Compréhension de l’environnement

De la même manière qu’ARKit, ARCore est capable de détecter des surfaces horizontales. Notons qu’il ne peut par contre pas détecter les surfaces verticales (ce qu’il est possible de faire avec ARKit). Toujours comme ARKit, il est possible d’améliorer le rendu des objets virtuels en les éclairant de manière cohérente par rapport à leur environnement.

Concrètement, que peut-on faire avec ARCore ?

En utilisant ARCore seul, il est possible d’afficher uniquement des modèles 3D à la volée. En effet, contrairement à ARKit, il n’y a pas de fonctionnalité de détection d’image/marqueur permettant de faire de l’affichage automatique d’objets virtuels. Aussi, notons que l’affichage de modèles sur des surfaces verticales sera délicate car ARCore n’est pas capable de détecter ce type de surface. Il faut donc permettre à l’utilisateur de déplacer des modèles dans les 3 dimensions de l’espace ce qui, comme nous l’avons dit précédemment, n’est pas évident en utilisant un écran tactile (surface d’interaction 2D).

ARCore – Détection des plans

Observations

ARCore permet de faire du suivi de position du même niveau de précision qu’ARKit, ce qui est un très bon point. Par contre, moins de fonctionnalités sont disponibles (détection de plans verticaux, détection d’images/marqueurs). Ceci nécessitera soit de faire appel à une librairie tierce pour disposer des ces fonctionnalités (pas toujours gratuites), soit de les implémenter directement, et dans ce cas de faire appel à des ressources très compétentes en infographie. Ensuite, de notre point de vue, la prise en main de l’outil de développement est assez fastidieuse. Peu d’exemples sont disponibles et la documentation est insuffisante. Enfin, contrairement à ARKit qui met à disposition différents moteurs de rendu, ARCore propose uniquement un moteur graphique bas niveau (OpenGL ES), ce qui requiert de bonnes compétences en infographie.

Vuforia

Vuforia est l’outil de Réalité Augmentée multi-plateforme (iOS, Android, Windows Phone) le plus connu sur le marché. Sorti bien avant ses concurrents d’aujourd’hui, celui-ci propose un large panel de fonctionnalités. Vuforia intègre la puissance des plateformes natives ARCore & ARKit dans son kit de développement nommé Vuforia Fusion : celui-ci permet de détecter les capacités du périphérique sous-jacent et les fusionner avec les fonctionnalités offertes par Vuforia. Cela permet ainsi de fournir aux développeurs une seule et même API pour développer une application de Réalité Augmentée.

Prérequis
  • Développement multiplate-forme avec Unity.
  • Développement iOS avec Xcode.
  • Développement Android avec Android Studio
  • Développement Windows Phone avec Visual Studio.

Vuforia Fusion tire parti, si le dispositif utilisé le permet, des fonctionnalités natives des plateformes ARKit/ARCore. Sinon, les fonctionnalités internes à Vuforia seront utilisées. Cette fusion des fonctionnalités est totalement transparente pour les développeurs. Elle permet ainsi de conserver une API similaire peu importe la plateforme utilisée et d’étendre des fonctionnalités à des dispositifs non supportés par ARKit et ARCore.

# Suivi de position

Vuforia propose une fonctionnalité de suivi de position (Extended tracking) basée sur de l’odométrie visuelle. Malheureusement, cette technologie est moins performante que les algorithmes de VIO utilisés par ARKit et ARCore qui bénéficient de la fusion des données inertielles et des images de la caméra.

# Compréhension de l’environnement

Depuis les dernières versions, Vuforia est capable de détecter des surfaces horizontales et d’améliorer le rendu des objets virtuels en les éclairant. Comme pour ARKit et ARCore, cela permet à l’utilisateur de placer des objets virtuels dans l’environnement sans utiliser d’images/marqueurs. Grâce à Vuforia Fusion, cette fonctionnalité tire parti de la puissance d’ARKit et ARCore pour suivre un objet virtuel placé sur une surface détectée. Si le dispositif utilisé n’est pas compatible avec ces technologies, c’est un algorithme interne à Vuforia qui est utilisé.

# Détection d’image

Vuforia met à disposition une plateforme web pour importer les images/marqueurs qui seront utilisées dans l’application afin de les exporter dans un format lisible par Vuforia. Ceci rend l’importation très simple (aucun code n’est nécessaire, tout se fait en ligne). Par contre, cela contraint les développeurs à définir toutes les images/marqueurs avant l’utilisation de l’application. Mais pas que, Vuforia permet également de créer une image/marqueur lors de l’utilisation de l’application en sélectionnant une image issue de la caméra qui sera définit en tant que marqueur. Cela donne une dynamique à l’application, offrant ainsi, aux utilisateurs le choix de leurs images/marqueurs.

# Détection de modèle 3D

Fonctionnalité bien plus avancée que la détection d’images/marqueurs, Vuforia permet de détecter directement un modèle physique (donc 3D). En effet, Vuforia propose pour cela deux outils:

  • Object Recognition permet de détecter un objet physique scanné au préalable à l’aide d’une application mobile. Une représentation 3D de l’objet est alors reconstruite, et permettra sa détection à travers les images de la caméra de la même manière que la détection d’images/marqueurs. Notons que cette méthode permet de détecter uniquement des objets de petite taille, étant donné qu’il est nécessaire d’utiliser une cible papier sur laquelle poser l’objet physique pendant la phase de reconstruction.
  • Model target permet de détecter un objet physique en utilisant son modèle CAD. Il suffit pour cela d’importer le modèle CAD dans un outil, qui reconstruira une représentation de l’objet lisible par Vuforia. Contrairement à l’outil Object Recognition, il est ici possible de détecter des objets de n’importe quelle taille, car c’est leur modèle CAD qui est utilisé.

# Reconnaissance de texte

Encore une autre fonctionnalité très intéressante est la reconnaissance de mots ou d’une suite de mots dans un texte. Notons que cette fonctionnalité est disponible uniquement en anglais (Text Recognition).

# Ensuite…

Je vous invite a regarder la documentation officiel de Vuforia pour connaitre toute les fonctionnalités proposées par l’outil.

Concrètement, que peut-on faire avec Vuforia ?

Grâce à Vuforia, il est possible de réaliser les mêmes choses qu’avec ARKit et ARCore. Il est ainsi possible d’afficher des objets virtuels à la volée grâce à la détection de plans horizontaux, ou bien d’afficher des objets virtuels de manière automatique grâce à la détection d’images/marqueurs. Mais Vuforia va un peu plus loin grâce à la reconnaissance d’objets 3D, permettant ainsi d’afficher automatiquement des objets virtuels sans avoir à disposer des images/marqueurs dans notre environnement physique.

Aussi, grâce à son intégration dans Unity, Vuforia permet de concevoir des applications multi-plateformes. Ainsi, une seule application pourra être déployée sur tous les dispositifs (iOS et Android), facilitant son développement et sa maintenance.

Observations

Vuforia a su se mettre en valeur en offrant une panoplie de fonctionnalités aux développeurs dans une seule API disponible sur iOS, Android et Windows Phone qui offrent plus de possibilités pour afficher des objets virtuels qu’ARKit et ARCore. Par contre, une fois ces modèles affichés, les algorithmes de suivi utilisés sont beaucoup moins performants que ceux utilisés dans les deux autres plateformes (sauf pour la détection de plans horizontaux qui peut faire appel à ces deux technologies via Vuforia Fusion). Et c’est un point primordial. En effet, une fois l’objet virtuel affiché, si l’utilisateur se déplace dans l’environnement physique, on s’attend à ce que l’objet virtuel lui, ne bouge pas. Or sur ce point Vuforia a clairement du retard par rapport à ARKit et ARCore.

Concernant l’écosystème, il est très bien pensé, la documentation et les exemples sont très bien expliqués. Grâce à l’intégration de Vuforia dans Unity, il est possible de créer des applications multi-plateformes basiques (affichage d’un modèle 3D sur une image/marqueur par exemple) sans écrire une ligne de code. Par contre, dès lors que l’on veut complexifier l’application, cela demande beaucoup de connaissances en Unity. Si l’aspect multi-plateforme n’est pas un impératif, il est alors possible d’utiliser les API natives de Vuforia (iOS, Android, Windows Phone). De notre expérience, ces APIs sont beaucoup plus bas niveaux qu’ARkit. Tout comme ARCore, cela nécessite des connaissances/compétences en OpenGL ES pour gérer l’affichage des modèles 3D par exemple. Malgré un documentation étoffée, l’utilisation de ces APIs ne restent donc pas accessible à n’importe quelle personne compétente en développement mobile.

Enfin, si vous pouvez développer des applications avec Vuforia gratuitement pendant une phase de prototypage, il vous en coûtera 499$ par application si vous souhaitez les déployer.

Conclusion

ARKit, ARCore et Vuforia sont de très bon outils de Réalité Augmentée. ARKit et ARCore se concurrencent fortement au niveau du suivi de position en utilisant des algorithmes similaires (VIO). Le suivi de position proposé par Vuforia est beaucoup moins performant, mais il est maintenant possible de bénéficier des algorithmes de suivi des plateformes natives grâce à Vuforia Fusion dans certains cas particuliers.

En termes de fonctionnalités, Vuforia est clairement en avance sur ses concurrents, en proposant notamment la détection d’objets 3D et la détection d’images/marqueurs plus aboutie que celle proposée par ARKit (ARCore ne la propose pas).

Au sein du KZSLAB nous avons choisi de développer avec ARKit. C’est pour nous le meilleur compromis entre fonctionnalités offertes et robustesse des technologies (notamment en termes de suivi de position). De plus, l’environnement nous semble beaucoup plus facile à prendre en main grâce à son API de haut niveau.

Bien que Vuforia offre plus de fonctionnalités qu’ARKit, celles-ci ne nous ont pas été utiles dans les cas d’usage que nous avons traités. Si besoin, il est possible d’intégrer Vuforia dans une application utilisant ARKit pour bénéficier d’une fonctionnalité particulière. Aussi, ces technologies étant en constante évolution, il ne fait aucun doute que Apple et Google vont rapidement fournir de nouvelles fonctionnalités à travers leurs plateformes respectives. De même, Vuforia devrait rapidement tenter de rattraper son retard en termes de suivi de position, notamment en élargissant le champ d’application de sa brique Vuforia Fusion, permettant ainsi de bénéficier des algorithmes de suivi proposés par ARKit et ARCore dans plus de fonctionnalités.

De plus, dans certains cas d’utilisation, les outils tels qu’ARKit, ARCore et Vuforia ne suffisent pas. Ainsi, la combinaison d’outils externes de vision par ordinateur ou de machine learning avec les frameworks AR sont souvent utilisés. Par exemple, on voudrait faire de l’augmentation de toutes les surfaces rectangulaires. Ceci est tout à fait possible avec Vison (l’outil de vision par ordinateur d’Apple) et ARKit (voir ici).

J’espère vous avoir un peu plus éclairé sur les différents outils de développement de Réalité Augmentée.

Ci-dessous un tableau récapitulatif des fonctionnalités proposées par ARKit, ARCore et Vuforia.

Fonctionnalités ARKit ARCore Vuforia
Détection de plan vertical X (ARKit Fusion)
Détection de plan horizontal X X X
Détection d’image/marqueur X X
Détection d’objet 3D X
Estimation de la lumière X X (ARKit Fusion)
Projection 2D – 3D (Hit Testing) X X X

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *