[Ethan D. Bloch] a First Course in Geometric Topol(BookZZ.org)
Alexandre Topol - Deptinfo
Transcript of Alexandre Topol - Deptinfo
![Page 1: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/1.jpg)
Alexandre Topol
![Page 2: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/2.jpg)
Propos de Ron Azuma
• To avoid limiting AR to a specific technology, AR systems should have the following characteristics:– Combines real and virtual elements– Interactive in real time– Registered in 3D
![Page 3: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/3.jpg)
Définition Wikipedia
• Augmented reality (AR) is a term for a livedirect or an indirect view of a physical, real-world environment whose elements are augmented by computer-generated sensory input, such as sound or graphics.
![Page 4: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/4.jpg)
Le continuum réalité-virtualité
![Page 5: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/5.jpg)
Historique
• 1966 - Ivan Sutherland invents HMD • 1990 – Tom Caudell coins the phrase Augmented Reality• 1992 – First functioning AR systems appear (military)• 1999 - Hirokazu Kato creates ARToolKit at HITLab• 2009 – ARToolKit ported to Flash by Saqoosha
![Page 6: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/6.jpg)
Difficulté technique
![Page 7: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/7.jpg)
Coût
• Les interfaces et dispositifs de la RA :– Head Mounted Displays (HMD)– Hand-Held Displays– Spatial Displays (environmentally integrated)
• Monitors• Projectors
HMD
Mobile
Monitor
�����
![Page 8: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/8.jpg)
AR Displays - Hand-Held
![Page 9: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/9.jpg)
AR Displays - Spatial
![Page 10: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/10.jpg)
AR Displays – Stéréoscopie
![Page 11: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/11.jpg)
AR Displays – CAVE
![Page 12: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/12.jpg)
AR Displays - HMD
![Page 13: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/13.jpg)
AR Displays – HMD Video
![Page 14: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/14.jpg)
AR Displays – HMD Video
![Page 15: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/15.jpg)
AR Displays – Optical HMD
![Page 16: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/16.jpg)
AR Displays – Optical HMD
![Page 17: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/17.jpg)
AR System Design
![Page 18: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/18.jpg)
Chaîne de production
Create 3D
models
Export to .3DS,
.DAE or .OBJ
Create fiduciary marker
Print fiduciary marker
Connect the
camera
Load all into AR software
Run AR software
![Page 19: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/19.jpg)
API QR Code
• http://www.shiffman.net/p5/pqrcode/• Télécharger l’API processing• Sont inclus les sources et les exemples• L’installation … comme d’hab …. On copie dans le
répertoire library• Les QR codes sont très largement utilisés au Japon• Données plus importantes que les codes barres (~100
octets)
![Page 20: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/20.jpg)
Squelette d’application
L’initialisation
• Déclarer l’espace de nom
• Créer et initialiser un objet decoder
import pqrcode.*;
Decoder decoder;
void setup() {
decoder = new Decoder(this);
}
![Page 21: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/21.jpg)
Squelette d’application
L’utilisation
• Demander au décoder de décoder une image
• Récupérer le résultat dans la callback
PImage img = loadImage("qrcode.png");
decoder.decodeImage(img);
void decoderEvent(Decoder decoder) {
String statusMsg = decoder.getDecodedString();
println(statusMsg);
}
![Page 22: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/22.jpg)
Fiducial marker
• ReacTIVision
![Page 23: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/23.jpg)
ReacTIVision vs QRCode
• QRCode n’est pas fait pour faire de la reconnaissance en temps réel– Ça fonctionne par snapshop : la chose m’intéresse je scanne son
QRCode pour avoir plus d’informations– Possible de faire de la reconnaissance à la volée– Encore moins fait pour faire du tracking d’objets
• TUIO fait du tracking temps réel sur 3 degrés de liberté– Les deux translations dans un plan parallèle à la caméra– La rotation selon la normale à ce plan– Pas d’information de profondeur associé aux marqueurs 2D
• Possibilité dans le protocole TUIO 2.0 de faire du suivi en 3D
![Page 24: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/24.jpg)
Installation ReacTIVision
• D’abord le moteur de vision• Puis le client TUIO pour que notre application
communique avec le moteur de vision (pour nous le client processing)
• Les messages OSC encode un protocole TUIO– OSC (Open Sound Control) est un formalisme pour coder un
contenu (comparable à XML ou JSON) qui émerge dans le monde multimédia (PureData, Max/msp, …)
– TUIO est un protocole et une API pour les surfaces tangibles et multitouchs.
![Page 25: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/25.jpg)
Utiliser TeacTIVision
• Lancer le moteur de vision• Puis lancer le client processing• Le client doit effectuer les opérations suivantes :
– Importer la librairie TUIO– Instancier un objet TUIO– Récupérer les objets TUIO vus– Implémenter les callbacks de la librairie TUIO qui permettent de
détecter les changements d’états
![Page 26: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/26.jpg)
Squelette d’application
L’initialisation
La PApplet courante est passée lors de la construction de l’objet TUIO. Cela suppose que les callbacks TUIO soient implémentées dans la classe courante.
import TUIO.*;
TuioProcessing tuioClient;
void setup() {
[...]
tuioClient = new TuioProcessing(this);
}
![Page 27: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/27.jpg)
Squelette d’application
La boucle de renduvoid draw() {
Vector tuioObjectList = tuioClient.getTuioObjects();
for (int i=0;i<tuioObjectList.size();i++) {
TuioObject tobj = (TuioObject)tuioObjectList.elementAt(i);
translate(tobj.getScreenX(width),tobj.getScreenY(height));
rotate(tobj.getAngle());
println("ID = " + tobj.getSymbolID());
}
![Page 28: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/28.jpg)
Squelette d’application
Les callbacks// called when an object is added to the scene
void addTuioObject(TuioObject tobj) {
println("add object "+tobj.getSymbolID()+" ("+tobj.getSessionID()+") "+tobj.getX()+" "+tobj.getY()+" "+tobj.getAngle());
}
// called when an object is removed from the scene
void removeTuioObject(TuioObject tobj) {
println("remove object "+tobj.getSymbolID()+" ("+tobj.getSessionID()+")");
}
// called when an object is moved
void updateTuioObject (TuioObject tobj) {
println("update object "+tobj.getSymbolID()+" ("+tobj.getSessionID()+") "+tobj.getX()+" "+tobj.getY()+" "+tobj.getAngle()
+" "+tobj.getMotionSpeed()+" "+tobj.getRotationSpeed()+" "+tobj.getMotionAccel()+" "+tobj.getRotationAccel());
}
![Page 29: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/29.jpg)
Squelette d’application
// called when a cursor is added to the scene
void addTuioCursor(TuioCursor tcur) {
println("add cursor "+tcur.getCursorID()+" ("+tcur.getSessionID()+ ") " +tcur.getX()+" "+tcur.getY());
}
// called when a cursor is moved
void updateTuioCursor (TuioCursor tcur) {
println("update cursor "+tcur.getCursorID()+" ("+tcur.getSessionID()+ ") " +tcur.getX()+" "+tcur.getY()+" "+tcur.getMotionSpeed()+" "+tcur.getMotionAccel());
}
// called when a cursor is removed from the scene
void removeTuioCursor(TuioCursor tcur) {
println("remove cursor "+tcur.getCursorID()+" ("+tcur.getSessionID()+")");
}
// called after each message bundle
// representing the end of an image frame
void refresh(TuioTime bundleTime) {
redraw();
}
![Page 30: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/30.jpg)
ARToolKit
• Une bibliothèque logicielle permettant de construire facilement des applications de RA(Sur-impression d’images virtuelles sur dans
un monde réel)
• ARToolkit se base sur des algorithmes de vision pour calculer et l’orientation de la (vraie) caméra par rapport à des marqueurs physiques
![Page 31: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/31.jpg)
ARToolKit
• Avantage de la librairies : – Tracking de la position/orientation d’une camera– Tracking de codes dans un carré noir– Possibilité d’utiliser n’importe quel code– Calibration de caméra automatique– Rapidité pour permettre le temps réel– Sur plateformes Linux, MacOS and Windows– Code source distribué– Et un portage sous processing :
• simpleARToolkit lui-même utilisant le binding java jARToolKit• http://code.google.com/p/simple-artoolkit-processing/
![Page 32: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/32.jpg)
Fonctionnement d’ARToolkit
![Page 33: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/33.jpg)
Utiliser SimpleARToolkit
• Installer la librairie (comme d’habitude)• Déclarer les espaces de noms nécessaires
(attention dans les exemples il manque video)
• Déclarer une référence SimpleARToolkit
• Instancier l’objet et déclarer une callback à exécuter
import processing.opengl.*;import processing.video.*;import pARToolKit.*;
SimpleARToolKit ar01;
ar01 = new SimpleARToolKit(this,"patt.hiro");ar01.register("showBox");
![Page 34: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/34.jpg)
Utiliser SimpleARToolkit
• Si nécessaire afficher l’image acquise par la caméra
• Rechercher les matchs
• Si match trouvé, on exécute la callback associée durant l’initialisation
ar01.showImage();
if (ar01.findMatch(100))
ar01.showObject();
![Page 35: Alexandre Topol - Deptinfo](https://reader034.fdocuments.us/reader034/viewer/2022042721/6267c09160ebf238a612dd07/html5/thumbnails/35.jpg)
Utiliser SimpleARToolkit
• Exemple de callbackvoid showBox(SimpleARToolKit t) {
pushMatrix();
noFill();
stroke(255,200,0);
box(50);
popMatrix();
}