« Vision robotique » : différence entre les versions

De Wiki TGE CSTwiki
Aller à la navigation Aller à la recherche
2249047 (discussion | contributions)
Aucun résumé des modifications
2249047 (discussion | contributions)
Aucun résumé des modifications
 
(4 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 librairie open cv en python pour détecter des cibles dans une image.
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 » signifie qu'un robot prend des décisions basées sur une image captée.
Le terme « vision robotique » désigne la capacité d’un robot à prendre des décisions à partir d’images captées par une caméra.
:Au cégep nous utilisons des verres rouges sur fond gris (table tournante) comme cible.
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 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.
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, nous avons besoin d'un ordinateur en linux avec webcam intégrée.  
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. le code d'exemple a été écrit par celui-ci au cégep de Sorel Tracy.
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 52 : Ligne 54 :


----
----
===Éditer la programmation Python===
===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 121 : Ligne 125 :


----
----
====Lancer le programme====
===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 131 : 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=====
====Fonctionnement du programme====


:Voici un logigramme expliquant les grandes étapes du programme:
:Voici un logigramme expliquant les grandes étapes du programme:
:[[File:logi_num.png|400px]]
:[[File:logi_num.png|400px]]


----
: '''lien entre le code et le logigrame:'''


: '''lien entre le code et le logigrame:'''
----




Ligne 166 : Ligne 182 :
: 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.
:À 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======
=====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.
: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.
Ligne 178 : Ligne 219 :




----
:'''Ce qui a déjà été réalisé'''
:'''Ce qui a déjà été réalisé'''
----


1:
1:
:En 2025, ce projet a été utilisé avec les robots ABB 6 axes.
: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.
:Une webcam était installée sur la tête du robot afin de lui permettre de voir son environnement.
: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 système de vision permettait de détecter un verre rouge placé n’importe où sur la table.
:Le robot ramassait alors le verre.
: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:
2:
:Un second projet a été réalisé avec ce programme.
:Un deuxième projet a été réalisé à partir de ce programme, avec une approche plus simple.
:3 zones étaient dessinés sur une feuille collée sur la table.
:Trois zones fixes étaient dessinées sur une feuille collée sur la table.
:Nous placions des verres de couleur dans ces zones (vert, rouge, bleu).
:Des verres de différentes couleurs (vert, rouge et bleu) étaient placés dans ces zones.
: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.


: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,
======Dépannage======
:::Le robot ira uniquement chercher le verre de la couleur demandée, sans toucher aux zones avec des verres de la mauvaise couleur.


:Il est probable que en collant le code dans votre bloc-notes il ne se colle pas comme il le devrait.
: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.
: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é.

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.


Aperçu du résultat
























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
2. Lancer le Terminal
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.
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.



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:

lien entre le code et le logigrame:


1.


2.


3.


4.


5.


6.


7.


8.

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.
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.