« Vision robotique » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| (9 versions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
==Présentation du projet== | == Présentation du projet == | ||
Le projet de vision robotique utilise la bibliothèque OpenCV en Python afin de détecter des cibles dans une image. | |||
Le terme « vision robotique » désigne la capacité d’un robot à prendre des décisions à partir d’images captées par une caméra. | |||
Dans le cadre de ce projet au cégep, des verres rouges placés sur un fond gris (table tournante) sont utilisés comme cibles. | |||
Comme les verres possèdent tous la même couleur, il est possible de les identifier facilement dans l’image à l’aide des fonctions de détection de couleur d’OpenCV. | |||
Pour réaliser ce projet, un ordinateur sous Linux muni d’une webcam intégrée est requis. | |||
Ce projet a été développé par Raphaël Bouchard en 2025, et le code d’exemple a été écrit par celui-ci au cégep de Sorel-Tracy. | |||
:[[File:apercu_comp.jpeg|400px|Aperçu du résultat|thumb|left]] | :[[File:apercu_comp.jpeg|400px|Aperçu du résultat|thumb|left]] | ||
| Ligne 51 : | Ligne 54 : | ||
---- | ---- | ||
=== | ===Exemple Python=== | ||
: Cet exemple sert a détecter la couleur rouge et dessiner un cercle autour dans une image. | |||
''' 1. ouvrir le bloc note''' | ''' 1. ouvrir le bloc note''' | ||
| Ligne 79 : | Ligne 84 : | ||
ret, image = camera.read() | ret, image = camera.read() | ||
image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV | image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) | ||
rose_min = np.array([160, 80, 60], np.uint8) # en HSV | rose_min = np.array([160, 80, 60], np.uint8) # en HSV | ||
rose_max = np.array([179, 255, 255], np.uint8) | rose_max = np.array([179, 255, 255], np.uint8) | ||
| Ligne 122 : | Ligne 125 : | ||
---- | ---- | ||
=== | ===Lancer le programme=== | ||
: 1. '''S'assurer d'avoir enregistré les modifications en faisant <q>ctrl + S </q>''' | : 1. '''S'assurer d'avoir enregistré les modifications en faisant <q>ctrl + S </q>''' | ||
| Ligne 132 : | Ligne 135 : | ||
: 4. '''Pour arrêter le programme et fermer l'image, appuyez sur la touche <q>Q </q> de votre clavier. ''' | : 4. '''Pour arrêter le programme et fermer l'image, appuyez sur la touche <q>Q </q> de votre clavier. ''' | ||
::Si cela ne fonctionne pas, vous pouvez forcer le programme à s'arrêter en faisans <q>ctrl + C </q> dans le terminal. | ::Si cela ne fonctionne pas, vous pouvez forcer le programme à s'arrêter en faisans <q>ctrl + C </q> dans le terminal. | ||
---- | |||
===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==== | |||
:Voici un logigramme expliquant les grandes étapes du programme: | |||
:[[File:logi_num.png|400px]] | |||
---- | |||
: '''lien entre le code et le logigrame:''' | |||
: 1. [[File:librairie.png|150px]] | |||
: 2. [[File:cap_camera.png|550px]] | |||
: 3. [[File:bgr2hsv.png|500px]] | |||
: 4. [[File:masque.png|550px]] | |||
: 5. [[File:contour.png|800px]] | |||
: 6. [[File:aire.png|300px]] | |||
: 7. [[File:cercle.png|700px]] | |||
: 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. | |||
:À l'étape 4 nous créons le masque. Nous utilisons un masque orange et rose, car En HSV, le rouge est à la fois au début et à la fin de l’échelle H. Pour détecter tous les rouges, on crée deux masques sur ces deux intervalles et on les fusionne. | |||
: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. | |||
---- | |||
=====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. | |||
: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. | |||
Dernière version du 6 février 2026 à 15:42
Présentation du projet
Le projet de vision robotique utilise la bibliothèque OpenCV en Python afin de détecter des cibles dans une image. Le terme « vision robotique » désigne la capacité d’un robot à prendre des décisions à partir d’images captées par une caméra. Dans le cadre de ce projet au cégep, des verres rouges placés sur un fond gris (table tournante) sont utilisés comme cibles. Comme les verres possèdent tous la même couleur, il est possible de les identifier facilement dans l’image à l’aide des fonctions de détection de couleur d’OpenCV. Pour réaliser ce projet, un ordinateur sous Linux muni d’une webcam intégrée est requis. Ce projet a été développé par Raphaël Bouchard en 2025, et le code d’exemple a été écrit par celui-ci au cégep de Sorel-Tracy.
Exemple Python
- Cet exemple sert a détecter la couleur rouge et dessiner un cercle autour dans une image.
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.
- À l'étape 4 nous créons le masque. Nous utilisons un masque orange et rose, car En HSV, le rouge est à la fois au début et à la fin de l’échelle H. Pour détecter tous les rouges, on crée deux masques sur ces deux intervalles et on les fusionne.
- 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.
