Réalité augmentée à l’aide de marqueurs fiduciaires
Marqueurs Fiducial ArUco
Selon Wikipédia, un marqueur fiducial «est un objet placé dans le champ de vision d’un système d’imagerie qui apparaît dans l’image produite, pour servir de point de référence ou de mesure. Ce peut être soit quelque chose placé dans ou sur le sujet imageur, soit une marque ou un ensemble de marques dans le réticule d’un instrument optique. » [1] Les marqueurs fiduciaires ont été utilisés dans de nombreux contextes différents comme mesures. Par exemple, si vous preniez une photo d’une personne debout à côté d’une règle pour voir sa taille, la règle agirait comme un marqueur fiduciaire.
En 2014, un document de recherche a été produit qui proposait un système de marqueurs fiduciaux spécialement conçu pour l’estimation de la pose de la caméra [2]. L’estimation de la pose de caméra est un processus de recherche de correspondances entre des points dans l’environnement réel et leur projection d’image 2D. L’utilisation de marqueurs fiduciaux rend ce processus beaucoup plus facile. Les marqueurs qu’ils ont proposés sont appelés marqueurs ArUco. Deux des auteurs de cet article, Rafael Muñoz et Sergio Garrido, ont produit un module pour travailler avec eux et celui-ci a été à son tour incorporé dans OpenCV en tant que module aruco [3].
Détection d’un marqueur ArUco avec OpenCV et Python
Dans un article précédent, j’ai mentionné Pyto [4] J’ai donc pensé que j’écrirais un script qui trouverait un marqueur ArUco, puis dessinerais une boîte autour, à partir d’un flux de caméra en direct sur mon iPhone. J’ai utilisé l’image de marqueur ArUco suivante:
J’ai imprimé cette image sur un morceau de papier et l’ai placée sur mon bureau:
Vous remarquerez que j’ai réduit la transparence à 50% pour économiser ma cartouche d’encre noire! Cela fonctionne toujours bien.
Voici mon script qui détecte le marqueur puis dessine la boîte autour de lui, avec l’ID:
Voici le script exécuté avec le marqueur ArUco sur ma table:
Réalité augmentée
Une fois que j’ai pu détecter le marqueur, j’ai pensé qu’il serait bon de placer une image dessus qui maintiendrait la bonne perspective pendant que vous bougiez la caméra. Pour ce faire, nous devons connaître l’homographie du marqueur. Nous pouvons ensuite transformer l’image en cette même homographie et la placer correctement au-dessus du marqueur.
Vous n’avez pas besoin de comprendre les détails réels de l’homographie, des coordonnées homogènes ou des matrices pour pouvoir y parvenir. Mais si vous êtes intéressé, consultez les références des articles Wiki à la fin [5][6].
Pour obtenir l’homographie, nous appelons la méthode OpenCV findHomography. Une fois que nous avons l’homographie, nous pouvons alors appeler la méthode warpPerspective qui fera une transformation affine sur l’image pour la mettre dans la bonne perspective et la placer correctement au-dessus du marqueur.
Voici mon script qui fait ça:
Et voici à quoi il ressemble lorsqu’il fonctionne dans Pyto: