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.
- le terme « vision robotique » signifie qu'un robot prend des décisions basées sur une image captée.
- 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
Éditer la 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)
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
- 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.
- *Remplacer
- 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.
- Si cela ne fonctionne pas, vous pouvez forcer le programme à s'arrêter en faisans
fonctionnement du programme
- lien entre le code et le logigrame:
Application du projet au cégep
- La détection de couleur dans une image en direct peut servir a faire des projets de robotique au cégep.
- Bien que la prog ci-dessus seule ne peut rien faire, c'est la base de plusieurs projets.
- Nous pouvons par exemple, trier des cibles par couleur, calculer la position d'une cible, etc.
- Avec une bonne maitrise de la programmation en texte vous pouvez utiliser ce projet avec les robots 6 axes ou les tables de positionnement.
- Ce qui a déjà été réalisé
1:
- En 2025, ce projet a été utilisé avec les robots ABB 6 axes.
- Une webcam a été installée sur la tête du robot.
- Le robot pouvais récupérer un verre rouge placé n'importe où sur la table.
- La programmation python voyais la cible, calculait sa position et envoyais la position au au robot.
- Le robot ramassait alors le verre.
2:
- Un second projet a été réalisé avec ce programme.
- 3 zones étaient dessinés sur une feuille collée sur la table.
- Nous placions des verres de couleur dans ces zones (vert, rouge, bleu).
- Le robot allait chercher la couleur qu'on lui demande.
- Exemple: si il y avait un verre bleu dans la zone 1, un rouge dans la zone 2 et un vert dans la zone3
- Si on veut un verre bleu le robot nous emmène seulement le verre dans la zone 1 et ne toucha pas aux autres zone.
- Ce projet est plus simple que le no.1, car nous n'avons pas besoin de calculer la position des verres dans la programmation python.
- Les zones sont des robtarget fixe dans le robot.
Dépannage
- Il est probable que en collant le code dans votre bloc-notes il ne se colle pas comme il le devrait.
- En programmation python, L'indentation est très importante.
- L'indentation c'est les espaces avant le début d'une ligne.
- Chaque ligne doit débuter à la même place que la dernière.
- si vous avez une erreur il se peut que vous devrez ajouter ou enlever un espace au début d'une ligne.
- Attention, dans certains cas (dans une boucle while, for, if, etc.) il est normal que le code a l'intérieur de la boucle soit indenté.