« Vision robotique » : différence entre les versions
Aller à la navigation
Aller à la recherche
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| Ligne 178 : | Ligne 178 : | ||
: 8. [[File:afiche_image.png|300px]] | : 8. [[File:afiche_image.png|300px]] | ||
---- | |||
: '''explications plus détaillés:''' | |||
:À l'étape 3, nous convertissons l'image d'origine (RGB) en HSV. | |||
:Cette étape est essentielle pour que open cv puisse bien exécuter sa détection de couleur. | |||
:HSV et RGB sont des espaces de couleur, c’est-à-dire différentes manières de représenter les couleurs d’une image. | |||
:Dans une image en HSV, la teinte des pixels est séparée de la luminosité tandis que en RGB l'image est représentée par le mélange de rouge, bleu et vert. | |||
:La couleur d'un pixel représenté en RGB est beaucoup influencée par la luminosité. | |||
:un rouge bien éclairé et un rouge plus sombre change beaucoup les valeurs. | |||
:En HSV, la teinte reste similaire malgré les variations de luminosité, ce qui rend la détection de couleur plus simple et plus fiable. | |||
:La fonction findContours à l'étape 5 repère les formes présentes dans le masque rouge. | |||
:Seuls les contours externes sont conservés afin de simplifier la détection. | |||
:La premiere ligne de l'étape 7 <q>''x, y, l, h = cv2.boundingRect(contour) ''</q> calcule le rectangle qui englobe un contour détecté. | |||
:Les valeurs obtenues correspondent à la position du rectangle (x, y) et à sa largeur (l) et sa hauteur (h). | |||
:Ce rectangle permet de localiser et d’encadrer l’objet détecté dans l’image. | |||
| Ligne 185 : | Ligne 205 : | ||
:La détection de couleur dans une image en direct peut servir a faire des projets de robotique 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. | :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. | :Nous pouvons par exemple, trier des cibles par couleur, calculer la position d'une cible, etc. | ||
Version du 6 février 2026 à 14:04
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
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é.
fonctionnement du programme
- lien entre le code et le logigrame:
- explications plus détaillés:
- À l'étape 3, nous convertissons l'image d'origine (RGB) en HSV.
- Cette étape est essentielle pour que open cv puisse bien exécuter sa détection de couleur.
- HSV et RGB sont des espaces de couleur, c’est-à-dire différentes manières de représenter les couleurs d’une image.
- Dans une image en HSV, la teinte des pixels est séparée de la luminosité tandis que en RGB l'image est représentée par le mélange de rouge, bleu et vert.
- La couleur d'un pixel représenté en RGB est beaucoup influencée par la luminosité.
- un rouge bien éclairé et un rouge plus sombre change beaucoup les valeurs.
- En HSV, la teinte reste similaire malgré les variations de luminosité, ce qui rend la détection de couleur plus simple et plus fiable.
- La fonction findContours à l'étape 5 repère les formes présentes dans le masque rouge.
- Seuls les contours externes sont conservés afin de simplifier la détection.
- La premiere ligne de l'étape 7
x, y, l, h = cv2.boundingRect(contour)
calcule le rectangle qui englobe un contour détecté. - Les valeurs obtenues correspondent à la position du rectangle (x, y) et à sa largeur (l) et sa hauteur (h).
- Ce rectangle permet de localiser et d’encadrer l’objet détecté dans l’image.
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 était installée sur la tête du robot afin de lui permettre de voir son environnement.
- Le système de vision permettait de détecter un verre rouge placé n’importe où sur la table.
- Le programme en Python analysait l’image captée par la caméra, calculait la position du verre et transmettait ces coordonnées au robot.
- Le robot pouvait ensuite se déplacer automatiquement pour prendre le verre.
2:
- Un deuxième projet a été réalisé à partir de ce programme, avec une approche plus simple.
- Trois zones fixes étaient dessinées sur une feuille collée sur la table.
- Des verres de différentes couleurs (vert, rouge et bleu) étaient placés dans ces zones.
- Le système permettait de demander au robot une couleur précise.
- Par exemple, si des verres de différentes couleurs sont placés dans chaque zone,
- Le robot ira uniquement chercher le verre de la couleur demandée, sans toucher aux zones avec des verres de la mauvaise couleur.
- Par exemple, si des verres de différentes couleurs sont placés dans chaque zone,
- Ce projet est plus simple que le premier, car il ne nécessite pas de calcul de position dans le programme Python. Les zones sont définies à l’avance sous :forme de robtargets fixes directement dans le robot.