Cours:Classif : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
(Prétraitement)
(Plusieurs objets)
 
(5 révisions intermédiaires par le même utilisateur non affichées)
Ligne 58 : Ligne 58 :
  
 
=== Prétraitement ===
 
=== Prétraitement ===
 
'''Cette partie est moins guidée, elle devra être incluse dans votre compte-rendu.'''
 
  
 
* Modification éventuelle de la zone de capture de la camera.
 
* Modification éventuelle de la zone de capture de la camera.
# Conversion en image niv. de gris.
+
* Conversion en image niv. de gris.
# Binarisation.
+
* Binarisation.
* En ne plaçant qu'un seul objet dans le champ de la camera, calculer et afficher ses descripteurs de forme : longueur/largeur de l'objet, cf https://raphael.candelier.fr/?blog=Image%20Moments
 
  
* Fonction de calcul des descripteurs géométriques (longueur l, largeur w) d'un objet dans une image :
+
=== Reconnaissance simple d'un seul objet, avec descripteurs géométriques ===
<source lang="c++">
 
void compute_desc(CImg<> image) {
 
    long M00, M10, M01, M11, M20, M02;
 
    M00 = 0; M10 = 0; M01 = 0; M11 = 0; M20 = 0; M02 = 0;
 
    cimg_forXY(image,x,y) {
 
        M00 += image(x,y);
 
        M10 += x*image(x,y);
 
        M01 += y*image(x,y);
 
        M11 += x*y*image(x,y);
 
        M20 += x*x*image(x,y);
 
        M02 += y*y*image(x,y);
 
    }
 
    long xm = M10/M00;
 
    long ym = M01/M00;
 
    long mu20 = M20/M00 - xm*xm;
 
    long mu02 = M02/M00 - ym*ym;
 
    long mu11 = M11/M00 - xm*ym;
 
    long l = sqrt(8 * (mu20 + mu02 + sqrt(4*mu11*mu11 + (mu20-mu02)*(mu20-mu02))));
 
    long w = sqrt(8 * (mu20 + mu02 - sqrt(4*mu11*mu11 + (mu20-mu02)*(mu20-mu02))));
 
    cout << "l = " << l << endl;
 
    cout << "w = " << w << endl;
 
}
 
</source>
 
  
=== Reconnaissance simple d'un seul objet, avec descripteurs géométriques ===
+
* En ne plaçant qu'un seul objet dans le champ de la camera, calculer et afficher ses descripteurs de forme : longueur/largeur de l'objet, cf https://raphael.candelier.fr/?blog=Image%20Moments
 +
* Construire une décision idoine à l'aide de la largeur et de la longueur de l'ellipse englobante, afin de discrimer trois classes d'objets (par exemple : jeton court, jeton long, jeton rond)
  
 
=== Classifieur plus évolué ===
 
=== Classifieur plus évolué ===
 +
 +
* Redressement de la perspective
 +
* Descripteurs
 +
* KNN
 +
* SVM
  
 
=== Plusieurs objets ===
 
=== Plusieurs objets ===
 +
 +
* Segmentation
  
 
=== Références  ===
 
=== Références  ===

Version actuelle datée du 21 janvier 2026 à 12:28

TP Classification : détection d'objet en temps réel par vision

Le travail de cette étape va consister à

  • analyser des images acquises en "temps réel" afin de détecter et identifier des objets
  • les objets seront
    • dans un premier temps des jetons de nain jaune
    • dans un second temps des briques lego.

Technos matérielles et logicielles

Vous utiliserez :

Étapes :

  • Connexion à la Rpi et test d'acquisition en ligne de commande
  • Capture d'image et affichage en temps réel, avec Python
  • Prétraitement
  • Reconnaissance simple d'un seul objet, avec descripteurs géométriques
  • Classifieur plus évolué (knn, svm)
  • Plusieurs objets

Connexion à la Rpi et test d'acquisition en ligne de commande

  • Connecter (si cela n'est pas fait) la PiCam à la Rpi4
  • Dans un terminal, se connecter à la Rpi en ssh : ssh -X root@10.98.33.XX
  • Tester la PiCam avec libcamera-hello (la capture en video doit s'afficher sur l'écran de la Rpi). Avec les informations affichées, identifier :
    • le modèle du capteur,
    • ses caractéristiques (résolution, format, cadence, etc ...).
  • Tester l'acquisition d'image avec l'éxecutable libcamera-still

Capture d'image et affichage en temps réel

En exploitant la documentation Picamera2 (principalement section 6 - Capturing images and requests)

  • Tester les deux exemples Capturing arrays et Capturing PIL images
  • Écrire un script Python qui :
    • initialise la camera
    • affiche en continu son image
    • sur l'appui d'une touche, réalise une capture (dans un objet array>/code> ou <code>PIL) et sauvegarde l'image dans un fichier

En pratique :

  • Vous pouvez lancer un interpréteur Python dans le terminal pour tester des choses
  • Vous pouvez accéder aux dossiers de la Rpi depuis votre PC fixe, depuis le navigateur Dolphin avec comme url sftp://root@10.98.33.83:22/. Ce qui vous permettra par exemple d'éditer le fichier script depuis votre PC fixe.
  • Dans le terminal, python monscript.py pour executer votre script
  • Référence Python :

Prétraitement

  • Modification éventuelle de la zone de capture de la camera.
  • Conversion en image niv. de gris.
  • Binarisation.

Reconnaissance simple d'un seul objet, avec descripteurs géométriques

  • En ne plaçant qu'un seul objet dans le champ de la camera, calculer et afficher ses descripteurs de forme : longueur/largeur de l'objet, cf https://raphael.candelier.fr/?blog=Image%20Moments
  • Construire une décision idoine à l'aide de la largeur et de la longueur de l'ellipse englobante, afin de discrimer trois classes d'objets (par exemple : jeton court, jeton long, jeton rond)

Classifieur plus évolué

  • Redressement de la perspective
  • Descripteurs
  • KNN
  • SVM

Plusieurs objets

  • Segmentation

Références

OpenCV :

Archives de cette page :