From Référence Librairie javadocPro

Main: OpencvMarkerPrincipe


Librairie JavacvPro

Utiliser Nyar4Psg (implémentation ARToolkit pour Processing) avec JavacvPro


ARToolkit, c'est quoi ?

Intérêt

Pourquoi c'est intéressant ?

Pour quoi faire ?

Etat des lieux de l'existant

ARToolkit sous Processing = la librairie nyar4psg !

Mon choix = la librairie nyar4psg !

Tutoriel / exemple :

Installation

Pré-requis :

Obtenir et imprimer des "markers"

Dans une première approche

Créer des markers ?

Infos technique sur les markers

Principe général d'un programme Processing utilisant ARToolkit avec la librairie nyar4psg et Javacvpro :

Inclure les fichiers de librairies utiles :

import codeanticode.gsvideo.*; // importe la librairie vidéo GSVideo
import monclubelec.javacvPro.*; // importe la librairie javacvPro
import jp.nyatla.nyar4psg.*; // the NyARToolkit Processing library

import java.awt.*; // Classe Point, Rectangle , etc...
 

Déclarations :

On déclare un objet MultiTracker qui va contenir les informations de description des markers à rechercher et va servir de base pour la détection des markers dans l'image :

MultiMarker nya;

On déclare les autres objets utiles :


GSCapture cam; // déclare un objet GSCapture représentant une webcam

OpenCV opencv; // déclare un objet OpenCV principal

PMatrix3D syst3D; // déclare une matrice 4x4 représentant un système de coordonnées 3D..
 

On déclare également les chemins nécessaires pour la configuration de l'objet MultiMarker :

//----- chemin absolu fichier de paramètres de distorsion de la camera ----
//String camParamPath = "/home/hinault/Téléchargements/librairies_processing/nyar4psg-1.1.6/data/camera_para.dat";
String camParamPath = "/home/xavier/Téléchargements/processing-1.5/modes/java/libraries/NyAR4psg/data/camera_para.dat";
// utilise le fichier par défaut - donne résultat satisfaisant

//----- chemin absolu fichiers de description des patterns ou markers ----
String patternPath = "/home/xavier/Téléchargements/patternMaker/examples/ARToolKit_Patterns";
// à télécharger ici : http://www.cs.utah.edu/gdc/projects/augmentedreality/

On déclare enfin un tableau d'objet Marker (JavacvPro) qui va contenir toutes les informations utiles issues de la détection des markers. L'objet Marker fait le pont en quelque sorte entre les librairies Javacvpro et Nyar4Psg

Marker[] markersArray = new Marker[numMarkers]; // tableau pour stockage des paramètres des markers détectés avec ARToolkit - classe javacvPro !

Setup

On initialise l'objet MultiMarker;, le tableau d'objet Marker et on charge le nombre voulu de fichiers de pattern à rechercher que l'on ajoute à l'objet MultiMarker :


     //=========== initialisation détection des markers =========================

     // création d'un objet MultiMarker avec résolution voulue, les paramètres caméra et le système de coordonnées voulu
        nya = new MultiMarker(this, widthAR, heightAR, camParamPath, NyAR4PsgConfig.CONFIG_DEFAULT);

   // fixe le nombre de fois qu'un marqueur ne doit plus etre détecté pour ne plus l'afficher.
     //Par défaut = 10. Mettre à 1 pour visualisation immédiate
      nya.setLostDelay(1);

      // fixe le niveau de seuil de détection à utiliser. Valeur possible entre 0 et 255. Mettre -1 (=THLESHOLD_AUTO) pour seuil automatique - respecter la "faute"
        nya.setThreshold(MultiMarker.THLESHOLD_AUTO);

        // fixe le niveau de seuil de confiance (= probabilité de correspondance) à utiliser pour la reconnaissance des markers. Valeur possible entre 0 et 1.
        // Valeur par défaut = 0.51 (=.DEFAULT_CF_THRESHOLD). Plus le seuil est élevé et plus la détection est rigoureuse.
        nya.setConfidenceThreshold(MultiMarker.DEFAULT_CF_THRESHOLD);
        //nya.setConfidenceThreshold(0.8); // sélection exigeante

        //-- chargement des fichiers de description des patterns

        //------- création des objets Marker individuel du tableau de markers (javacvPro)
        // et initialisation des propriétés communes
        for (int i=0; i<markersArray.length; i++) {
          markersArray[i]=new Marker();
          markersArray[i].realWidth=realWidthMarker;
        } // fin for

        //-------- initialisation du tableau d'objets marker (javacvPro)
        // chaque objet Marker de la librairie javacvPro contient les paramètres attachés au marker nyar correspondant
        // son nom = le fichier de description *.patt
        markersArray[0].name="4x4_99.patt"; // mémorise le nom du fichier du marker voulu
        markersArray[1].name="4x4_50.patt"; // mémorise le nom du fichier du marker voulu
        markersArray[2].name="4x4_83.patt"; // mémorise le nom du fichier du marker voulu
        markersArray[3].name="4x4_23.patt"; // mémorise le nom du fichier du marker voulu
        markersArray[4].name="4x4_68.patt"; // mémorise le nom du fichier du marker voulu
        markersArray[5].name="4x4_76.patt"; // mémorise le nom du fichier du marker voulu
        markersArray[6].name="4x4_55.patt"; // mémorise le nom du fichier du marker voulu
        markersArray[7].name="4x4_34.patt"; // mémorise le nom du fichier du marker voulu
        // etc...

        //---- chargement des markers dans le MultiMarker (nyartoolkit)---
        for (int i=0; i<markersArray.length; i++) {
          nya.addARMarker(patternPath + "/" + markersArray[i].name, markersArray[i].realWidth); // ajoute le fichier de description à l'objet principal de détection AR - bordure 25% et 16x16 par défaut
          println ("Fichier chargé : " + markersArray[i].name);
        } // fin for
 

Draw :

nya.detect(image); // detect markers in the input image at the correct resolution (incorrect resolution will give assertion error)
opencv.updateMarkers(nya, markersArray, false); // met à jour le tableau des paramètres 2D des markers - javacvPro

Se reporter aux programmes d'exemple des différentes fonctions pour plus de détails.

Trucs techniques de mise en oeuvre :

Commentaires utilisateurs

Aucun

Cette page est une création originale de Xavier HINAULT - Tous droits réservés - 2011/2012

Retrieved from http://www.mon-club-elec.fr/pmwiki_reference_lib_javacvPro/pmwiki.php?n=Main.OpencvMarkerPrincipe
Page last modified on April 09, 2012, at 05:26 AM