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.



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):
 
 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)
 masque_et_image = cv2.bitwise_and(image, image, mask = masque_rouge)
 
 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