Le javascript est désactivé sur votre navigateur
 
Prononcer /'po.bot/
Accueil du siteComposants et techniqueLes entréesCaméra Pob-Eye 2
  publication inférieure à 7 jours
  publié < 7j sous cette rubrique
     
À propos de l'article
    Publié le 22 novembre 2009
    par Julien H.

    Mis à jour le 22 novembre 2009
Choisir votre langue :

Détection d’une forme avec la Pob-Eye 2

Enfin ! Après avoir réussi à écrire nos premiers programmes "simples", on va attaquer la reconnaissance d’une forme dans l’image prise. Pour cela on va utiliser les fonctions développées par Pob-Technology.

 Le principe

Chaque forme qu’on souhaite détecter doit être définie en noir sur fond rouge dans une image bitmap (.bmp) de taille 100 x 100 pixels. Il ne faut pas qu’il y ait de zones vides et d’autres contraintes dont vous trouverez la liste dans la documentation officielle.

Le logiciel Pob-Tools 4 intègre la transformation automatique des images que vous lui proposez en un tableau d’octets contenu dans un fichier "pattern.h" que vous devez intégrer dans votre programme principal.

Après avoir récupéré une frame RGB, vous avez la possibilité de demander à la bibliothèque de fonctions de la caméra Pob-Eye 2 la recherche de "Forms" parmi les "Patterns" décrits dans le fichier header "pattern.h".

3 patterns pour Pob-Eye 2

Chaque Form peut alors vous renseigner sur sa position en x,y dans l’image (en considérant le centre de la forme) et sa taille (largeur et hauteur du rectangle entourant l’intégralité de la forme). Un identifiant fait référence au pattern associé dans le fichier header : 1, 2, 3 selon l’ordre de conversion.

 Code source

Projet Pob-Tools

Créez un nouveau projet, ajoutez les 3 fichiers par clic droit sur le répertoire "pattern files", un par un :

Configuration des patterns

Copiez le code source ci-dessous :

#include "pob-eye.h"

#include "pattern.h"

char* transformeNom(UInt8 id);

int main (void)
{	
  int i=0;
  int nombre=0;  
  UInt8 * rgbFrame;
  Form listeFormes[MAX_OF_FORM];

  // initialisations obligatoires
  InitPobeye2();
  InitUART0(115200); 
  InitI2C(I2C_100_KHZ);
  InitCameraPobeye2();

  rgbFrame = GetRGBFrame();

  while(1)
  {		
    // attendre le déclenchement
    GetByteFromUART0();  

    // prendre la photo
    GrabRGBFrame();				

    // transformer en binaires
    BinaryRGBFrame(rgbFrame); 

    // chercher les formes parmi les "patterns" créés
    nombre=IdentifyForm(rgbFrame,listeFormes,pattern);	

    // traiter les formes une à une
    for (i=0;i < nombre;i++)
    {
      // afficher son nom
      PrintToUart0("Vu: ");
	 PrintToUart0(transformeNom(listeFormes[i].id));  	
      PrintToUart0("\n");
    }	

    // si rien n'est reçu
    if (nombre == 0) {
      SendString("Rien !\n");  
    }
  }
  return 0;
}

char* transformeNom(UInt8 id)
{
  switch(id)
  {
  case IDP_CIRCLE:
    return "cercle";
  case IDP_CROSS:
    return "croix";
  case IDP_TRIANGLE:
    return "triangle";
  default: 
    return "inconnu";
  }
}

 Résultat

Il suffit de redémarrer la caméra, d’ouvrir un terminal série (ici, Docklight pour sa facilité à envoyer de manière répétée un caractère, par clic sur un bouton) et de pointer avec l’objectif différentes zones de l’écran, dont les 3 images qu’on a utilisé en patterns (attention aux reflets, ça marche mieux avec des patterns imprimés).

Autre version

Si on rajoute l’affichage des coordonnées, et avec une photo prise avec notre programme précédent, voici ce que ça donne :

Retour avec coordonnées
Visualisation du centre
 
Répondre à cet article
Vous avez aimé cet article ? Merci de nous recommander !