Vision robotique
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):
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)
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