ARToolkit

1. Présentation

ARToolkit est une librairie de fonctions open-source et multi-plateformes dédiée à la création d’interfaces de réalité augmentée. Elle a été développée initialement par le docteur Hizokazu Kato de l’Université d’Osaka en 1999 et est toujours mise à jour par le Human Interface Technology Laboratory ( HIT Lab ) de l’Université de Washington. La dernière version en date est la 2.72.1 publiée le 18 Mai 2007. L’utilisation est libre dans le cadre d’une utilisation non-commerciale, des licences commerciales sont disponibles sous le nom ARToolWorks.

A l’inverse des effets spéciaux utilisés au cinéma, les principales problématiques de la réalité augmentée proviennent du fait que les mouvements de caméra et de la scène ne sont pas connues à l’avance. L’enrichissement de la réalité doit se faire en temps réel et à la volée lors de l’acquisition des images sans aucune information de départ sur l’environnement. Afin de donner l’illusion que les objets réels et virtuels appartiennent au même monde, il faut pourtant tisser un lien entre eux afin de les positionner correctement ( coordonnées, orientation, échelle ) par rapport aux objets filmés.

Bien que plusieurs méthodes peuvent être imaginées pour cela, ARToolkit utilise un système de marqueurs ( « Pattern » ). Un marqueur est un motif simple sur fond blanc entouré d’un cadre noir. L’algorithme doit tout d’abord détecter puis identifier ce marqueur, puis en déduit en temps réel sa position et son orientation par rapport à la caméra. Cet algorithme sera détaillé dans la partie suivante.

Par la suite, l’ajout d’objets virtuels se fait par rapport au repère en trois dimension dont l’origine, la taille et les directions sont calculés image par image à partir du marqueur.


Exemples de patterns reconnus par ARTookit

2. Principe de fonctionnement

2.1. Algorithme de détection : principe général

L’algorithme de détection d’ARToolkit effectue une suite d’opérations sur chaque image du flux vidéo afin d’une part de repérer la présence d’un marqueur, puis de l’identifier parmi les différents marqueurs chargés dans l’application ( dans le cadre d’une application multi-marqueurs ). Il fonctionne ainsi :

  1. La caméra capture la vidéo et l’envoie vers l’ordinateur ;
  2. Le programme binarise l’image puis recense tous les cadres noirs dans chaque image de la vidéo ;
  3. Pour chaque cadre trouvé, le programme utilise des formules mathématiques pour déterminer sa position et son orientation vis à vis de la caméra.
  4. Le motif présent à l’intérieur de chaque cadre est comparé avec les patterns chargés dans le programme afin de lui associer l’augmentation virtuelle qui lui est associée ;
  5. Cette augmentation, qui prend généralement la forme d’un objet 3D, est alors générée à partir de la position et de l’orientation du marqueur et est superposée à l’image capturée. Sa position, orientation et échelle sont alors ajustés par rapport au marqueur en temps réel.


Principe de fonctionnement, Traduit de la doc ARToolkit

2.2. Binarisation

La première étape fondamentale de l’identification est donc la binarisation de l’image issue de la caméra en noir et blanc, sans aucune nuance de gris. Cette dernière est évaluée selon un paramètre nommé threshold (frontière) configuré en en-tête du programme. Ce dernier converti tout d’abord le flux en niveaux de gris, et tous les pixels dont la valeur est inférieure au threshold seront noirs et inversement.

2.3. Normalisation

Bien entendu dans la majorité des cas le motif sera déformé par l’orientation du marqueur vis à vis de la caméra. C’est là que le carré noir trouve toute son utilité, en effet à partir de la position de chacun de ses sommets il est possible de normaliser le motif afin de l’identifier.

2.4 Identification du marqueur

Le motif redressé est ensuite comparé aux pattern chargés dans le programme. Ces derniers sont un fichier texte où chaque pixel est représenté par sa valeur en niveaux de gris (entre 0 et 255). Les degrés de similitude ou « confidence » sont ensuite calculés par rapport à chaque patt dans 4 sens différents, et le plus haut est retenu. Cela permet ensuite de déterminer et générer l’augmentation associée.

3. Utilisation

3.1. Installation de la librairie

Première étape mais non des moindres : l’installation d’ARToolkit et des outils pré-requis. Nous avons utilisé pour nos tests la dernière version en date, la 2.72.1 pour Windows. Voici les autres outils à télécharger :

  • DSVideoLib version 0.0.8b : interface de communication avec le driver de la webcam ;
  • GLUT (OpenGL utility toolkit) version 3.7.6 : une bibliothèque permettant de gérer l’affichage de fenêtres vidéo OpenGL à installer dans le dossier C:/windows/system32/ et dans l’environnement de développement  ;
  • DirectX Runtime : une collection de bibliothèques destinées à la programmation d’applications multimédia ;
  • OpenVRML (Virtual Reality Markup Language) version 0.14.3 : un gestionnaire permettant d’importer et de positionner des objets 3D.

L’installation est très aisée, il suffit d’extraire tous les fichiers de la librairie dans un dossier de son choix puis suivre les étapes décrites dans la documentation [5] pour les outils complémentaires.

La librairie est fournie avec un certain nombre de codes sources d’exemple présentant la plupart des fonctions utilisables. Le fichier de projet Visual Studio est également fourni et permet de générer très facilement l’ensemble des exécutables.

3.2. Création d’un pattern

Divers outils permettent de créer un pattern. Nous avons pour notre part utilisé Marker Generator une application Air mise à disposition par Saqoosha.net permettant de générer un fichier .patt à la dimension souhaitée.

Nous avons ainsi imprimé notre propre motif avec le texte « Ensicaen » incrusté en bas. Il s’avère que la reconnaissance d’un texte est moins précise que celle d’un motif qui serait aligné au centre, nous avons donc incrusté le texte en bas afin que le programme n’ait aucune difficulté à repérer le sens du motif.

3.3. Conception de l’objet 3D

Nous avons ensuite réalisé un objet en 3 dimensions à partir du logo de l’ENSICAEN. Pour cela nous avons utilisé le logiciel de modélisation Blender qui est mis à disposition librement sous licence GNU.

Ce logiciel propose, entre autres, un export au format WRL. Il s’agit d’un langage de modélisation d’univers en 3 dimensions. Il intègre la position et la forme des objets, ainsi que leurs couleurs ou textures et un éclairage.

Par ailleurs, il est même possible de modifier directement ce fichier avec n’importe quel éditeur de texte afin de modifier les matériaux ou les positions des objets. Cela s’avère même obligatoire car certains objets comme l’éclairage résistent mal à l’export ( sa position est réinitialisée automatiquement à l’origine ).

3.4. Association du pattern avec l’objet

Une fois le motif et l’objet 3D réalisés, il suffit de les combiner dans une application. Nous avons pour cela utilisé un des exemples fournis avec la librairie : simpleVRML.exe.

Celui-ci est capable de reconnaître marqueurs différents. Les associations sont déterminées dans le fichier object_data_wrml. Chaque fichier patt y est lié à un objet suivant ce modèle :

Fichier object_data_vrml Fichier ensi.dat
#Number of patterns to be recognized
2

# Snow Man
VRML Wrl/snoman.dat

Data/patt.kanji
80.0 # Taille du marqueur réel
0.0 0.0 # Décalage du marqueur

# Logo ENSI
VRML Wrl/ensi.dat
Data/patt.ensi
80.0
0.0 0.0

ensi.wrl

0.0 0.0 50.0 # Translation
90.0 1.0 0.0 0.0 # Rotation
25 25 25 # Scale