Vision robotique

De Wiki TGE CSTwiki
Aller à la navigation Aller à la recherche

Présentation du projet

Le projet de vision robotique utilise la librairie open cv en python pour détecter des cibles dans une image.
Au cégep nous utilisons des verres rouges sur fond gris (table tournante) comme cible.
Comme les verres ont tous la même couleur, il est simple de les identifier dans l'image en utilisant la fonction de détection de couleur de open cv.
Pour réaliser ce projet, nous avons besoin d'un ordinateur en linux avec webcam intégrée.
Ce projet a été développé par Raphaël Bouchard en 2025. le code d'exemple a été écrit par celui-ci au cégep de Sorel Tracy.
Aperçu du résultat
























Programmation Python

1. ouvrir le bloc note


2. Enregistrer le projet et le nommer avec un nom terminant en .py

Le fichier sera donc enregistré en document contenant du code python
 

3. Copier le code d'exemple et le coller dans le bloc-notes


import numpy as np
import cv2
import time



camera = cv2.VideoCapture(0)    # 0 = cam ordi / 2 = cam usb

while (1):
 
 ret, image = camera.read()
 image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
 #rouge_min = np.array([110, 180, 140], np.uint8)        # en HSV
 #rouge_max = np.array([190, 255, 255], np.uint8) 
 rose_min = np.array([160, 80, 60], np.uint8)        # en HSV
 rose_max = np.array([179, 255, 255], np.uint8) 
 orange_min = np.array([0,80, 60], np.uint8)        # en HSV
 orange_max = np.array([15, 255, 255], np.uint8) 
 masque_orange = cv2.inRange(image_hsv, orange_min, orange_max)
 masque_rose = cv2.inRange(image_hsv, rose_min, rose_max)
 masque_rouge = masque_rose | masque_orange
 kernal = np.ones((5, 5), "uint8")
 masque_rouge = cv2.dilate(masque_rouge, kernal)
 
 
 contour, hierarchy = cv2.findContours(masque_rouge, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)       # cv2.RETR_EXTERNAL   ou   cv2.RETR_TREE
 

 num_cible = 1
 for pic, contour in enumerate (contour):
     aire = cv2.contourArea(contour)
     if (aire > 5000):
              
        x, y, l, h = cv2.boundingRect(contour)
        x_image = x
        y_image = y   
        milieu =(x_image + (l // 2)), (y_image + (h //2 ))   
        verre = cv2.circle(image, (milieu), (l // 2), (0, 255, 0), 5)
        cv2.circle(image, (milieu) , 5, (255, 0, 0), -1)                     #point au milieu des rond      
        num_cible_str = str(num_cible)
        cv2.putText(image, (num_cible_str), (x_image, y_image),cv2.FONT_HERSHEY_SIMPLEX, 2.5,(255, 0, 0),6)     
        num_cible =  (num_cible + 1)

 cv2.imshow("camera", image)

        
 if cv2.waitKey(10) & 0xFF == ord('q'):
   camera.release()
   cv2.destroyAllWindows()
   break



Lancer le programme

1. S'assurer d'avoir enregistré les modifications en faisant ctrl + S
2. Lancer le Terminal
3. entrer la commande suivante: python3 exemple.py
*Remplacer exemple par le nom du fichier bloc-notes choisis a l'étape 2 de la section programmation python.
4. Pour arrêter le programme et fermer l'image, appuyez sur la touche Q de votre clavier.
Si cela ne fonctionne pas, vous pouvez forcer le programme à s'arrêter en faisans ctrl + C dans le terminal.