<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki.tge.cegeplabs.qc.ca/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=2249047</id>
	<title>Wiki TGE CSTwiki - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.tge.cegeplabs.qc.ca/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=2249047"/>
	<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php/Sp%C3%A9cial:Contributions/2249047"/>
	<updated>2026-04-17T17:32:13Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Reconnaissance_objet&amp;diff=460</id>
		<title>Reconnaissance objet</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Reconnaissance_objet&amp;diff=460"/>
		<updated>2026-02-20T16:30:16Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Description du projet==&lt;br /&gt;
Le but final du projet est de détecter un lift dans une image de caméra de surveillance grâce à un modèle de reconnaissance d&#039;objet pré-entrainé.&lt;br /&gt;
Lorsque que le programme détectera un chariot élévateur, un gyrophare s&#039;activera pour avertir les travailleurs.&lt;br /&gt;
Le programme se trouvera dans un Raspberry pi 5, un petit ordinateur avec des i/o programmables. La camera sera connectée dans celui-ci directement par USB.&lt;br /&gt;
Comme les i/o du Raspberry pi fonctionne à 3.3v, nous utilisons un petit relais pour alimenter le gyrophare.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Fonctionnement global===&lt;br /&gt;
&lt;br /&gt;
Pour fonctionner, le projet a trois grand moteurs&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. La programmation python.&#039;&#039;&#039;&lt;br /&gt;
:Le script Python utilise YOLO (Ultralytics) pour détecter des objets en temps réel à partir d’une image, d’un dossier, d’une vidéo ou d’une caméra USB.&lt;br /&gt;
:Il charge un modèle .pt, applique l’inférence sur chaque frame, affiche les boîtes englobantes avec le niveau de confiance et calcule le FPS moyen.&lt;br /&gt;
:Il permet aussi d’enregistrer la vidéo traitée et de compter le nombre d’objets détectés à chaque image.&lt;br /&gt;
:Ce n&#039;est pas ce programme qui est entrainé a reconnaitre un lift. Il fait seulement le paramétrer (afficher les boites, le degré de confiance et le nombre d&#039;objet détecté.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Le fichier .pt (pre-trained)&#039;&#039;&#039;&lt;br /&gt;
:Le modèle pré-entrainé c&#039;est comme le cerveau du projet. Un modèle YOLO déjà entraîné (.pt) est une intelligence artificielle qui a déjà appris à reconnaître certains objets grâce à un entraînement préalable sur une grande quantité d’images.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Fichier de contrôle GPIO&#039;&#039;&#039;&lt;br /&gt;
:Le Raspberry pi 5 possède plusieurs pin programmable qui doivent être contrôler à l&#039;aide d&#039;un fichier. Les pins GPIO peuvent être soit une entrée ou une sortie. Le fichier fais aussi le liens entre les variables python et les pins.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
====Création du modèle pre-trained====&lt;br /&gt;
&lt;br /&gt;
Pour entraîner le modèle, il faut un dataset, c’est-à-dire une collection d’images déjà annotées.&lt;br /&gt;
Il existe deux options : le créer soi-même ou en utiliser un déjà disponible en ligne.&lt;br /&gt;
Nous recommandons d’en prendre un déjà fait, car créer son propre dataset demande des milliers de photos et beaucoup de temps pour les annoter une par une.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. choisir le bon dataset&#039;&#039;&#039;&lt;br /&gt;
:Nous conseillons d&#039;utiliser la plateforme RobotFlow sur internet pour trouver un dataset.&lt;br /&gt;
:Sur Roboflow, va dans l’onglet Universe (bibliothèque publique).&lt;br /&gt;
:Recherche avec des mots-clés précis (ex : “forklift”, “helmet detection”, etc.).&lt;br /&gt;
:Vérifie le nombre d’images, la diversité des photos et la qualité des annotations.&lt;br /&gt;
:Choisis un dataset avec plusieurs centaines ou milliers d’images bien étiquetées.&lt;br /&gt;
:Une fois le bon dataset trouvé, il reste juste à le télécharger en format zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Préparer le dataset à l&#039;entrainnement.&#039;&#039;&#039;&lt;br /&gt;
:Une fois le fichier téléchargé, vous devez l&#039;extraire à l&#039;endroit de votre choix.&lt;br /&gt;
:Ensuite, vérifiez que le fichier contient les 3 élements  importants: data.yaml, train, valid.&lt;br /&gt;
:Si ces 3 éléments sont présents, tout est correct.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Ajouter le yolo de base.&#039;&#039;&#039;&lt;br /&gt;
:Yolo (you only look once) possède des modèles de base pré entrainés généralisé et il est nécessaire d&#039;ajouter une de ces version à notre dataset pour l’entrainement. Nous utilisons la version 11n qui est la version officielle la plus récente. Le n signifie nano. Il existe d&#039;autres modèle plus performants, mais nous avons besoin de la version la plus lègerte pour fonctionner avec le Raspberry pi. &lt;br /&gt;
pour l&#039;ajouter au dataset, vous devez le télecharger à partir du site de yolo.&lt;br /&gt;
Vous devez ensuite glisser le fichier téléchargé au meme endroit que les autres fichiers énumérés à l&#039;étape 2.&lt;br /&gt;
:[[File:version_yolo.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4. Entrainnement&#039;&#039;&#039;&lt;br /&gt;
:Il est possible de faire l’entrainement sur Windows, mais comme nous on l&#039;a fait sur Linux vous devrez faire vos recherches par vous-même pour le faire avec &lt;br /&gt;
:Windows.&lt;br /&gt;
&lt;br /&gt;
:https://www.youtube.com/watch?v=r0RspiLG260&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Pour le faire sur Linux vous devez avoir téléchargé les librairies: ultralitics, pytorch, python3, pip, opencv.&lt;br /&gt;
:Maintenant, ouvres le terminal et entrez la commande: yolo detect train model=yolo11n.pt data=data.yaml epochs=X imgsz=X batch=X patience=x&lt;br /&gt;
&lt;br /&gt;
*model : modèle de base pré-entraîné utilisé pour commencer.&lt;br /&gt;
&lt;br /&gt;
*data : fichier qui indique où sont les images et les classes.&lt;br /&gt;
&lt;br /&gt;
*epochs : nombre de cycles d’apprentissage.&lt;br /&gt;
&lt;br /&gt;
*imgsz : taille des images (640 si vous utiliser notre python).&lt;br /&gt;
&lt;br /&gt;
*batch : nombre d’images traitées en même temps (selon le gpu).&lt;br /&gt;
&lt;br /&gt;
*patience : arrête l’entraînement si le modèle n’améliore plus ses performances&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Faites vos recherches pour remplacer les x par les bonnes valeurs selon vos besoins ( Dépendement, de votre nombre d&#039;images et votre application) .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Ensuite, vous exécutez la commande et votre ordinateur lance l’entraînement du modèle, ce qui peut prendre plusieurs heures selon la puissance de votre machine et la taille du dataset.Une erreur possible est que votre processeur ou votre environnement ne dispose pas des bibliothèques logicielles nécessaires pour exécuter l’entraînement. Ce :problème est plus fréquent sur des ordinateurs plus anciens ou lorsque certaines dépendances ne sont pas correctement installées.&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Reconnaissance_objet&amp;diff=459</id>
		<title>Reconnaissance objet</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Reconnaissance_objet&amp;diff=459"/>
		<updated>2026-02-20T16:27:57Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Description du projet==&lt;br /&gt;
Le but final du projet est de détecter un lift dans une image de caméra de surveillance grâce à un modèle de reconnaissance d&#039;objet pré-entrainé.&lt;br /&gt;
Lorsque que le programme détectera un chariot élévateur, un gyrophare s&#039;activera pour avertir les travailleurs.&lt;br /&gt;
Le programme se trouvera dans un Raspberry pi 5, un petit ordinateur avec des i/o programmables. La camera sera connectée dans celui-ci directement par USB.&lt;br /&gt;
Comme les i/o du Raspberry pi fonctionne à 3.3v, nous utilisons un petit relais pour alimenter le gyrophare.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Fonctionnement global===&lt;br /&gt;
&lt;br /&gt;
Pour fonctionner, le projet a trois grand moteurs&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. La programmation python.&#039;&#039;&#039;&lt;br /&gt;
:Le script Python utilise YOLO (Ultralytics) pour détecter des objets en temps réel à partir d’une image, d’un dossier, d’une vidéo ou d’une caméra USB.&lt;br /&gt;
:Il charge un modèle .pt, applique l’inférence sur chaque frame, affiche les boîtes englobantes avec le niveau de confiance et calcule le FPS moyen.&lt;br /&gt;
:Il permet aussi d’enregistrer la vidéo traitée et de compter le nombre d’objets détectés à chaque image.&lt;br /&gt;
:Ce n&#039;est pas ce programme qui est entrainé a reconnaitre un lift. Il fait seulement le paramétrer (afficher les boites, le degré de confiance et le nombre d&#039;objet détecté.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Le fichier .pt (pre-trained)&#039;&#039;&#039;&lt;br /&gt;
:Le modèle pré-entrainé c&#039;est comme le cerveau du projet. Un modèle YOLO déjà entraîné (.pt) est une intelligence artificielle qui a déjà appris à reconnaître certains objets grâce à un entraînement préalable sur une grande quantité d’images.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Fichier de contrôle GPIO&#039;&#039;&#039;&lt;br /&gt;
:Le Raspberry pi 5 possède plusieurs pin programmable qui doivent être contrôler à l&#039;aide d&#039;un fichier. Les pins GPIO peuvent être soit une entrée ou une sortie. Le fichier fais aussi le liens entre les variables python et les pins.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
====Création du modèle pre-trained====&lt;br /&gt;
&lt;br /&gt;
Pour entraîner le modèle, il faut un dataset, c’est-à-dire une collection d’images déjà annotées.&lt;br /&gt;
Il existe deux options : le créer soi-même ou en utiliser un déjà disponible en ligne.&lt;br /&gt;
Nous recommandons d’en prendre un déjà fait, car créer son propre dataset demande des milliers de photos et beaucoup de temps pour les annoter une par une.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. choisir le bon dataset&#039;&#039;&#039;&lt;br /&gt;
:Nous conseillons d&#039;utiliser la plateforme RobotFlow sur internet pour trouver un dataset.&lt;br /&gt;
:Sur Roboflow, va dans l’onglet Universe (bibliothèque publique).&lt;br /&gt;
:Recherche avec des mots-clés précis (ex : “forklift”, “helmet detection”, etc.).&lt;br /&gt;
:Vérifie le nombre d’images, la diversité des photos et la qualité des annotations.&lt;br /&gt;
:Choisis un dataset avec plusieurs centaines ou milliers d’images bien étiquetées.&lt;br /&gt;
:Une fois le bon dataset trouvé, il reste juste à le télécharger en format zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Préparer le dataset à l&#039;entrainnement.&#039;&#039;&#039;&lt;br /&gt;
:Une fois le fichier téléchargé, vous devez l&#039;extraire à l&#039;endroit de votre choix.&lt;br /&gt;
:Ensuite, vérifiez que le fichier contient les 3 élements  importants: data.yaml, train, valid.&lt;br /&gt;
:Si ces 3 éléments sont présents, tout est correct.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Ajouter le yolo de base.&#039;&#039;&#039;&lt;br /&gt;
:Yolo (you only look once) possède des modèles de base pré entrainés généralisé et il est nécessaire d&#039;ajouter une de ces version à notre dataset pour l’entrainement. Nous utilisons la version 11n qui est la version officielle la plus récente. Le n signifie nano. Il existe d&#039;autres modèle plus performants, mais nous avons besoin de la version la plus lègerte pour fonctionner avec le Raspberry pi. &lt;br /&gt;
pour l&#039;ajouter au dataset, vous devez le télecharger à partir du site de yolo.&lt;br /&gt;
Vous devez ensuite glisser le fichier téléchargé au meme endroit que les autres fichiers énumérés à l&#039;étape 2.&lt;br /&gt;
:[[File:version_yolo.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4. Entrainnement&#039;&#039;&#039;&lt;br /&gt;
:Il est possible de faire l’entrainement sur Windows, mais comme nous on l&#039;a fait sur Linux vous devrez faire vos recherches par vous-même pour le faire avec &lt;br /&gt;
:Windows.&lt;br /&gt;
&lt;br /&gt;
:https://www.youtube.com/watch?v=r0RspiLG260&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Pour le faire sur Linux vous devez avoir téléchargé les librairies: ultralitics, pytorch, python3, pip, opencv.&lt;br /&gt;
:Maintenant, ouvres le terminal et entrez la commande: yolo detect train model=yolo11n.pt data=data.yaml epochs=X imgsz=X batch=X patience=x&lt;br /&gt;
&lt;br /&gt;
*model : modèle de base pré-entraîné utilisé pour commencer.&lt;br /&gt;
&lt;br /&gt;
*data : fichier qui indique où sont les images et les classes.&lt;br /&gt;
&lt;br /&gt;
*epochs : nombre de cycles d’apprentissage.&lt;br /&gt;
&lt;br /&gt;
*imgsz : taille des images (640 si vous utiliser notre python).&lt;br /&gt;
&lt;br /&gt;
*batch : nombre d’images traitées en même temps (selon le gpu).&lt;br /&gt;
&lt;br /&gt;
*patience : arrête l’entraînement si le modèle n’améliore plus ses performances&lt;br /&gt;
&lt;br /&gt;
:Faites vos recherches pour remplacer les x par les bonnes valeurs selon vos besoins ( Dépendement, de votre nombre d&#039;images et votre application) .&lt;br /&gt;
&lt;br /&gt;
:Ensuite, vous exécutez la commande et votre ordinateur lance l’entraînement du modèle, ce qui peut prendre plusieurs heures selon la puissance de votre machine et la taille du dataset.Une erreur possible est que votre processeur ou votre environnement ne dispose pas des bibliothèques logicielles nécessaires pour exécuter l’entraînement. Ce :problème est plus fréquent sur des ordinateurs plus anciens ou lorsque certaines dépendances ne sont pas correctement installées.&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Version_yolo.png&amp;diff=447</id>
		<title>Fichier:Version yolo.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Version_yolo.png&amp;diff=447"/>
		<updated>2026-02-20T15:40:21Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Reconnaissance_objet&amp;diff=446</id>
		<title>Reconnaissance objet</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Reconnaissance_objet&amp;diff=446"/>
		<updated>2026-02-20T15:39:33Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Description du projet==&lt;br /&gt;
Le but final du projet est de détecter un lift dans une image de caméra de surveillance grâce à un modèle de reconnaissance d&#039;objet pré-entrainé.&lt;br /&gt;
Lorsque que le programme détectera un chariot élévateur, un gyrophare s&#039;activera pour avertir les travailleurs.&lt;br /&gt;
Le programme se trouvera dans un Raspberry pi 5, un petit ordinateur avec des i/o programmables. La camera sera connectée dans celui-ci directement par USB.&lt;br /&gt;
Comme les i/o du Raspberry pi fonctionne à 3.3v, nous utilisons un petit relais pour alimenter le gyrophare.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Fonctionnement global===&lt;br /&gt;
&lt;br /&gt;
Pour fonctionner, le projet a trois grand moteurs&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. La programmation python.&#039;&#039;&#039;&lt;br /&gt;
:Le script Python utilise YOLO (Ultralytics) pour détecter des objets en temps réel à partir d’une image, d’un dossier, d’une vidéo ou d’une caméra USB.&lt;br /&gt;
:Il charge un modèle .pt, applique l’inférence sur chaque frame, affiche les boîtes englobantes avec le niveau de confiance et calcule le FPS moyen.&lt;br /&gt;
:Il permet aussi d’enregistrer la vidéo traitée et de compter le nombre d’objets détectés à chaque image.&lt;br /&gt;
:Ce n&#039;est pas ce programme qui est entrainé a reconnaitre un lift. Il fait seulement le paramétrer (afficher les boites, le degré de confiance et le nombre d&#039;objet détecté.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Le fichier .pt (pre-trained)&#039;&#039;&#039;&lt;br /&gt;
:Le modèle pré-entrainé c&#039;est comme le cerveau du projet. Un modèle YOLO déjà entraîné (.pt) est une intelligence artificielle qui a déjà appris à reconnaître certains objets grâce à un entraînement préalable sur une grande quantité d’images.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Fichier de contrôle GPIO&#039;&#039;&#039;&lt;br /&gt;
:Le Raspberry pi 5 possède plusieurs pin programmable qui doivent être contrôler à l&#039;aide d&#039;un fichier. Les pins GPIO peuvent être soit une entrée ou une sortie. Le fichier fais aussi le liens entre les variables python et les pins.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
====Création du modèle pre-trained====&lt;br /&gt;
&lt;br /&gt;
Pour entraîner le modèle, il faut un dataset, c’est-à-dire une collection d’images déjà annotées.&lt;br /&gt;
Il existe deux options : le créer soi-même ou en utiliser un déjà disponible en ligne.&lt;br /&gt;
Nous recommandons d’en prendre un déjà fait, car créer son propre dataset demande des milliers de photos et beaucoup de temps pour les annoter une par une.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1. choisir le bon dataset&#039;&#039;&#039;&lt;br /&gt;
:Nous conseillons d&#039;utiliser la plateforme RobotFlow sur internet pour trouver un dataset.&lt;br /&gt;
:Sur Roboflow, va dans l’onglet Universe (bibliothèque publique).&lt;br /&gt;
:Recherche avec des mots-clés précis (ex : “forklift”, “helmet detection”, etc.).&lt;br /&gt;
:Vérifie le nombre d’images, la diversité des photos et la qualité des annotations.&lt;br /&gt;
:Choisis un dataset avec plusieurs centaines ou milliers d’images bien étiquetées.&lt;br /&gt;
:Une fois le bon dataset trouvé, il reste juste à le télécharger en format zip.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Préparer le dataset à l&#039;entrainnement.&#039;&#039;&#039;&lt;br /&gt;
:Une fois le fichier téléchargé, vous devez l&#039;extraire à l&#039;endroit de votre choix.&lt;br /&gt;
:Ensuite, vérifiez que le fichier contient les 3 élements  importants: data.yaml, train, valid.&lt;br /&gt;
:Si ces 3 éléments sont présents, tout est correct.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. ajouter le yolo de base.&#039;&#039;&#039;&lt;br /&gt;
:Yolo (you only look once) possède des modèles de base pré entrainés généralisé et il est nécessaire d&#039;ajouter une de ces version à notre dataset pour l’entrainement. Nous utilisons la version 11n qui est la version officielle la plus récente. Le n signifie nano. Il existe d&#039;autres modèle plus performants, mais nous avons besoin de la version la plus lègerte pour fonctionner avec le Raspberry pi. &lt;br /&gt;
pour l&#039;ajouter au dataset, vous devez le télecharger à partir du site de yolo.&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Reconnaissance_objet&amp;diff=396</id>
		<title>Reconnaissance objet</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Reconnaissance_objet&amp;diff=396"/>
		<updated>2026-02-20T13:21:29Z</updated>

		<summary type="html">&lt;p&gt;2249047 : Page vide créée&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Communication_Robot-python&amp;diff=323</id>
		<title>Communication Robot-python</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Communication_Robot-python&amp;diff=323"/>
		<updated>2026-02-06T16:23:37Z</updated>

		<summary type="html">&lt;p&gt;2249047 : Page créée avec « == Code python == Ce projet est conjoint avec le projet de vision robotique expliqué sur une autre page wiki. Les codes ci-dessous servent à communiquer entre un code python et un robot ABB. C&amp;#039;est utile pour transférer des positions. Du code jusqu&amp;#039;au Robot.  &amp;lt;nowiki&amp;gt; def send_to_robot(pos_str):                                                 host = &amp;#039;10.243.11.72&amp;#039;                     # Adresse IP du robot    port = 1025                               # Port de c... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Code python ==&lt;br /&gt;
Ce projet est conjoint avec le projet de vision robotique expliqué sur une autre page wiki.&lt;br /&gt;
Les codes ci-dessous servent à communiquer entre un code python et un robot ABB. C&#039;est utile pour transférer des positions. Du code jusqu&#039;au Robot.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
def send_to_robot(pos_str):&lt;br /&gt;
                                            &lt;br /&gt;
   host = &#039;10.243.11.72&#039;                     # Adresse IP du robot&lt;br /&gt;
   port = 1025                               # Port de communication  &lt;br /&gt;
   try:&lt;br /&gt;
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client_socket:&lt;br /&gt;
            client_socket.settimeout(1.0)  # 1 seconde de timeout&lt;br /&gt;
            client_socket.connect((host, port))&lt;br /&gt;
            client_socket.sendall(str(pos_str).encode())         &lt;br /&gt;
   except socket.timeout:&lt;br /&gt;
        print(&amp;quot;le robot ne repond pas&amp;quot;)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Code à envoyer&#039;&#039;&#039;&lt;br /&gt;
:Il est important d&#039;envoyer le code souhaité en string.&lt;br /&gt;
:De plus, il est important d&#039;être en admin (sudo) pour lancer le code&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
pos_str = str([0,0,300])&lt;br /&gt;
send_to_robot(pos_str)&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Code Robot Studio rapid ===&lt;br /&gt;
:Le code va s&#039;écrire dans la variable &amp;lt;q&amp;gt; code_recu_str &amp;lt;/q&amp;gt;.&lt;br /&gt;
:DE plus, le code va s&#039;afficher sur le Flexpendant avec la fonction &amp;lt;q&amp;gt; TPWrite &amp;lt;/q&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
PROC communication()&lt;br /&gt;
        &lt;br /&gt;
        SocketCreate server_socket;&lt;br /&gt;
        SocketBind server_socket, &amp;quot;10.243.11.72&amp;quot;, 1025;&lt;br /&gt;
        SocketListen server_socket;&lt;br /&gt;
        SocketAccept server_socket, client_socket \ClientAddress:=client_ip;&lt;br /&gt;
        SocketReceive client_socket \str := code_recu_str;&lt;br /&gt;
        SocketClose client_socket;&lt;br /&gt;
        SocketClose server_socket;&lt;br /&gt;
        TPWrite code_recu_str;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ne pas oublier de déclarer les variables au début du code Rapid&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
        VAR socketdev server_socket;&lt;br /&gt;
        VAR socketdev client_socket;&lt;br /&gt;
        VAR string code_recu_str;&lt;br /&gt;
        VAR string client_ip;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=322</id>
		<title>Vision robotique</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=322"/>
		<updated>2026-02-06T15:42:18Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Présentation du projet ==&lt;br /&gt;
Le projet de vision robotique utilise la bibliothèque OpenCV en Python afin de détecter des cibles dans une image.&lt;br /&gt;
Le terme « vision robotique » désigne la capacité d’un robot à prendre des décisions à partir d’images captées par une caméra.&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
Pour réaliser ce projet, un ordinateur sous Linux muni d’une webcam intégrée est requis.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:[[File:apercu_comp.jpeg|400px|Aperçu du résultat|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Exemple Python===&lt;br /&gt;
: Cet exemple sert a détecter la couleur rouge et dessiner un cercle autour dans une image.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; 1. ouvrir le bloc note&#039;&#039;&#039;&lt;br /&gt;
:[[File:Bloc_note.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Enregistrer le projet et le nommer avec un nom terminant en &amp;lt;q&amp;gt;.py &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
: Le fichier sera donc enregistré en document contenant du code python&lt;br /&gt;
  [[File:save_as.png|700px]]&lt;br /&gt;
:[[File:nom_py.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Copier le code d&#039;exemple et le coller dans le bloc-notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import cv2&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
camera = cv2.VideoCapture(0)    # 0 = cam ordi / 2 = cam usb&lt;br /&gt;
&lt;br /&gt;
while (1):&lt;br /&gt;
 &lt;br /&gt;
 ret, image = camera.read()&lt;br /&gt;
 image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) &lt;br /&gt;
 rose_min = np.array([160, 80, 60], np.uint8)        # en HSV&lt;br /&gt;
 rose_max = np.array([179, 255, 255], np.uint8) &lt;br /&gt;
 orange_min = np.array([0,80, 60], np.uint8)        # en HSV&lt;br /&gt;
 orange_max = np.array([15, 255, 255], np.uint8) &lt;br /&gt;
 masque_orange = cv2.inRange(image_hsv, orange_min, orange_max)&lt;br /&gt;
 masque_rose = cv2.inRange(image_hsv, rose_min, rose_max)&lt;br /&gt;
 masque_rouge = masque_rose | masque_orange&lt;br /&gt;
 kernal = np.ones((5, 5), &amp;quot;uint8&amp;quot;)&lt;br /&gt;
 masque_rouge = cv2.dilate(masque_rouge, kernal)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 contour, hierarchy = cv2.findContours(masque_rouge, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)       # cv2.RETR_EXTERNAL   ou   cv2.RETR_TREE&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 num_cible = 1&lt;br /&gt;
 for pic, contour in enumerate (contour):&lt;br /&gt;
     aire = cv2.contourArea(contour)&lt;br /&gt;
     if (aire &amp;gt; 5000):&lt;br /&gt;
              &lt;br /&gt;
        x, y, l, h = cv2.boundingRect(contour)&lt;br /&gt;
        x_image = x&lt;br /&gt;
        y_image = y   &lt;br /&gt;
        milieu =(x_image + (l // 2)), (y_image + (h //2 ))   &lt;br /&gt;
        verre = cv2.circle(image, (milieu), (l // 2), (0, 255, 0), 5)&lt;br /&gt;
        cv2.circle(image, (milieu) , 5, (255, 0, 0), -1)                     #point au milieu des rond      &lt;br /&gt;
        num_cible_str = str(num_cible)&lt;br /&gt;
        cv2.putText(image, (num_cible_str), (x_image, y_image),cv2.FONT_HERSHEY_SIMPLEX, 2.5,(255, 0, 0),6)     &lt;br /&gt;
        num_cible =  (num_cible + 1)&lt;br /&gt;
&lt;br /&gt;
 cv2.imshow(&amp;quot;camera&amp;quot;, image)&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
 if cv2.waitKey(10) &amp;amp; 0xFF == ord(&#039;q&#039;):&lt;br /&gt;
   camera.release()&lt;br /&gt;
   cv2.destroyAllWindows()&lt;br /&gt;
   break&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Lancer le programme===&lt;br /&gt;
: 1. &#039;&#039;&#039;S&#039;assurer d&#039;avoir enregistré les modifications en faisant &amp;lt;q&amp;gt;ctrl + S &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: 2. &#039;&#039;&#039;Lancer le Terminal&#039;&#039;&#039;&lt;br /&gt;
:[[File:Terminal.png|600px]]&lt;br /&gt;
&lt;br /&gt;
: 3. &#039;&#039;&#039;entrer la commande suivante: &amp;lt;q&amp;gt; python3 exemple.py &amp;lt;/q&amp;gt; &#039;&#039;&#039;&lt;br /&gt;
:: *Remplacer &amp;lt;q&amp;gt;exemple&amp;lt;/q&amp;gt; par le nom du fichier bloc-notes choisis a l&#039;étape 2 de la section programmation python.&lt;br /&gt;
: 4. &#039;&#039;&#039;Pour arrêter le programme et fermer l&#039;image, appuyez sur la touche &amp;lt;q&amp;gt;Q &amp;lt;/q&amp;gt; de votre clavier. &#039;&#039;&#039;&lt;br /&gt;
::Si cela ne fonctionne pas, vous pouvez forcer le programme à s&#039;arrêter en faisans &amp;lt;q&amp;gt;ctrl + C &amp;lt;/q&amp;gt; dans le terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Dépannage===&lt;br /&gt;
&lt;br /&gt;
:Il est probable que en collant le code dans votre bloc-notes il ne se colle pas comme il le devrait.&lt;br /&gt;
:En programmation python, L&#039;indentation est très importante.&lt;br /&gt;
:L&#039;indentation c&#039;est les espaces avant le début d&#039;une ligne.&lt;br /&gt;
:Chaque ligne doit débuter à la même place que la dernière.&lt;br /&gt;
:si vous avez une erreur il se peut que vous devrez ajouter ou enlever un espace au début d&#039;une ligne.&lt;br /&gt;
:Attention, dans certains cas (dans une boucle while, for, if, etc.) il est normal que le code a l&#039;intérieur de la boucle soit indenté.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
====Fonctionnement du programme====&lt;br /&gt;
&lt;br /&gt;
:Voici un logigramme expliquant les grandes étapes du programme:&lt;br /&gt;
:[[File:logi_num.png|400px]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
: &#039;&#039;&#039;lien entre le code et le logigrame:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 1. [[File:librairie.png|150px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 2. [[File:cap_camera.png|550px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 3. [[File:bgr2hsv.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 4. [[File:masque.png|550px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 5. [[File:contour.png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 6. [[File:aire.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 7. [[File:cercle.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 8. [[File:afiche_image.png|300px]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
: &#039;&#039;&#039;Explications plus détaillés:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:À l&#039;étape 3, nous convertissons l&#039;image d&#039;origine (RGB) en HSV.&lt;br /&gt;
:Cette étape est essentielle pour que open cv puisse bien exécuter sa détection de couleur.&lt;br /&gt;
:HSV et RGB sont des espaces de couleur, c’est-à-dire différentes manières de représenter les couleurs d’une image.&lt;br /&gt;
:Dans une image en HSV, la teinte des pixels est séparée de la luminosité tandis que en RGB l&#039;image est représentée par le mélange de rouge, bleu et vert.&lt;br /&gt;
:La couleur d&#039;un pixel représenté en RGB est beaucoup influencée par la luminosité.&lt;br /&gt;
:un rouge bien éclairé et un rouge plus sombre change beaucoup les valeurs.&lt;br /&gt;
:En HSV, la teinte reste similaire malgré les variations de luminosité, ce qui rend la détection de couleur plus simple et plus fiable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:À l&#039;é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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:La fonction findContours à l&#039;étape 5 repère les formes présentes dans le masque rouge.&lt;br /&gt;
:Seuls les contours externes sont conservés afin de simplifier la détection.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:La premiere ligne de l&#039;étape 7 &amp;lt;q&amp;gt;&#039;&#039;x, y, l, h = cv2.boundingRect(contour) &#039;&#039;&amp;lt;/q&amp;gt; calcule le rectangle qui englobe un contour détecté.&lt;br /&gt;
:Les valeurs obtenues correspondent à la position du rectangle (x, y) et à sa largeur (l) et sa hauteur (h).&lt;br /&gt;
:Ce rectangle permet de localiser et d’encadrer l’objet détecté dans l’image.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=====Application du projet au cégep=====&lt;br /&gt;
&lt;br /&gt;
:La détection de couleur dans une image en direct peut servir a faire des projets de robotique au cégep.&lt;br /&gt;
:Bien que la prog ci-dessus seule ne peut rien faire, c&#039;est la base de plusieurs projets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Nous pouvons par exemple, trier des cibles par couleur, calculer la position d&#039;une cible, etc.&lt;br /&gt;
:Avec une bonne maitrise de la programmation en texte vous pouvez utiliser ce projet avec les robots 6 axes ou les tables de positionnement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
:&#039;&#039;&#039;Ce qui a déjà été réalisé&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1:&lt;br /&gt;
:En 2025, ce projet a été utilisé avec les robots ABB 6 axes.&lt;br /&gt;
:Une webcam était installée sur la tête du robot afin de lui permettre de voir son environnement.&lt;br /&gt;
&lt;br /&gt;
:Le système de vision permettait de détecter un verre rouge placé n’importe où sur la table.&lt;br /&gt;
: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.&lt;br /&gt;
:Le robot pouvait ensuite se déplacer automatiquement pour prendre le verre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2:&lt;br /&gt;
:Un deuxième projet a été réalisé à partir de ce programme, avec une approche plus simple.&lt;br /&gt;
:Trois zones fixes étaient dessinées sur une feuille collée sur la table.&lt;br /&gt;
:Des verres de différentes couleurs (vert, rouge et bleu) étaient placés dans ces zones.&lt;br /&gt;
&lt;br /&gt;
:Le système permettait de demander au robot une couleur précise.&lt;br /&gt;
&lt;br /&gt;
::&#039;&#039;&#039;Par exemple&#039;&#039;&#039;, si des verres de différentes couleurs sont placés dans chaque zone, &lt;br /&gt;
:::Le robot ira uniquement chercher le verre de la couleur demandée, sans toucher aux zones avec des verres de la mauvaise couleur.&lt;br /&gt;
&lt;br /&gt;
: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.&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=316</id>
		<title>Vision robotique</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=316"/>
		<updated>2026-02-06T15:26:30Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation du projet==&lt;br /&gt;
:Le projet de vision robotique utilise la librairie open cv en python pour détecter des cibles dans une image.&lt;br /&gt;
:le terme « vision robotique » signifie qu&#039;un robot prend des décisions basées sur une image captée.&lt;br /&gt;
:Au cégep nous utilisons des verres rouges sur fond gris (table tournante) comme cible.&lt;br /&gt;
:Comme les verres ont tous la même couleur, il est simple de les identifier dans l&#039;image en utilisant la fonction de détection de couleur de open cv.&lt;br /&gt;
:Pour réaliser ce projet, nous avons besoin d&#039;un ordinateur en linux avec webcam intégrée. &lt;br /&gt;
:Ce projet a été développé par Raphaël Bouchard en 2025. le code d&#039;exemple a été écrit par celui-ci au cégep de Sorel Tracy.&lt;br /&gt;
&lt;br /&gt;
== Présentation du projet ==&lt;br /&gt;
Le projet de vision robotique utilise la bibliothèque OpenCV en Python afin de détecter des cibles dans une image.&lt;br /&gt;
Le terme « vision robotique » désigne la capacité d’un robot à prendre des décisions à partir d’images captées par une caméra.&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
Pour réaliser ce projet, un ordinateur sous Linux muni d’une webcam intégrée est requis.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:[[File:apercu_comp.jpeg|400px|Aperçu du résultat|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Éditer la programmation Python===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; 1. ouvrir le bloc note&#039;&#039;&#039;&lt;br /&gt;
:[[File:Bloc_note.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Enregistrer le projet et le nommer avec un nom terminant en &amp;lt;q&amp;gt;.py &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
: Le fichier sera donc enregistré en document contenant du code python&lt;br /&gt;
  [[File:save_as.png|700px]]&lt;br /&gt;
:[[File:nom_py.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Copier le code d&#039;exemple et le coller dans le bloc-notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import cv2&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
camera = cv2.VideoCapture(0)    # 0 = cam ordi / 2 = cam usb&lt;br /&gt;
&lt;br /&gt;
while (1):&lt;br /&gt;
 &lt;br /&gt;
 ret, image = camera.read()&lt;br /&gt;
 image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) &lt;br /&gt;
 rose_min = np.array([160, 80, 60], np.uint8)        # en HSV&lt;br /&gt;
 rose_max = np.array([179, 255, 255], np.uint8) &lt;br /&gt;
 orange_min = np.array([0,80, 60], np.uint8)        # en HSV&lt;br /&gt;
 orange_max = np.array([15, 255, 255], np.uint8) &lt;br /&gt;
 masque_orange = cv2.inRange(image_hsv, orange_min, orange_max)&lt;br /&gt;
 masque_rose = cv2.inRange(image_hsv, rose_min, rose_max)&lt;br /&gt;
 masque_rouge = masque_rose | masque_orange&lt;br /&gt;
 kernal = np.ones((5, 5), &amp;quot;uint8&amp;quot;)&lt;br /&gt;
 masque_rouge = cv2.dilate(masque_rouge, kernal)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 contour, hierarchy = cv2.findContours(masque_rouge, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)       # cv2.RETR_EXTERNAL   ou   cv2.RETR_TREE&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 num_cible = 1&lt;br /&gt;
 for pic, contour in enumerate (contour):&lt;br /&gt;
     aire = cv2.contourArea(contour)&lt;br /&gt;
     if (aire &amp;gt; 5000):&lt;br /&gt;
              &lt;br /&gt;
        x, y, l, h = cv2.boundingRect(contour)&lt;br /&gt;
        x_image = x&lt;br /&gt;
        y_image = y   &lt;br /&gt;
        milieu =(x_image + (l // 2)), (y_image + (h //2 ))   &lt;br /&gt;
        verre = cv2.circle(image, (milieu), (l // 2), (0, 255, 0), 5)&lt;br /&gt;
        cv2.circle(image, (milieu) , 5, (255, 0, 0), -1)                     #point au milieu des rond      &lt;br /&gt;
        num_cible_str = str(num_cible)&lt;br /&gt;
        cv2.putText(image, (num_cible_str), (x_image, y_image),cv2.FONT_HERSHEY_SIMPLEX, 2.5,(255, 0, 0),6)     &lt;br /&gt;
        num_cible =  (num_cible + 1)&lt;br /&gt;
&lt;br /&gt;
 cv2.imshow(&amp;quot;camera&amp;quot;, image)&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
 if cv2.waitKey(10) &amp;amp; 0xFF == ord(&#039;q&#039;):&lt;br /&gt;
   camera.release()&lt;br /&gt;
   cv2.destroyAllWindows()&lt;br /&gt;
   break&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Lancer le programme===&lt;br /&gt;
: 1. &#039;&#039;&#039;S&#039;assurer d&#039;avoir enregistré les modifications en faisant &amp;lt;q&amp;gt;ctrl + S &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: 2. &#039;&#039;&#039;Lancer le Terminal&#039;&#039;&#039;&lt;br /&gt;
:[[File:Terminal.png|600px]]&lt;br /&gt;
&lt;br /&gt;
: 3. &#039;&#039;&#039;entrer la commande suivante: &amp;lt;q&amp;gt; python3 exemple.py &amp;lt;/q&amp;gt; &#039;&#039;&#039;&lt;br /&gt;
:: *Remplacer &amp;lt;q&amp;gt;exemple&amp;lt;/q&amp;gt; par le nom du fichier bloc-notes choisis a l&#039;étape 2 de la section programmation python.&lt;br /&gt;
: 4. &#039;&#039;&#039;Pour arrêter le programme et fermer l&#039;image, appuyez sur la touche &amp;lt;q&amp;gt;Q &amp;lt;/q&amp;gt; de votre clavier. &#039;&#039;&#039;&lt;br /&gt;
::Si cela ne fonctionne pas, vous pouvez forcer le programme à s&#039;arrêter en faisans &amp;lt;q&amp;gt;ctrl + C &amp;lt;/q&amp;gt; dans le terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Dépannage===&lt;br /&gt;
&lt;br /&gt;
:Il est probable que en collant le code dans votre bloc-notes il ne se colle pas comme il le devrait.&lt;br /&gt;
:En programmation python, L&#039;indentation est très importante.&lt;br /&gt;
:L&#039;indentation c&#039;est les espaces avant le début d&#039;une ligne.&lt;br /&gt;
:Chaque ligne doit débuter à la même place que la dernière.&lt;br /&gt;
:si vous avez une erreur il se peut que vous devrez ajouter ou enlever un espace au début d&#039;une ligne.&lt;br /&gt;
:Attention, dans certains cas (dans une boucle while, for, if, etc.) il est normal que le code a l&#039;intérieur de la boucle soit indenté.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
====fonctionnement du programme====&lt;br /&gt;
&lt;br /&gt;
:Voici un logigramme expliquant les grandes étapes du programme:&lt;br /&gt;
:[[File:logi_num.png|400px]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
: &#039;&#039;&#039;lien entre le code et le logigrame:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 1. [[File:librairie.png|150px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 2. [[File:cap_camera.png|550px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 3. [[File:bgr2hsv.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 4. [[File:masque.png|550px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 5. [[File:contour.png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 6. [[File:aire.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 7. [[File:cercle.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 8. [[File:afiche_image.png|300px]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
: &#039;&#039;&#039;explications plus détaillés:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:À l&#039;étape 3, nous convertissons l&#039;image d&#039;origine (RGB) en HSV.&lt;br /&gt;
:Cette étape est essentielle pour que open cv puisse bien exécuter sa détection de couleur.&lt;br /&gt;
:HSV et RGB sont des espaces de couleur, c’est-à-dire différentes manières de représenter les couleurs d’une image.&lt;br /&gt;
:Dans une image en HSV, la teinte des pixels est séparée de la luminosité tandis que en RGB l&#039;image est représentée par le mélange de rouge, bleu et vert.&lt;br /&gt;
:La couleur d&#039;un pixel représenté en RGB est beaucoup influencée par la luminosité.&lt;br /&gt;
:un rouge bien éclairé et un rouge plus sombre change beaucoup les valeurs.&lt;br /&gt;
:En HSV, la teinte reste similaire malgré les variations de luminosité, ce qui rend la détection de couleur plus simple et plus fiable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:La fonction findContours à l&#039;étape 5 repère les formes présentes dans le masque rouge.&lt;br /&gt;
:Seuls les contours externes sont conservés afin de simplifier la détection.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:La premiere ligne de l&#039;étape 7 &amp;lt;q&amp;gt;&#039;&#039;x, y, l, h = cv2.boundingRect(contour) &#039;&#039;&amp;lt;/q&amp;gt; calcule le rectangle qui englobe un contour détecté.&lt;br /&gt;
:Les valeurs obtenues correspondent à la position du rectangle (x, y) et à sa largeur (l) et sa hauteur (h).&lt;br /&gt;
:Ce rectangle permet de localiser et d’encadrer l’objet détecté dans l’image.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=====Application du projet au cégep=====&lt;br /&gt;
&lt;br /&gt;
:La détection de couleur dans une image en direct peut servir a faire des projets de robotique au cégep.&lt;br /&gt;
:Bien que la prog ci-dessus seule ne peut rien faire, c&#039;est la base de plusieurs projets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Nous pouvons par exemple, trier des cibles par couleur, calculer la position d&#039;une cible, etc.&lt;br /&gt;
:Avec une bonne maitrise de la programmation en texte vous pouvez utiliser ce projet avec les robots 6 axes ou les tables de positionnement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
:&#039;&#039;&#039;Ce qui a déjà été réalisé&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1:&lt;br /&gt;
:En 2025, ce projet a été utilisé avec les robots ABB 6 axes.&lt;br /&gt;
:Une webcam était installée sur la tête du robot afin de lui permettre de voir son environnement.&lt;br /&gt;
&lt;br /&gt;
:Le système de vision permettait de détecter un verre rouge placé n’importe où sur la table.&lt;br /&gt;
: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.&lt;br /&gt;
:Le robot pouvait ensuite se déplacer automatiquement pour prendre le verre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2:&lt;br /&gt;
:Un deuxième projet a été réalisé à partir de ce programme, avec une approche plus simple.&lt;br /&gt;
:Trois zones fixes étaient dessinées sur une feuille collée sur la table.&lt;br /&gt;
:Des verres de différentes couleurs (vert, rouge et bleu) étaient placés dans ces zones.&lt;br /&gt;
&lt;br /&gt;
:Le système permettait de demander au robot une couleur précise.&lt;br /&gt;
&lt;br /&gt;
::&#039;&#039;&#039;Par exemple&#039;&#039;&#039;, si des verres de différentes couleurs sont placés dans chaque zone, &lt;br /&gt;
:::Le robot ira uniquement chercher le verre de la couleur demandée, sans toucher aux zones avec des verres de la mauvaise couleur.&lt;br /&gt;
&lt;br /&gt;
: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.&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=297</id>
		<title>Vision robotique</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=297"/>
		<updated>2026-02-06T14:04:33Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation du projet==&lt;br /&gt;
:Le projet de vision robotique utilise la librairie open cv en python pour détecter des cibles dans une image.&lt;br /&gt;
:le terme « vision robotique » signifie qu&#039;un robot prend des décisions basées sur une image captée.&lt;br /&gt;
:Au cégep nous utilisons des verres rouges sur fond gris (table tournante) comme cible.&lt;br /&gt;
:Comme les verres ont tous la même couleur, il est simple de les identifier dans l&#039;image en utilisant la fonction de détection de couleur de open cv.&lt;br /&gt;
:Pour réaliser ce projet, nous avons besoin d&#039;un ordinateur en linux avec webcam intégrée. &lt;br /&gt;
:Ce projet a été développé par Raphaël Bouchard en 2025. le code d&#039;exemple a été écrit par celui-ci au cégep de Sorel Tracy.&lt;br /&gt;
:[[File:apercu_comp.jpeg|400px|Aperçu du résultat|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Éditer la programmation Python===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; 1. ouvrir le bloc note&#039;&#039;&#039;&lt;br /&gt;
:[[File:Bloc_note.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Enregistrer le projet et le nommer avec un nom terminant en &amp;lt;q&amp;gt;.py &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
: Le fichier sera donc enregistré en document contenant du code python&lt;br /&gt;
  [[File:save_as.png|700px]]&lt;br /&gt;
:[[File:nom_py.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Copier le code d&#039;exemple et le coller dans le bloc-notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import cv2&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
camera = cv2.VideoCapture(0)    # 0 = cam ordi / 2 = cam usb&lt;br /&gt;
&lt;br /&gt;
while (1):&lt;br /&gt;
 &lt;br /&gt;
 ret, image = camera.read()&lt;br /&gt;
 image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) &lt;br /&gt;
 rose_min = np.array([160, 80, 60], np.uint8)        # en HSV&lt;br /&gt;
 rose_max = np.array([179, 255, 255], np.uint8) &lt;br /&gt;
 orange_min = np.array([0,80, 60], np.uint8)        # en HSV&lt;br /&gt;
 orange_max = np.array([15, 255, 255], np.uint8) &lt;br /&gt;
 masque_orange = cv2.inRange(image_hsv, orange_min, orange_max)&lt;br /&gt;
 masque_rose = cv2.inRange(image_hsv, rose_min, rose_max)&lt;br /&gt;
 masque_rouge = masque_rose | masque_orange&lt;br /&gt;
 kernal = np.ones((5, 5), &amp;quot;uint8&amp;quot;)&lt;br /&gt;
 masque_rouge = cv2.dilate(masque_rouge, kernal)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 contour, hierarchy = cv2.findContours(masque_rouge, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)       # cv2.RETR_EXTERNAL   ou   cv2.RETR_TREE&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 num_cible = 1&lt;br /&gt;
 for pic, contour in enumerate (contour):&lt;br /&gt;
     aire = cv2.contourArea(contour)&lt;br /&gt;
     if (aire &amp;gt; 5000):&lt;br /&gt;
              &lt;br /&gt;
        x, y, l, h = cv2.boundingRect(contour)&lt;br /&gt;
        x_image = x&lt;br /&gt;
        y_image = y   &lt;br /&gt;
        milieu =(x_image + (l // 2)), (y_image + (h //2 ))   &lt;br /&gt;
        verre = cv2.circle(image, (milieu), (l // 2), (0, 255, 0), 5)&lt;br /&gt;
        cv2.circle(image, (milieu) , 5, (255, 0, 0), -1)                     #point au milieu des rond      &lt;br /&gt;
        num_cible_str = str(num_cible)&lt;br /&gt;
        cv2.putText(image, (num_cible_str), (x_image, y_image),cv2.FONT_HERSHEY_SIMPLEX, 2.5,(255, 0, 0),6)     &lt;br /&gt;
        num_cible =  (num_cible + 1)&lt;br /&gt;
&lt;br /&gt;
 cv2.imshow(&amp;quot;camera&amp;quot;, image)&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
 if cv2.waitKey(10) &amp;amp; 0xFF == ord(&#039;q&#039;):&lt;br /&gt;
   camera.release()&lt;br /&gt;
   cv2.destroyAllWindows()&lt;br /&gt;
   break&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Lancer le programme===&lt;br /&gt;
: 1. &#039;&#039;&#039;S&#039;assurer d&#039;avoir enregistré les modifications en faisant &amp;lt;q&amp;gt;ctrl + S &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: 2. &#039;&#039;&#039;Lancer le Terminal&#039;&#039;&#039;&lt;br /&gt;
:[[File:Terminal.png|600px]]&lt;br /&gt;
&lt;br /&gt;
: 3. &#039;&#039;&#039;entrer la commande suivante: &amp;lt;q&amp;gt; python3 exemple.py &amp;lt;/q&amp;gt; &#039;&#039;&#039;&lt;br /&gt;
:: *Remplacer &amp;lt;q&amp;gt;exemple&amp;lt;/q&amp;gt; par le nom du fichier bloc-notes choisis a l&#039;étape 2 de la section programmation python.&lt;br /&gt;
: 4. &#039;&#039;&#039;Pour arrêter le programme et fermer l&#039;image, appuyez sur la touche &amp;lt;q&amp;gt;Q &amp;lt;/q&amp;gt; de votre clavier. &#039;&#039;&#039;&lt;br /&gt;
::Si cela ne fonctionne pas, vous pouvez forcer le programme à s&#039;arrêter en faisans &amp;lt;q&amp;gt;ctrl + C &amp;lt;/q&amp;gt; dans le terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Dépannage===&lt;br /&gt;
&lt;br /&gt;
:Il est probable que en collant le code dans votre bloc-notes il ne se colle pas comme il le devrait.&lt;br /&gt;
:En programmation python, L&#039;indentation est très importante.&lt;br /&gt;
:L&#039;indentation c&#039;est les espaces avant le début d&#039;une ligne.&lt;br /&gt;
:Chaque ligne doit débuter à la même place que la dernière.&lt;br /&gt;
:si vous avez une erreur il se peut que vous devrez ajouter ou enlever un espace au début d&#039;une ligne.&lt;br /&gt;
:Attention, dans certains cas (dans une boucle while, for, if, etc.) il est normal que le code a l&#039;intérieur de la boucle soit indenté.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
====fonctionnement du programme====&lt;br /&gt;
&lt;br /&gt;
:Voici un logigramme expliquant les grandes étapes du programme:&lt;br /&gt;
:[[File:logi_num.png|400px]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
: &#039;&#039;&#039;lien entre le code et le logigrame:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 1. [[File:librairie.png|150px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 2. [[File:cap_camera.png|550px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 3. [[File:bgr2hsv.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 4. [[File:masque.png|550px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 5. [[File:contour.png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 6. [[File:aire.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 7. [[File:cercle.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 8. [[File:afiche_image.png|300px]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
: &#039;&#039;&#039;explications plus détaillés:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:À l&#039;étape 3, nous convertissons l&#039;image d&#039;origine (RGB) en HSV.&lt;br /&gt;
:Cette étape est essentielle pour que open cv puisse bien exécuter sa détection de couleur.&lt;br /&gt;
:HSV et RGB sont des espaces de couleur, c’est-à-dire différentes manières de représenter les couleurs d’une image.&lt;br /&gt;
:Dans une image en HSV, la teinte des pixels est séparée de la luminosité tandis que en RGB l&#039;image est représentée par le mélange de rouge, bleu et vert.&lt;br /&gt;
:La couleur d&#039;un pixel représenté en RGB est beaucoup influencée par la luminosité.&lt;br /&gt;
:un rouge bien éclairé et un rouge plus sombre change beaucoup les valeurs.&lt;br /&gt;
:En HSV, la teinte reste similaire malgré les variations de luminosité, ce qui rend la détection de couleur plus simple et plus fiable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:La fonction findContours à l&#039;étape 5 repère les formes présentes dans le masque rouge.&lt;br /&gt;
:Seuls les contours externes sont conservés afin de simplifier la détection.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:La premiere ligne de l&#039;étape 7 &amp;lt;q&amp;gt;&#039;&#039;x, y, l, h = cv2.boundingRect(contour) &#039;&#039;&amp;lt;/q&amp;gt; calcule le rectangle qui englobe un contour détecté.&lt;br /&gt;
:Les valeurs obtenues correspondent à la position du rectangle (x, y) et à sa largeur (l) et sa hauteur (h).&lt;br /&gt;
:Ce rectangle permet de localiser et d’encadrer l’objet détecté dans l’image.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=====Application du projet au cégep=====&lt;br /&gt;
&lt;br /&gt;
:La détection de couleur dans une image en direct peut servir a faire des projets de robotique au cégep.&lt;br /&gt;
:Bien que la prog ci-dessus seule ne peut rien faire, c&#039;est la base de plusieurs projets.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Nous pouvons par exemple, trier des cibles par couleur, calculer la position d&#039;une cible, etc.&lt;br /&gt;
:Avec une bonne maitrise de la programmation en texte vous pouvez utiliser ce projet avec les robots 6 axes ou les tables de positionnement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
:&#039;&#039;&#039;Ce qui a déjà été réalisé&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1:&lt;br /&gt;
:En 2025, ce projet a été utilisé avec les robots ABB 6 axes.&lt;br /&gt;
:Une webcam était installée sur la tête du robot afin de lui permettre de voir son environnement.&lt;br /&gt;
&lt;br /&gt;
:Le système de vision permettait de détecter un verre rouge placé n’importe où sur la table.&lt;br /&gt;
: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.&lt;br /&gt;
:Le robot pouvait ensuite se déplacer automatiquement pour prendre le verre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2:&lt;br /&gt;
:Un deuxième projet a été réalisé à partir de ce programme, avec une approche plus simple.&lt;br /&gt;
:Trois zones fixes étaient dessinées sur une feuille collée sur la table.&lt;br /&gt;
:Des verres de différentes couleurs (vert, rouge et bleu) étaient placés dans ces zones.&lt;br /&gt;
&lt;br /&gt;
:Le système permettait de demander au robot une couleur précise.&lt;br /&gt;
&lt;br /&gt;
::&#039;&#039;&#039;Par exemple&#039;&#039;&#039;, si des verres de différentes couleurs sont placés dans chaque zone, &lt;br /&gt;
:::Le robot ira uniquement chercher le verre de la couleur demandée, sans toucher aux zones avec des verres de la mauvaise couleur.&lt;br /&gt;
&lt;br /&gt;
: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.&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=169</id>
		<title>Vision robotique</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=169"/>
		<updated>2026-02-02T21:31:53Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation du projet==&lt;br /&gt;
:Le projet de vision robotique utilise la librairie open cv en python pour détecter des cibles dans une image.&lt;br /&gt;
:le terme « vision robotique » signifie qu&#039;un robot prend des décisions basées sur une image captée.&lt;br /&gt;
:Au cégep nous utilisons des verres rouges sur fond gris (table tournante) comme cible.&lt;br /&gt;
:Comme les verres ont tous la même couleur, il est simple de les identifier dans l&#039;image en utilisant la fonction de détection de couleur de open cv.&lt;br /&gt;
:Pour réaliser ce projet, nous avons besoin d&#039;un ordinateur en linux avec webcam intégrée. &lt;br /&gt;
:Ce projet a été développé par Raphaël Bouchard en 2025. le code d&#039;exemple a été écrit par celui-ci au cégep de Sorel Tracy.&lt;br /&gt;
:[[File:apercu_comp.jpeg|400px|Aperçu du résultat|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Éditer la programmation Python===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; 1. ouvrir le bloc note&#039;&#039;&#039;&lt;br /&gt;
:[[File:Bloc_note.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Enregistrer le projet et le nommer avec un nom terminant en &amp;lt;q&amp;gt;.py &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
: Le fichier sera donc enregistré en document contenant du code python&lt;br /&gt;
  [[File:save_as.png|700px]]&lt;br /&gt;
:[[File:nom_py.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Copier le code d&#039;exemple et le coller dans le bloc-notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import cv2&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
camera = cv2.VideoCapture(0)    # 0 = cam ordi / 2 = cam usb&lt;br /&gt;
&lt;br /&gt;
while (1):&lt;br /&gt;
 &lt;br /&gt;
 ret, image = camera.read()&lt;br /&gt;
 image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) &lt;br /&gt;
 rose_min = np.array([160, 80, 60], np.uint8)        # en HSV&lt;br /&gt;
 rose_max = np.array([179, 255, 255], np.uint8) &lt;br /&gt;
 orange_min = np.array([0,80, 60], np.uint8)        # en HSV&lt;br /&gt;
 orange_max = np.array([15, 255, 255], np.uint8) &lt;br /&gt;
 masque_orange = cv2.inRange(image_hsv, orange_min, orange_max)&lt;br /&gt;
 masque_rose = cv2.inRange(image_hsv, rose_min, rose_max)&lt;br /&gt;
 masque_rouge = masque_rose | masque_orange&lt;br /&gt;
 kernal = np.ones((5, 5), &amp;quot;uint8&amp;quot;)&lt;br /&gt;
 masque_rouge = cv2.dilate(masque_rouge, kernal)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 contour, hierarchy = cv2.findContours(masque_rouge, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)       # cv2.RETR_EXTERNAL   ou   cv2.RETR_TREE&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 num_cible = 1&lt;br /&gt;
 for pic, contour in enumerate (contour):&lt;br /&gt;
     aire = cv2.contourArea(contour)&lt;br /&gt;
     if (aire &amp;gt; 5000):&lt;br /&gt;
              &lt;br /&gt;
        x, y, l, h = cv2.boundingRect(contour)&lt;br /&gt;
        x_image = x&lt;br /&gt;
        y_image = y   &lt;br /&gt;
        milieu =(x_image + (l // 2)), (y_image + (h //2 ))   &lt;br /&gt;
        verre = cv2.circle(image, (milieu), (l // 2), (0, 255, 0), 5)&lt;br /&gt;
        cv2.circle(image, (milieu) , 5, (255, 0, 0), -1)                     #point au milieu des rond      &lt;br /&gt;
        num_cible_str = str(num_cible)&lt;br /&gt;
        cv2.putText(image, (num_cible_str), (x_image, y_image),cv2.FONT_HERSHEY_SIMPLEX, 2.5,(255, 0, 0),6)     &lt;br /&gt;
        num_cible =  (num_cible + 1)&lt;br /&gt;
&lt;br /&gt;
 cv2.imshow(&amp;quot;camera&amp;quot;, image)&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
 if cv2.waitKey(10) &amp;amp; 0xFF == ord(&#039;q&#039;):&lt;br /&gt;
   camera.release()&lt;br /&gt;
   cv2.destroyAllWindows()&lt;br /&gt;
   break&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Lancer le programme===&lt;br /&gt;
: 1. &#039;&#039;&#039;S&#039;assurer d&#039;avoir enregistré les modifications en faisant &amp;lt;q&amp;gt;ctrl + S &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: 2. &#039;&#039;&#039;Lancer le Terminal&#039;&#039;&#039;&lt;br /&gt;
:[[File:Terminal.png|600px]]&lt;br /&gt;
&lt;br /&gt;
: 3. &#039;&#039;&#039;entrer la commande suivante: &amp;lt;q&amp;gt; python3 exemple.py &amp;lt;/q&amp;gt; &#039;&#039;&#039;&lt;br /&gt;
:: *Remplacer &amp;lt;q&amp;gt;exemple&amp;lt;/q&amp;gt; par le nom du fichier bloc-notes choisis a l&#039;étape 2 de la section programmation python.&lt;br /&gt;
: 4. &#039;&#039;&#039;Pour arrêter le programme et fermer l&#039;image, appuyez sur la touche &amp;lt;q&amp;gt;Q &amp;lt;/q&amp;gt; de votre clavier. &#039;&#039;&#039;&lt;br /&gt;
::Si cela ne fonctionne pas, vous pouvez forcer le programme à s&#039;arrêter en faisans &amp;lt;q&amp;gt;ctrl + C &amp;lt;/q&amp;gt; dans le terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Dépannage===&lt;br /&gt;
&lt;br /&gt;
:Il est probable que en collant le code dans votre bloc-notes il ne se colle pas comme il le devrait.&lt;br /&gt;
:En programmation python, L&#039;indentation est très importante.&lt;br /&gt;
:L&#039;indentation c&#039;est les espaces avant le début d&#039;une ligne.&lt;br /&gt;
:Chaque ligne doit débuter à la même place que la dernière.&lt;br /&gt;
:si vous avez une erreur il se peut que vous devrez ajouter ou enlever un espace au début d&#039;une ligne.&lt;br /&gt;
:Attention, dans certains cas (dans une boucle while, for, if, etc.) il est normal que le code a l&#039;intérieur de la boucle soit indenté.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
====fonctionnement du programme====&lt;br /&gt;
&lt;br /&gt;
:Voici un logigramme expliquant les grandes étapes du programme:&lt;br /&gt;
:[[File:logi_num.png|400px]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
: &#039;&#039;&#039;lien entre le code et le logigrame:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 1. [[File:librairie.png|150px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 2. [[File:cap_camera.png|550px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 3. [[File:bgr2hsv.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 4. [[File:masque.png|550px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 5. [[File:contour.png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 6. [[File:aire.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 7. [[File:cercle.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 8. [[File:afiche_image.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=====Application du projet au cégep=====&lt;br /&gt;
&lt;br /&gt;
:La détection de couleur dans une image en direct peut servir a faire des projets de robotique au cégep.&lt;br /&gt;
:Bien que la prog ci-dessus seule ne peut rien faire, c&#039;est la base de plusieurs projets.&lt;br /&gt;
&lt;br /&gt;
:Nous pouvons par exemple, trier des cibles par couleur, calculer la position d&#039;une cible, etc.&lt;br /&gt;
:Avec une bonne maitrise de la programmation en texte vous pouvez utiliser ce projet avec les robots 6 axes ou les tables de positionnement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
:&#039;&#039;&#039;Ce qui a déjà été réalisé&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1:&lt;br /&gt;
:En 2025, ce projet a été utilisé avec les robots ABB 6 axes.&lt;br /&gt;
:Une webcam était installée sur la tête du robot afin de lui permettre de voir son environnement.&lt;br /&gt;
&lt;br /&gt;
:Le système de vision permettait de détecter un verre rouge placé n’importe où sur la table.&lt;br /&gt;
: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.&lt;br /&gt;
:Le robot pouvait ensuite se déplacer automatiquement pour prendre le verre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2:&lt;br /&gt;
:Un deuxième projet a été réalisé à partir de ce programme, avec une approche plus simple.&lt;br /&gt;
:Trois zones fixes étaient dessinées sur une feuille collée sur la table.&lt;br /&gt;
:Des verres de différentes couleurs (vert, rouge et bleu) étaient placés dans ces zones.&lt;br /&gt;
&lt;br /&gt;
:Le système permettait de demander au robot une couleur précise.&lt;br /&gt;
&lt;br /&gt;
::&#039;&#039;&#039;Par exemple&#039;&#039;&#039;, si des verres de différentes couleurs sont placés dans chaque zone, &lt;br /&gt;
:::Le robot ira uniquement chercher le verre de la couleur demandée, sans toucher aux zones avec des verres de la mauvaise couleur.&lt;br /&gt;
&lt;br /&gt;
: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.&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=167</id>
		<title>Vision robotique</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=167"/>
		<updated>2026-02-02T21:29:53Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation du projet==&lt;br /&gt;
:Le projet de vision robotique utilise la librairie open cv en python pour détecter des cibles dans une image.&lt;br /&gt;
:le terme « vision robotique » signifie qu&#039;un robot prend des décisions basées sur une image captée.&lt;br /&gt;
:Au cégep nous utilisons des verres rouges sur fond gris (table tournante) comme cible.&lt;br /&gt;
:Comme les verres ont tous la même couleur, il est simple de les identifier dans l&#039;image en utilisant la fonction de détection de couleur de open cv.&lt;br /&gt;
:Pour réaliser ce projet, nous avons besoin d&#039;un ordinateur en linux avec webcam intégrée. &lt;br /&gt;
:Ce projet a été développé par Raphaël Bouchard en 2025. le code d&#039;exemple a été écrit par celui-ci au cégep de Sorel Tracy.&lt;br /&gt;
:[[File:apercu_comp.jpeg|400px|Aperçu du résultat|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Éditer la programmation Python===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; 1. ouvrir le bloc note&#039;&#039;&#039;&lt;br /&gt;
:[[File:Bloc_note.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Enregistrer le projet et le nommer avec un nom terminant en &amp;lt;q&amp;gt;.py &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
: Le fichier sera donc enregistré en document contenant du code python&lt;br /&gt;
  [[File:save_as.png|700px]]&lt;br /&gt;
:[[File:nom_py.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Copier le code d&#039;exemple et le coller dans le bloc-notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import cv2&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
camera = cv2.VideoCapture(0)    # 0 = cam ordi / 2 = cam usb&lt;br /&gt;
&lt;br /&gt;
while (1):&lt;br /&gt;
 &lt;br /&gt;
 ret, image = camera.read()&lt;br /&gt;
 image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) &lt;br /&gt;
 rose_min = np.array([160, 80, 60], np.uint8)        # en HSV&lt;br /&gt;
 rose_max = np.array([179, 255, 255], np.uint8) &lt;br /&gt;
 orange_min = np.array([0,80, 60], np.uint8)        # en HSV&lt;br /&gt;
 orange_max = np.array([15, 255, 255], np.uint8) &lt;br /&gt;
 masque_orange = cv2.inRange(image_hsv, orange_min, orange_max)&lt;br /&gt;
 masque_rose = cv2.inRange(image_hsv, rose_min, rose_max)&lt;br /&gt;
 masque_rouge = masque_rose | masque_orange&lt;br /&gt;
 kernal = np.ones((5, 5), &amp;quot;uint8&amp;quot;)&lt;br /&gt;
 masque_rouge = cv2.dilate(masque_rouge, kernal)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 contour, hierarchy = cv2.findContours(masque_rouge, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)       # cv2.RETR_EXTERNAL   ou   cv2.RETR_TREE&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 num_cible = 1&lt;br /&gt;
 for pic, contour in enumerate (contour):&lt;br /&gt;
     aire = cv2.contourArea(contour)&lt;br /&gt;
     if (aire &amp;gt; 5000):&lt;br /&gt;
              &lt;br /&gt;
        x, y, l, h = cv2.boundingRect(contour)&lt;br /&gt;
        x_image = x&lt;br /&gt;
        y_image = y   &lt;br /&gt;
        milieu =(x_image + (l // 2)), (y_image + (h //2 ))   &lt;br /&gt;
        verre = cv2.circle(image, (milieu), (l // 2), (0, 255, 0), 5)&lt;br /&gt;
        cv2.circle(image, (milieu) , 5, (255, 0, 0), -1)                     #point au milieu des rond      &lt;br /&gt;
        num_cible_str = str(num_cible)&lt;br /&gt;
        cv2.putText(image, (num_cible_str), (x_image, y_image),cv2.FONT_HERSHEY_SIMPLEX, 2.5,(255, 0, 0),6)     &lt;br /&gt;
        num_cible =  (num_cible + 1)&lt;br /&gt;
&lt;br /&gt;
 cv2.imshow(&amp;quot;camera&amp;quot;, image)&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
 if cv2.waitKey(10) &amp;amp; 0xFF == ord(&#039;q&#039;):&lt;br /&gt;
   camera.release()&lt;br /&gt;
   cv2.destroyAllWindows()&lt;br /&gt;
   break&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Lancer le programme===&lt;br /&gt;
: 1. &#039;&#039;&#039;S&#039;assurer d&#039;avoir enregistré les modifications en faisant &amp;lt;q&amp;gt;ctrl + S &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: 2. &#039;&#039;&#039;Lancer le Terminal&#039;&#039;&#039;&lt;br /&gt;
:[[File:Terminal.png|600px]]&lt;br /&gt;
&lt;br /&gt;
: 3. &#039;&#039;&#039;entrer la commande suivante: &amp;lt;q&amp;gt; python3 exemple.py &amp;lt;/q&amp;gt; &#039;&#039;&#039;&lt;br /&gt;
:: *Remplacer &amp;lt;q&amp;gt;exemple&amp;lt;/q&amp;gt; par le nom du fichier bloc-notes choisis a l&#039;étape 2 de la section programmation python.&lt;br /&gt;
: 4. &#039;&#039;&#039;Pour arrêter le programme et fermer l&#039;image, appuyez sur la touche &amp;lt;q&amp;gt;Q &amp;lt;/q&amp;gt; de votre clavier. &#039;&#039;&#039;&lt;br /&gt;
::Si cela ne fonctionne pas, vous pouvez forcer le programme à s&#039;arrêter en faisans &amp;lt;q&amp;gt;ctrl + C &amp;lt;/q&amp;gt; dans le terminal.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Dépannage===&lt;br /&gt;
&lt;br /&gt;
:Il est probable que en collant le code dans votre bloc-notes il ne se colle pas comme il le devrait.&lt;br /&gt;
:En programmation python, L&#039;indentation est très importante.&lt;br /&gt;
:L&#039;indentation c&#039;est les espaces avant le début d&#039;une ligne.&lt;br /&gt;
:Chaque ligne doit débuter à la même place que la dernière.&lt;br /&gt;
:si vous avez une erreur il se peut que vous devrez ajouter ou enlever un espace au début d&#039;une ligne.&lt;br /&gt;
:Attention, dans certains cas (dans une boucle while, for, if, etc.) il est normal que le code a l&#039;intérieur de la boucle soit indenté.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
====fonctionnement du programme====&lt;br /&gt;
&lt;br /&gt;
:Voici un logigramme expliquant les grandes étapes du programme:&lt;br /&gt;
:[[File:logi_num.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;lien entre le code et le logigrame:&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 1. [[File:librairie.png|150px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 2. [[File:cap_camera.png|550px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 3. [[File:bgr2hsv.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 4. [[File:masque.png|550px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 5. [[File:contour.png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 6. [[File:aire.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 7. [[File:cercle.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 8. [[File:afiche_image.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=====Application du projet au cégep=====&lt;br /&gt;
&lt;br /&gt;
:La détection de couleur dans une image en direct peut servir a faire des projets de robotique au cégep.&lt;br /&gt;
:Bien que la prog ci-dessus seule ne peut rien faire, c&#039;est la base de plusieurs projets.&lt;br /&gt;
&lt;br /&gt;
:Nous pouvons par exemple, trier des cibles par couleur, calculer la position d&#039;une cible, etc.&lt;br /&gt;
:Avec une bonne maitrise de la programmation en texte vous pouvez utiliser ce projet avec les robots 6 axes ou les tables de positionnement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Ce qui a déjà été réalisé&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
1:&lt;br /&gt;
:En 2025, ce projet a été utilisé avec les robots ABB 6 axes.&lt;br /&gt;
:Une webcam était installée sur la tête du robot afin de lui permettre de voir son environnement.&lt;br /&gt;
&lt;br /&gt;
:Le système de vision permettait de détecter un verre rouge placé n’importe où sur la table.&lt;br /&gt;
: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.&lt;br /&gt;
:Le robot pouvait ensuite se déplacer automatiquement pour prendre le verre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2:&lt;br /&gt;
:Un deuxième projet a été réalisé à partir de ce programme, avec une approche plus simple.&lt;br /&gt;
:Trois zones fixes étaient dessinées sur une feuille collée sur la table.&lt;br /&gt;
:Des verres de différentes couleurs (vert, rouge et bleu) étaient placés dans ces zones.&lt;br /&gt;
&lt;br /&gt;
:Le système permettait de demander au robot une couleur précise.&lt;br /&gt;
&lt;br /&gt;
::&#039;&#039;&#039;Par exemple&#039;&#039;&#039;, si des verres de différentes couleurs sont placés dans chaque zone, &lt;br /&gt;
:::Le robot ira uniquement chercher le verre de la couleur demandée, sans toucher aux zones avec des verres de la mauvaise couleur.&lt;br /&gt;
&lt;br /&gt;
: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.&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=157</id>
		<title>Vision robotique</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=157"/>
		<updated>2026-02-02T21:02:01Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation du projet==&lt;br /&gt;
:Le projet de vision robotique utilise la librairie open cv en python pour détecter des cibles dans une image.&lt;br /&gt;
:le terme « vision robotique » signifie qu&#039;un robot prend des décisions basées sur une image captée.&lt;br /&gt;
:Au cégep nous utilisons des verres rouges sur fond gris (table tournante) comme cible.&lt;br /&gt;
:Comme les verres ont tous la même couleur, il est simple de les identifier dans l&#039;image en utilisant la fonction de détection de couleur de open cv.&lt;br /&gt;
:Pour réaliser ce projet, nous avons besoin d&#039;un ordinateur en linux avec webcam intégrée. &lt;br /&gt;
:Ce projet a été développé par Raphaël Bouchard en 2025. le code d&#039;exemple a été écrit par celui-ci au cégep de Sorel Tracy.&lt;br /&gt;
:[[File:apercu_comp.jpeg|400px|Aperçu du résultat|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Éditer la programmation Python===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; 1. ouvrir le bloc note&#039;&#039;&#039;&lt;br /&gt;
:[[File:Bloc_note.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Enregistrer le projet et le nommer avec un nom terminant en &amp;lt;q&amp;gt;.py &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
: Le fichier sera donc enregistré en document contenant du code python&lt;br /&gt;
  [[File:save_as.png|700px]]&lt;br /&gt;
:[[File:nom_py.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Copier le code d&#039;exemple et le coller dans le bloc-notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import cv2&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
camera = cv2.VideoCapture(0)    # 0 = cam ordi / 2 = cam usb&lt;br /&gt;
&lt;br /&gt;
while (1):&lt;br /&gt;
 &lt;br /&gt;
 ret, image = camera.read()&lt;br /&gt;
 image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) &lt;br /&gt;
 rose_min = np.array([160, 80, 60], np.uint8)        # en HSV&lt;br /&gt;
 rose_max = np.array([179, 255, 255], np.uint8) &lt;br /&gt;
 orange_min = np.array([0,80, 60], np.uint8)        # en HSV&lt;br /&gt;
 orange_max = np.array([15, 255, 255], np.uint8) &lt;br /&gt;
 masque_orange = cv2.inRange(image_hsv, orange_min, orange_max)&lt;br /&gt;
 masque_rose = cv2.inRange(image_hsv, rose_min, rose_max)&lt;br /&gt;
 masque_rouge = masque_rose | masque_orange&lt;br /&gt;
 kernal = np.ones((5, 5), &amp;quot;uint8&amp;quot;)&lt;br /&gt;
 masque_rouge = cv2.dilate(masque_rouge, kernal)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 contour, hierarchy = cv2.findContours(masque_rouge, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)       # cv2.RETR_EXTERNAL   ou   cv2.RETR_TREE&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 num_cible = 1&lt;br /&gt;
 for pic, contour in enumerate (contour):&lt;br /&gt;
     aire = cv2.contourArea(contour)&lt;br /&gt;
     if (aire &amp;gt; 5000):&lt;br /&gt;
              &lt;br /&gt;
        x, y, l, h = cv2.boundingRect(contour)&lt;br /&gt;
        x_image = x&lt;br /&gt;
        y_image = y   &lt;br /&gt;
        milieu =(x_image + (l // 2)), (y_image + (h //2 ))   &lt;br /&gt;
        verre = cv2.circle(image, (milieu), (l // 2), (0, 255, 0), 5)&lt;br /&gt;
        cv2.circle(image, (milieu) , 5, (255, 0, 0), -1)                     #point au milieu des rond      &lt;br /&gt;
        num_cible_str = str(num_cible)&lt;br /&gt;
        cv2.putText(image, (num_cible_str), (x_image, y_image),cv2.FONT_HERSHEY_SIMPLEX, 2.5,(255, 0, 0),6)     &lt;br /&gt;
        num_cible =  (num_cible + 1)&lt;br /&gt;
&lt;br /&gt;
 cv2.imshow(&amp;quot;camera&amp;quot;, image)&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
 if cv2.waitKey(10) &amp;amp; 0xFF == ord(&#039;q&#039;):&lt;br /&gt;
   camera.release()&lt;br /&gt;
   cv2.destroyAllWindows()&lt;br /&gt;
   break&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
====Lancer le programme====&lt;br /&gt;
: 1. &#039;&#039;&#039;S&#039;assurer d&#039;avoir enregistré les modifications en faisant &amp;lt;q&amp;gt;ctrl + S &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: 2. &#039;&#039;&#039;Lancer le Terminal&#039;&#039;&#039;&lt;br /&gt;
:[[File:Terminal.png|600px]]&lt;br /&gt;
&lt;br /&gt;
: 3. &#039;&#039;&#039;entrer la commande suivante: &amp;lt;q&amp;gt; python3 exemple.py &amp;lt;/q&amp;gt; &#039;&#039;&#039;&lt;br /&gt;
:: *Remplacer &amp;lt;q&amp;gt;exemple&amp;lt;/q&amp;gt; par le nom du fichier bloc-notes choisis a l&#039;étape 2 de la section programmation python.&lt;br /&gt;
: 4. &#039;&#039;&#039;Pour arrêter le programme et fermer l&#039;image, appuyez sur la touche &amp;lt;q&amp;gt;Q &amp;lt;/q&amp;gt; de votre clavier. &#039;&#039;&#039;&lt;br /&gt;
::Si cela ne fonctionne pas, vous pouvez forcer le programme à s&#039;arrêter en faisans &amp;lt;q&amp;gt;ctrl + C &amp;lt;/q&amp;gt; dans le terminal.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=====fonctionnement du programme=====&lt;br /&gt;
&lt;br /&gt;
:Voici un logigramme expliquant les grandes étapes du programme:&lt;br /&gt;
:[[File:logi_num.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;lien entre le code et le logigrame:&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 1. [[File:librairie.png|150px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 2. [[File:cap_camera.png|550px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 3. [[File:bgr2hsv.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 4. [[File:masque.png|550px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 5. [[File:contour.png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 6. [[File:aire.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 7. [[File:cercle.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 8. [[File:afiche_image.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
======Application du projet au cégep======&lt;br /&gt;
&lt;br /&gt;
:La détection de couleur dans une image en direct peut servir a faire des projets de robotique au cégep.&lt;br /&gt;
:Bien que la prog ci-dessus seule ne peut rien faire, c&#039;est la base de plusieurs projets.&lt;br /&gt;
&lt;br /&gt;
:Nous pouvons par exemple, trier des cibles par couleur, calculer la position d&#039;une cible, etc.&lt;br /&gt;
:Avec une bonne maitrise de la programmation en texte vous pouvez utiliser ce projet avec les robots 6 axes ou les tables de positionnement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Ce qui a déjà été réalisé&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
1:&lt;br /&gt;
:En 2025, ce projet a été utilisé avec les robots ABB 6 axes.&lt;br /&gt;
:Une webcam a été installée sur la tête du robot.&lt;br /&gt;
:Le robot pouvais récupérer un verre rouge placé n&#039;importe où sur la table.&lt;br /&gt;
:La programmation python voyais la cible, calculait sa position et envoyais la position au au robot.&lt;br /&gt;
:Le robot ramassait alors le verre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2:&lt;br /&gt;
:Un second projet a été réalisé avec ce programme.&lt;br /&gt;
:3 zones étaient dessinés sur une feuille collée sur la table.&lt;br /&gt;
:Nous placions des verres de couleur dans ces zones (vert, rouge, bleu).&lt;br /&gt;
:Le robot allait chercher la couleur qu&#039;on lui demande.&lt;br /&gt;
:Exemple: si il y avait un verre bleu dans la zone 1, un rouge dans la zone 2 et un vert dans la zone3&lt;br /&gt;
: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.&lt;br /&gt;
:Ce projet est plus simple que le no.1, car nous n&#039;avons pas besoin de calculer la position des verres dans la programmation python.&lt;br /&gt;
:Les zones sont des robtarget fixe dans le robot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
======Dépannage======&lt;br /&gt;
&lt;br /&gt;
:Il est probable que en collant le code dans votre bloc-notes il ne se colle pas comme il le devrait.&lt;br /&gt;
:En programmation python, L&#039;indentation est très importante.&lt;br /&gt;
:L&#039;indentation c&#039;est les espaces avant le début d&#039;une ligne.&lt;br /&gt;
:Chaque ligne doit débuter à la même place que la dernière.&lt;br /&gt;
:si vous avez une erreur il se peut que vous devrez ajouter ou enlever un espace au début d&#039;une ligne.&lt;br /&gt;
:Attention, dans certains cas (dans une boucle while, for, if, etc.) il est normal que le code a l&#039;intérieur de la boucle soit indenté.&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=149</id>
		<title>Vision robotique</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=149"/>
		<updated>2026-02-02T20:47:02Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation du projet==&lt;br /&gt;
:Le projet de vision robotique utilise la librairie open cv en python pour détecter des cibles dans une image.&lt;br /&gt;
:Au cégep nous utilisons des verres rouges sur fond gris (table tournante) comme cible.&lt;br /&gt;
:Comme les verres ont tous la même couleur, il est simple de les identifier dans l&#039;image en utilisant la fonction de détection de couleur de open cv.&lt;br /&gt;
:Pour réaliser ce projet, nous avons besoin d&#039;un ordinateur en linux avec webcam intégrée. &lt;br /&gt;
:Ce projet a été développé par Raphaël Bouchard en 2025. le code d&#039;exemple a été écrit par celui-ci au cégep de Sorel Tracy.&lt;br /&gt;
:[[File:apercu_comp.jpeg|400px|Aperçu du résultat|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Éditer la programmation Python===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; 1. ouvrir le bloc note&#039;&#039;&#039;&lt;br /&gt;
:[[File:Bloc_note.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Enregistrer le projet et le nommer avec un nom terminant en &amp;lt;q&amp;gt;.py &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
: Le fichier sera donc enregistré en document contenant du code python&lt;br /&gt;
  [[File:save_as.png|700px]]&lt;br /&gt;
:[[File:nom_py.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Copier le code d&#039;exemple et le coller dans le bloc-notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import cv2&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
camera = cv2.VideoCapture(0)    # 0 = cam ordi / 2 = cam usb&lt;br /&gt;
&lt;br /&gt;
while (1):&lt;br /&gt;
 &lt;br /&gt;
 ret, image = camera.read()&lt;br /&gt;
 image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) &lt;br /&gt;
 rose_min = np.array([160, 80, 60], np.uint8)        # en HSV&lt;br /&gt;
 rose_max = np.array([179, 255, 255], np.uint8) &lt;br /&gt;
 orange_min = np.array([0,80, 60], np.uint8)        # en HSV&lt;br /&gt;
 orange_max = np.array([15, 255, 255], np.uint8) &lt;br /&gt;
 masque_orange = cv2.inRange(image_hsv, orange_min, orange_max)&lt;br /&gt;
 masque_rose = cv2.inRange(image_hsv, rose_min, rose_max)&lt;br /&gt;
 masque_rouge = masque_rose | masque_orange&lt;br /&gt;
 kernal = np.ones((5, 5), &amp;quot;uint8&amp;quot;)&lt;br /&gt;
 masque_rouge = cv2.dilate(masque_rouge, kernal)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 contour, hierarchy = cv2.findContours(masque_rouge, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)       # cv2.RETR_EXTERNAL   ou   cv2.RETR_TREE&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 num_cible = 1&lt;br /&gt;
 for pic, contour in enumerate (contour):&lt;br /&gt;
     aire = cv2.contourArea(contour)&lt;br /&gt;
     if (aire &amp;gt; 5000):&lt;br /&gt;
              &lt;br /&gt;
        x, y, l, h = cv2.boundingRect(contour)&lt;br /&gt;
        x_image = x&lt;br /&gt;
        y_image = y   &lt;br /&gt;
        milieu =(x_image + (l // 2)), (y_image + (h //2 ))   &lt;br /&gt;
        verre = cv2.circle(image, (milieu), (l // 2), (0, 255, 0), 5)&lt;br /&gt;
        cv2.circle(image, (milieu) , 5, (255, 0, 0), -1)                     #point au milieu des rond      &lt;br /&gt;
        num_cible_str = str(num_cible)&lt;br /&gt;
        cv2.putText(image, (num_cible_str), (x_image, y_image),cv2.FONT_HERSHEY_SIMPLEX, 2.5,(255, 0, 0),6)     &lt;br /&gt;
        num_cible =  (num_cible + 1)&lt;br /&gt;
&lt;br /&gt;
 cv2.imshow(&amp;quot;camera&amp;quot;, image)&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
 if cv2.waitKey(10) &amp;amp; 0xFF == ord(&#039;q&#039;):&lt;br /&gt;
   camera.release()&lt;br /&gt;
   cv2.destroyAllWindows()&lt;br /&gt;
   break&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
====Lancer le programme====&lt;br /&gt;
: 1. &#039;&#039;&#039;S&#039;assurer d&#039;avoir enregistré les modifications en faisant &amp;lt;q&amp;gt;ctrl + S &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: 2. &#039;&#039;&#039;Lancer le Terminal&#039;&#039;&#039;&lt;br /&gt;
:[[File:Terminal.png|600px]]&lt;br /&gt;
&lt;br /&gt;
: 3. &#039;&#039;&#039;entrer la commande suivante: &amp;lt;q&amp;gt; python3 exemple.py &amp;lt;/q&amp;gt; &#039;&#039;&#039;&lt;br /&gt;
:: *Remplacer &amp;lt;q&amp;gt;exemple&amp;lt;/q&amp;gt; par le nom du fichier bloc-notes choisis a l&#039;étape 2 de la section programmation python.&lt;br /&gt;
: 4. &#039;&#039;&#039;Pour arrêter le programme et fermer l&#039;image, appuyez sur la touche &amp;lt;q&amp;gt;Q &amp;lt;/q&amp;gt; de votre clavier. &#039;&#039;&#039;&lt;br /&gt;
::Si cela ne fonctionne pas, vous pouvez forcer le programme à s&#039;arrêter en faisans &amp;lt;q&amp;gt;ctrl + C &amp;lt;/q&amp;gt; dans le terminal.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=====fonctionnement du programme=====&lt;br /&gt;
&lt;br /&gt;
:Voici un logigramme expliquant les grandes étapes du programme:&lt;br /&gt;
:[[File:logi_num.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;lien entre le code et le logigrame:&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 1. [[File:librairie.png|150px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 2. [[File:cap_camera.png|550px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 3. [[File:bgr2hsv.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 4. [[File:masque.png|550px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 5. [[File:contour.png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 6. [[File:aire.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 7. [[File:cercle.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 8. [[File:afiche_image.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
======Application du projet au cégep======&lt;br /&gt;
&lt;br /&gt;
:La détection de couleur dans une image en direct peut servir a faire des projets de robotique au cégep.&lt;br /&gt;
:Bien que la prog ci-dessus seule ne peut rien faire, c&#039;est la base de plusieurs projets.&lt;br /&gt;
&lt;br /&gt;
:Nous pouvons par exemple, trier des cibles par couleur, calculer la position d&#039;une cible, etc.&lt;br /&gt;
:Avec une bonne maitrise de la programmation en texte vous pouvez utiliser ce projet avec les robots 6 axes ou les tables de positionnement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Ce qui a déjà été réalisé&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
1:&lt;br /&gt;
:En 2025, ce projet a été utilisé avec les robots ABB 6 axes.&lt;br /&gt;
:Une webcam a été installée sur la tête du robot.&lt;br /&gt;
:Le robot pouvais récupérer un verre rouge placé n&#039;importe où sur la table.&lt;br /&gt;
:La programmation python voyais la cible, calculait sa position et envoyais la position au au robot.&lt;br /&gt;
:Le robot ramassait alors le verre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2:&lt;br /&gt;
:Un second projet a été réalisé avec ce programme.&lt;br /&gt;
:3 zones étaient dessinés sur une feuille collée sur la table.&lt;br /&gt;
:Nous placions des verres de couleur dans ces zones (vert, rouge, bleu).&lt;br /&gt;
:Le robot allait chercher la couleur qu&#039;on lui demande.&lt;br /&gt;
:Exemple: si il y avait un verre bleu dans la zone 1, un rouge dans la zone 2 et un vert dans la zone3&lt;br /&gt;
: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.&lt;br /&gt;
:Ce projet est plus simple que le no.1, car nous n&#039;avons pas besoin de calculer la position des verres dans la programation python.&lt;br /&gt;
:Les zones sont des robtarget fixe dans le robot.&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=139</id>
		<title>Vision robotique</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=139"/>
		<updated>2026-02-02T20:05:39Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation du projet==&lt;br /&gt;
:Le projet de vision robotique utilise la librairie open cv en python pour détecter des cibles dans une image.&lt;br /&gt;
:Au cégep nous utilisons des verres rouges sur fond gris (table tournante) comme cible.&lt;br /&gt;
:Comme les verres ont tous la même couleur, il est simple de les identifier dans l&#039;image en utilisant la fonction de détection de couleur de open cv.&lt;br /&gt;
:Pour réaliser ce projet, nous avons besoin d&#039;un ordinateur en linux avec webcam intégrée. &lt;br /&gt;
:Ce projet a été développé par Raphaël Bouchard en 2025. le code d&#039;exemple a été écrit par celui-ci au cégep de Sorel Tracy.&lt;br /&gt;
:[[File:apercu_comp.jpeg|400px|Aperçu du résultat|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===Éditer la programmation Python===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; 1. ouvrir le bloc note&#039;&#039;&#039;&lt;br /&gt;
:[[File:Bloc_note.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Enregistrer le projet et le nommer avec un nom terminant en &amp;lt;q&amp;gt;.py &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
: Le fichier sera donc enregistré en document contenant du code python&lt;br /&gt;
  [[File:save_as.png|700px]]&lt;br /&gt;
:[[File:nom_py.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Copier le code d&#039;exemple et le coller dans le bloc-notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import cv2&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
camera = cv2.VideoCapture(0)    # 0 = cam ordi / 2 = cam usb&lt;br /&gt;
&lt;br /&gt;
while (1):&lt;br /&gt;
 &lt;br /&gt;
 ret, image = camera.read()&lt;br /&gt;
 image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) &lt;br /&gt;
 rose_min = np.array([160, 80, 60], np.uint8)        # en HSV&lt;br /&gt;
 rose_max = np.array([179, 255, 255], np.uint8) &lt;br /&gt;
 orange_min = np.array([0,80, 60], np.uint8)        # en HSV&lt;br /&gt;
 orange_max = np.array([15, 255, 255], np.uint8) &lt;br /&gt;
 masque_orange = cv2.inRange(image_hsv, orange_min, orange_max)&lt;br /&gt;
 masque_rose = cv2.inRange(image_hsv, rose_min, rose_max)&lt;br /&gt;
 masque_rouge = masque_rose | masque_orange&lt;br /&gt;
 kernal = np.ones((5, 5), &amp;quot;uint8&amp;quot;)&lt;br /&gt;
 masque_rouge = cv2.dilate(masque_rouge, kernal)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 contour, hierarchy = cv2.findContours(masque_rouge, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)       # cv2.RETR_EXTERNAL   ou   cv2.RETR_TREE&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 num_cible = 1&lt;br /&gt;
 for pic, contour in enumerate (contour):&lt;br /&gt;
     aire = cv2.contourArea(contour)&lt;br /&gt;
     if (aire &amp;gt; 5000):&lt;br /&gt;
              &lt;br /&gt;
        x, y, l, h = cv2.boundingRect(contour)&lt;br /&gt;
        x_image = x&lt;br /&gt;
        y_image = y   &lt;br /&gt;
        milieu =(x_image + (l // 2)), (y_image + (h //2 ))   &lt;br /&gt;
        verre = cv2.circle(image, (milieu), (l // 2), (0, 255, 0), 5)&lt;br /&gt;
        cv2.circle(image, (milieu) , 5, (255, 0, 0), -1)                     #point au milieu des rond      &lt;br /&gt;
        num_cible_str = str(num_cible)&lt;br /&gt;
        cv2.putText(image, (num_cible_str), (x_image, y_image),cv2.FONT_HERSHEY_SIMPLEX, 2.5,(255, 0, 0),6)     &lt;br /&gt;
        num_cible =  (num_cible + 1)&lt;br /&gt;
&lt;br /&gt;
 cv2.imshow(&amp;quot;camera&amp;quot;, image)&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
 if cv2.waitKey(10) &amp;amp; 0xFF == ord(&#039;q&#039;):&lt;br /&gt;
   camera.release()&lt;br /&gt;
   cv2.destroyAllWindows()&lt;br /&gt;
   break&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
====Lancer le programme====&lt;br /&gt;
: 1. &#039;&#039;&#039;S&#039;assurer d&#039;avoir enregistré les modifications en faisant &amp;lt;q&amp;gt;ctrl + S &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: 2. &#039;&#039;&#039;Lancer le Terminal&#039;&#039;&#039;&lt;br /&gt;
:[[File:Terminal.png|600px]]&lt;br /&gt;
&lt;br /&gt;
: 3. &#039;&#039;&#039;entrer la commande suivante: &amp;lt;q&amp;gt; python3 exemple.py &amp;lt;/q&amp;gt; &#039;&#039;&#039;&lt;br /&gt;
:: *Remplacer &amp;lt;q&amp;gt;exemple&amp;lt;/q&amp;gt; par le nom du fichier bloc-notes choisis a l&#039;étape 2 de la section programmation python.&lt;br /&gt;
: 4. &#039;&#039;&#039;Pour arrêter le programme et fermer l&#039;image, appuyez sur la touche &amp;lt;q&amp;gt;Q &amp;lt;/q&amp;gt; de votre clavier. &#039;&#039;&#039;&lt;br /&gt;
::Si cela ne fonctionne pas, vous pouvez forcer le programme à s&#039;arrêter en faisans &amp;lt;q&amp;gt;ctrl + C &amp;lt;/q&amp;gt; dans le terminal.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=====fonctionnement du programme=====&lt;br /&gt;
&lt;br /&gt;
:Voici un logigramme expliquant les grandes étapes du programme:&lt;br /&gt;
:[[File:logi_num.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;lien entre le code et le logigrame:&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 1. [[File:librairie.png|150px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 2. [[File:cap_camera.png|550px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 3. [[File:bgr2hsv.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 4. [[File:masque.png|550px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 5. [[File:contour.png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 6. [[File:aire.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 7. [[File:cercle.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 8. [[File:afiche_image.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
======Application du projet au cégep======&lt;br /&gt;
&lt;br /&gt;
:La détection de couleur dans une image en direct peut servir a faire des projets de robotique au cégep.&lt;br /&gt;
:Bien que la prog ci-dessus seule ne peut rien faire, c&#039;est la base de plusieurs projets.&lt;br /&gt;
&lt;br /&gt;
:Nous pouvons par exemple, trier des cibles par couleur, calculer la position d&#039;une cible, etc.&lt;br /&gt;
:Avec une bonne maitrise de la programmation en texte vous pouvez utiliser ce projet avec les robots 6 axes ou les tables de positionnement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Ce qui a déjà été réalisé&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
:En 2025, ce projet a été utilisé avec les robots ABB 6 axes.&lt;br /&gt;
:Une webcam a été installée sur la tête du robot.&lt;br /&gt;
:Le robot pouvais récupérer un verre rouge placé n&#039;importe où sur la table.&lt;br /&gt;
:La programmation python voyais la cible, calculait sa position et envoyais la position au au robot.&lt;br /&gt;
:Le robot ramassait alors le verre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2&lt;br /&gt;
:Un second projet a été réalisé avec ce programme.&lt;br /&gt;
:3 zones étaient dessinés sur une feuille collée sur la table.&lt;br /&gt;
:Nous placions des verres de couleur dans ces zones (vert, rouge, bleu).&lt;br /&gt;
:Le robot allait chercher la couleur qu&#039;on lui demande.&lt;br /&gt;
:Exemple: si il y avait un verre bleu dans la zone 1, un rouge dans la zone 2 et un vert dans la zone3&lt;br /&gt;
: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.&lt;br /&gt;
:Ce projet est plus simple que le no.1, car nous n&#039;avons pas besoin de calculer la position des verres dans la programation python.&lt;br /&gt;
:Les zones sont des robtarget fixe dans le robot.&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=120</id>
		<title>Vision robotique</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=120"/>
		<updated>2026-01-30T15:02:45Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation du projet==&lt;br /&gt;
:Le projet de vision robotique utilise la librairie open cv en python pour détecter des cibles dans une image.&lt;br /&gt;
:Au cégep nous utilisons des verres rouges sur fond gris (table tournante) comme cible.&lt;br /&gt;
:Comme les verres ont tous la même couleur, il est simple de les identifier dans l&#039;image en utilisant la fonction de détection de couleur de open cv.&lt;br /&gt;
:Pour réaliser ce projet, nous avons besoin d&#039;un ordinateur en linux avec webcam intégrée. &lt;br /&gt;
:Ce projet a été développé par Raphaël Bouchard en 2025. le code d&#039;exemple a été écrit par celui-ci au cégep de Sorel Tracy.&lt;br /&gt;
:[[File:apercu_comp.jpeg|400px|Aperçu du résultat|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===&#039;&#039;&#039;Programmation Python&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; 1. ouvrir le bloc note&#039;&#039;&#039;&lt;br /&gt;
:[[File:Bloc_note.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Enregistrer le projet et le nommer avec un nom terminant en &amp;lt;q&amp;gt;.py &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
: Le fichier sera donc enregistré en document contenant du code python&lt;br /&gt;
  [[File:save_as.png|700px]]&lt;br /&gt;
:[[File:nom_py.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Copier le code d&#039;exemple et le coller dans le bloc-notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import cv2&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
camera = cv2.VideoCapture(0)    # 0 = cam ordi / 2 = cam usb&lt;br /&gt;
&lt;br /&gt;
while (1):&lt;br /&gt;
 &lt;br /&gt;
 ret, image = camera.read()&lt;br /&gt;
 image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) &lt;br /&gt;
 rose_min = np.array([160, 80, 60], np.uint8)        # en HSV&lt;br /&gt;
 rose_max = np.array([179, 255, 255], np.uint8) &lt;br /&gt;
 orange_min = np.array([0,80, 60], np.uint8)        # en HSV&lt;br /&gt;
 orange_max = np.array([15, 255, 255], np.uint8) &lt;br /&gt;
 masque_orange = cv2.inRange(image_hsv, orange_min, orange_max)&lt;br /&gt;
 masque_rose = cv2.inRange(image_hsv, rose_min, rose_max)&lt;br /&gt;
 masque_rouge = masque_rose | masque_orange&lt;br /&gt;
 kernal = np.ones((5, 5), &amp;quot;uint8&amp;quot;)&lt;br /&gt;
 masque_rouge = cv2.dilate(masque_rouge, kernal)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 contour, hierarchy = cv2.findContours(masque_rouge, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)       # cv2.RETR_EXTERNAL   ou   cv2.RETR_TREE&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 num_cible = 1&lt;br /&gt;
 for pic, contour in enumerate (contour):&lt;br /&gt;
     aire = cv2.contourArea(contour)&lt;br /&gt;
     if (aire &amp;gt; 5000):&lt;br /&gt;
              &lt;br /&gt;
        x, y, l, h = cv2.boundingRect(contour)&lt;br /&gt;
        x_image = x&lt;br /&gt;
        y_image = y   &lt;br /&gt;
        milieu =(x_image + (l // 2)), (y_image + (h //2 ))   &lt;br /&gt;
        verre = cv2.circle(image, (milieu), (l // 2), (0, 255, 0), 5)&lt;br /&gt;
        cv2.circle(image, (milieu) , 5, (255, 0, 0), -1)                     #point au milieu des rond      &lt;br /&gt;
        num_cible_str = str(num_cible)&lt;br /&gt;
        cv2.putText(image, (num_cible_str), (x_image, y_image),cv2.FONT_HERSHEY_SIMPLEX, 2.5,(255, 0, 0),6)     &lt;br /&gt;
        num_cible =  (num_cible + 1)&lt;br /&gt;
&lt;br /&gt;
 cv2.imshow(&amp;quot;camera&amp;quot;, image)&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
 if cv2.waitKey(10) &amp;amp; 0xFF == ord(&#039;q&#039;):&lt;br /&gt;
   camera.release()&lt;br /&gt;
   cv2.destroyAllWindows()&lt;br /&gt;
   break&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
====&#039;&#039;&#039;Lancer le programme&#039;&#039;&#039;====&lt;br /&gt;
: 1. &#039;&#039;&#039;S&#039;assurer d&#039;avoir enregistré les modifications en faisant &amp;lt;q&amp;gt;ctrl + S &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: 2. &#039;&#039;&#039;Lancer le Terminal&#039;&#039;&#039;&lt;br /&gt;
:[[File:Terminal.png|600px]]&lt;br /&gt;
&lt;br /&gt;
: 3. &#039;&#039;&#039;entrer la commande suivante: &amp;lt;q&amp;gt; python3 exemple.py &amp;lt;/q&amp;gt; &#039;&#039;&#039;&lt;br /&gt;
:: *Remplacer &amp;lt;q&amp;gt;exemple&amp;lt;/q&amp;gt; par le nom du fichier bloc-notes choisis a l&#039;étape 2 de la section programmation python.&lt;br /&gt;
: 4. &#039;&#039;&#039;Pour arrêter le programme et fermer l&#039;image, appuyez sur la touche &amp;lt;q&amp;gt;Q &amp;lt;/q&amp;gt; de votre clavier. &#039;&#039;&#039;&lt;br /&gt;
::Si cela ne fonctionne pas, vous pouvez forcer le programme à s&#039;arrêter en faisans &amp;lt;q&amp;gt;ctrl + C &amp;lt;/q&amp;gt; dans le terminal.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
=====&#039;&#039;&#039;fonctionnement du programme&#039;&#039;&#039;=====&lt;br /&gt;
&lt;br /&gt;
:Voici un logigramme expliquant les grandes étapes du programme:&lt;br /&gt;
:[[File:logi_num.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: &#039;&#039;&#039;lien entre le code et le logigrame:&#039;&#039;&#039;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 1. [[File:librairie.png|150px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 2. [[File:cap_camera.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 3. [[File:bgr2hsv.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 4. [[File:masque.png|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 5. [[File:contour.png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 6. [[File:aire.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 7. [[File:cercle.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
: 8. [[File:afiche_image.png|300px]]&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Afiche_image.png&amp;diff=119</id>
		<title>Fichier:Afiche image.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Afiche_image.png&amp;diff=119"/>
		<updated>2026-01-30T14:54:58Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Cercle.png&amp;diff=118</id>
		<title>Fichier:Cercle.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Cercle.png&amp;diff=118"/>
		<updated>2026-01-30T14:54:51Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Aire.png&amp;diff=117</id>
		<title>Fichier:Aire.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Aire.png&amp;diff=117"/>
		<updated>2026-01-30T14:54:33Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Contour.png&amp;diff=116</id>
		<title>Fichier:Contour.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Contour.png&amp;diff=116"/>
		<updated>2026-01-30T14:54:24Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Masque.png&amp;diff=115</id>
		<title>Fichier:Masque.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Masque.png&amp;diff=115"/>
		<updated>2026-01-30T14:54:12Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Bgr2hsv.png&amp;diff=114</id>
		<title>Fichier:Bgr2hsv.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Bgr2hsv.png&amp;diff=114"/>
		<updated>2026-01-30T14:53:59Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Cap_camera.png&amp;diff=113</id>
		<title>Fichier:Cap camera.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Cap_camera.png&amp;diff=113"/>
		<updated>2026-01-30T14:53:48Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Librairie.png&amp;diff=112</id>
		<title>Fichier:Librairie.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Librairie.png&amp;diff=112"/>
		<updated>2026-01-30T14:53:26Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Logi_num.png&amp;diff=111</id>
		<title>Fichier:Logi num.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Logi_num.png&amp;diff=111"/>
		<updated>2026-01-30T14:48:25Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=110</id>
		<title>Vision robotique</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=110"/>
		<updated>2026-01-30T14:33:23Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation du projet==&lt;br /&gt;
:Le projet de vision robotique utilise la librairie open cv en python pour détecter des cibles dans une image.&lt;br /&gt;
:Au cégep nous utilisons des verres rouges sur fond gris (table tournante) comme cible.&lt;br /&gt;
:Comme les verres ont tous la même couleur, il est simple de les identifier dans l&#039;image en utilisant la fonction de détection de couleur de open cv.&lt;br /&gt;
:Pour réaliser ce projet, nous avons besoin d&#039;un ordinateur en linux avec webcam intégrée. &lt;br /&gt;
:Ce projet a été développé par Raphaël Bouchard en 2025. le code d&#039;exemple a été écrit par celui-ci au cégep de Sorel Tracy.&lt;br /&gt;
:[[File:apercu_comp.jpeg|400px|Aperçu du résultat|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===&#039;&#039;&#039;Programmation Python&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; 1. ouvrir le bloc note&#039;&#039;&#039;&lt;br /&gt;
:[[File:Bloc_note.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Enregistrer le projet et le nommer avec un nom terminant en &amp;lt;q&amp;gt;.py &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
: Le fichier sera donc enregistré en document contenant du code python&lt;br /&gt;
  [[File:save_as.png|700px]]&lt;br /&gt;
:[[File:nom_py.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Copier le code d&#039;exemple et le coller dans le bloc-notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import cv2&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
camera = cv2.VideoCapture(0)    # 0 = cam ordi / 2 = cam usb&lt;br /&gt;
&lt;br /&gt;
while (1):&lt;br /&gt;
 &lt;br /&gt;
 ret, image = camera.read()&lt;br /&gt;
 image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) &lt;br /&gt;
 rose_min = np.array([160, 80, 60], np.uint8)        # en HSV&lt;br /&gt;
 rose_max = np.array([179, 255, 255], np.uint8) &lt;br /&gt;
 orange_min = np.array([0,80, 60], np.uint8)        # en HSV&lt;br /&gt;
 orange_max = np.array([15, 255, 255], np.uint8) &lt;br /&gt;
 masque_orange = cv2.inRange(image_hsv, orange_min, orange_max)&lt;br /&gt;
 masque_rose = cv2.inRange(image_hsv, rose_min, rose_max)&lt;br /&gt;
 masque_rouge = masque_rose | masque_orange&lt;br /&gt;
 kernal = np.ones((5, 5), &amp;quot;uint8&amp;quot;)&lt;br /&gt;
 masque_rouge = cv2.dilate(masque_rouge, kernal)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 contour, hierarchy = cv2.findContours(masque_rouge, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)       # cv2.RETR_EXTERNAL   ou   cv2.RETR_TREE&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 num_cible = 1&lt;br /&gt;
 for pic, contour in enumerate (contour):&lt;br /&gt;
     aire = cv2.contourArea(contour)&lt;br /&gt;
     if (aire &amp;gt; 5000):&lt;br /&gt;
              &lt;br /&gt;
        x, y, l, h = cv2.boundingRect(contour)&lt;br /&gt;
        x_image = x&lt;br /&gt;
        y_image = y   &lt;br /&gt;
        milieu =(x_image + (l // 2)), (y_image + (h //2 ))   &lt;br /&gt;
        verre = cv2.circle(image, (milieu), (l // 2), (0, 255, 0), 5)&lt;br /&gt;
        cv2.circle(image, (milieu) , 5, (255, 0, 0), -1)                     #point au milieu des rond      &lt;br /&gt;
        num_cible_str = str(num_cible)&lt;br /&gt;
        cv2.putText(image, (num_cible_str), (x_image, y_image),cv2.FONT_HERSHEY_SIMPLEX, 2.5,(255, 0, 0),6)     &lt;br /&gt;
        num_cible =  (num_cible + 1)&lt;br /&gt;
&lt;br /&gt;
 cv2.imshow(&amp;quot;camera&amp;quot;, image)&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
 if cv2.waitKey(10) &amp;amp; 0xFF == ord(&#039;q&#039;):&lt;br /&gt;
   camera.release()&lt;br /&gt;
   cv2.destroyAllWindows()&lt;br /&gt;
   break&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
====&#039;&#039;&#039;Lancer le programme&#039;&#039;&#039;====&lt;br /&gt;
: 1. &#039;&#039;&#039;S&#039;assurer d&#039;avoir enregistré les modifications en faisant &amp;lt;q&amp;gt;ctrl + S &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: 2. &#039;&#039;&#039;Lancer le Terminal&#039;&#039;&#039;&lt;br /&gt;
:[[File:Terminal.png|600px]]&lt;br /&gt;
&lt;br /&gt;
: 3. &#039;&#039;&#039;entrer la commande suivante: &amp;lt;q&amp;gt; python3 exemple.py &amp;lt;/q&amp;gt; &#039;&#039;&#039;&lt;br /&gt;
:: *Remplacer &amp;lt;q&amp;gt;exemple&amp;lt;/q&amp;gt; par le nom du fichier bloc-notes choisis a l&#039;étape 2 de la section programmation python.&lt;br /&gt;
: 4. &#039;&#039;&#039;Pour arrêter le programme et fermer l&#039;image, appuyez sur la touche &amp;lt;q&amp;gt;Q &amp;lt;/q&amp;gt; de votre clavier. &#039;&#039;&#039;&lt;br /&gt;
::Si cela ne fonctionne pas, vous pouvez forcer le programme à s&#039;arrêter en faisans &amp;lt;q&amp;gt;ctrl + C &amp;lt;/q&amp;gt; dans le terminal.&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=109</id>
		<title>Vision robotique</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=109"/>
		<updated>2026-01-30T14:32:57Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation du projet==&lt;br /&gt;
:Le projet de vision robotique utilise la librairie open cv en python pour détecter des cibles dans une image.&lt;br /&gt;
:Au cégep nous utilisons des verres rouges sur fond gris (table tournante) comme cible.&lt;br /&gt;
:Comme les verres ont tous la même couleur, il est simple de les identifier dans l&#039;image en utilisant la fonction de détection de couleur de open cv.&lt;br /&gt;
:Pour réaliser ce projet, nous avons besoin d&#039;un ordinateur en linux avec webcam intégrée. &lt;br /&gt;
:Ce projet a été développé par Raphaël Bouchard en 2025. le code d&#039;exemple a été écrit par celui-ci au cégep de Sorel Tracy.&lt;br /&gt;
:[[File:apercu_comp.jpeg|400px|Aperçu du résultat|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===&#039;&#039;&#039;Programmation Python&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; 1. ouvrir le bloc note&#039;&#039;&#039;&lt;br /&gt;
:[[File:Bloc_note.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Enregistrer le projet et le nommer avec un nom terminant en &amp;lt;q&amp;gt;.py &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
: Le fichier sera donc enregistré en document contenant du code python&lt;br /&gt;
  [[File:save_as.png|700px]]&lt;br /&gt;
:[[File:nom_py.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Copier le code d&#039;exemple et le coller dans le bloc-notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import cv2&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
camera = cv2.VideoCapture(0)    # 0 = cam ordi / 2 = cam usb&lt;br /&gt;
&lt;br /&gt;
while (1):&lt;br /&gt;
 &lt;br /&gt;
 ret, image = camera.read()&lt;br /&gt;
 image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)&lt;br /&gt;
 #rouge_min = np.array([110, 180, 140], np.uint8)        # en HSV&lt;br /&gt;
 #rouge_max = np.array([190, 255, 255], np.uint8) &lt;br /&gt;
 rose_min = np.array([160, 80, 60], np.uint8)        # en HSV&lt;br /&gt;
 rose_max = np.array([179, 255, 255], np.uint8) &lt;br /&gt;
 orange_min = np.array([0,80, 60], np.uint8)        # en HSV&lt;br /&gt;
 orange_max = np.array([15, 255, 255], np.uint8) &lt;br /&gt;
 masque_orange = cv2.inRange(image_hsv, orange_min, orange_max)&lt;br /&gt;
 masque_rose = cv2.inRange(image_hsv, rose_min, rose_max)&lt;br /&gt;
 masque_rouge = masque_rose | masque_orange&lt;br /&gt;
 kernal = np.ones((5, 5), &amp;quot;uint8&amp;quot;)&lt;br /&gt;
 masque_rouge = cv2.dilate(masque_rouge, kernal)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 contour, hierarchy = cv2.findContours(masque_rouge, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)       # cv2.RETR_EXTERNAL   ou   cv2.RETR_TREE&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 num_cible = 1&lt;br /&gt;
 for pic, contour in enumerate (contour):&lt;br /&gt;
     aire = cv2.contourArea(contour)&lt;br /&gt;
     if (aire &amp;gt; 5000):&lt;br /&gt;
              &lt;br /&gt;
        x, y, l, h = cv2.boundingRect(contour)&lt;br /&gt;
        x_image = x&lt;br /&gt;
        y_image = y   &lt;br /&gt;
        milieu =(x_image + (l // 2)), (y_image + (h //2 ))   &lt;br /&gt;
        verre = cv2.circle(image, (milieu), (l // 2), (0, 255, 0), 5)&lt;br /&gt;
        cv2.circle(image, (milieu) , 5, (255, 0, 0), -1)                     #point au milieu des rond      &lt;br /&gt;
        num_cible_str = str(num_cible)&lt;br /&gt;
        cv2.putText(image, (num_cible_str), (x_image, y_image),cv2.FONT_HERSHEY_SIMPLEX, 2.5,(255, 0, 0),6)     &lt;br /&gt;
        num_cible =  (num_cible + 1)&lt;br /&gt;
&lt;br /&gt;
 cv2.imshow(&amp;quot;camera&amp;quot;, image)&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
 if cv2.waitKey(10) &amp;amp; 0xFF == ord(&#039;q&#039;):&lt;br /&gt;
   camera.release()&lt;br /&gt;
   cv2.destroyAllWindows()&lt;br /&gt;
   break&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
====&#039;&#039;&#039;Lancer le programme&#039;&#039;&#039;====&lt;br /&gt;
: 1. &#039;&#039;&#039;S&#039;assurer d&#039;avoir enregistré les modifications en faisant &amp;lt;q&amp;gt;ctrl + S &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: 2. &#039;&#039;&#039;Lancer le Terminal&#039;&#039;&#039;&lt;br /&gt;
:[[File:Terminal.png|600px]]&lt;br /&gt;
&lt;br /&gt;
: 3. &#039;&#039;&#039;entrer la commande suivante: &amp;lt;q&amp;gt; python3 exemple.py &amp;lt;/q&amp;gt; &#039;&#039;&#039;&lt;br /&gt;
:: *Remplacer &amp;lt;q&amp;gt;exemple&amp;lt;/q&amp;gt; par le nom du fichier bloc-notes choisis a l&#039;étape 2 de la section programmation python.&lt;br /&gt;
: 4. &#039;&#039;&#039;Pour arrêter le programme et fermer l&#039;image, appuyez sur la touche &amp;lt;q&amp;gt;Q &amp;lt;/q&amp;gt; de votre clavier. &#039;&#039;&#039;&lt;br /&gt;
::Si cela ne fonctionne pas, vous pouvez forcer le programme à s&#039;arrêter en faisans &amp;lt;q&amp;gt;ctrl + C &amp;lt;/q&amp;gt; dans le terminal.&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=95</id>
		<title>Vision robotique</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=95"/>
		<updated>2026-01-26T21:38:12Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation du projet==&lt;br /&gt;
:Le projet de vision robotique utilise la librairie open cv en python pour détecter des cibles dans une image.&lt;br /&gt;
:Au cégep nous utilisons des verres rouges sur fond gris (table tournante) comme cible.&lt;br /&gt;
:Comme les verres ont tous la même couleur, il est simple de les identifier dans l&#039;image en utilisant la fonction de détection de couleur de open cv.&lt;br /&gt;
:Pour réaliser ce projet, nous avons besoin d&#039;un ordinateur en linux avec webcam intégrée. &lt;br /&gt;
:Ce projet a été développé par Raphaël Bouchard en 2025. le code d&#039;exemple a été écrit par celui-ci au cégep de Sorel Tracy.&lt;br /&gt;
:[[File:apercu_comp.jpeg|400px|Aperçu du résultat|thumb|left]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===&#039;&#039;&#039;Programmation Python&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; 1. ouvrir le bloc note&#039;&#039;&#039;&lt;br /&gt;
:[[File:Bloc_note.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Enregistrer le projet et le nommer avec un nom terminant en &amp;lt;q&amp;gt;.py &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
: Le fichier sera donc enregistré en document contenant du code python&lt;br /&gt;
  [[File:save_as.png|700px]]&lt;br /&gt;
:[[File:nom_py.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Copier le code d&#039;exemple et le coller dans le bloc-notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import cv2&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
camera = cv2.VideoCapture(0)    # 0 = cam ordi / 2 = cam usb&lt;br /&gt;
&lt;br /&gt;
while (1):&lt;br /&gt;
 &lt;br /&gt;
 ret, image = camera.read()&lt;br /&gt;
 image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)&lt;br /&gt;
 #rouge_min = np.array([110, 180, 140], np.uint8)        # en HSV&lt;br /&gt;
 #rouge_max = np.array([190, 255, 255], np.uint8) &lt;br /&gt;
 rose_min = np.array([160, 80, 60], np.uint8)        # en HSV&lt;br /&gt;
 rose_max = np.array([179, 255, 255], np.uint8) &lt;br /&gt;
 orange_min = np.array([0,80, 60], np.uint8)        # en HSV&lt;br /&gt;
 orange_max = np.array([15, 255, 255], np.uint8) &lt;br /&gt;
 masque_orange = cv2.inRange(image_hsv, orange_min, orange_max)&lt;br /&gt;
 masque_rose = cv2.inRange(image_hsv, rose_min, rose_max)&lt;br /&gt;
 masque_rouge = masque_rose | masque_orange&lt;br /&gt;
 kernal = np.ones((5, 5), &amp;quot;uint8&amp;quot;)&lt;br /&gt;
 masque_rouge = cv2.dilate(masque_rouge, kernal)&lt;br /&gt;
 masque_et_image = cv2.bitwise_and(image, image, mask = masque_rouge)&lt;br /&gt;
 &lt;br /&gt;
 contour, hierarchy = cv2.findContours(masque_rouge, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)       # cv2.RETR_EXTERNAL   ou   cv2.RETR_TREE&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 num_cible = 1&lt;br /&gt;
 for pic, contour in enumerate (contour):&lt;br /&gt;
     aire = cv2.contourArea(contour)&lt;br /&gt;
     if (aire &amp;gt; 5000):&lt;br /&gt;
              &lt;br /&gt;
        x, y, l, h = cv2.boundingRect(contour)&lt;br /&gt;
        x_image = x&lt;br /&gt;
        y_image = y   &lt;br /&gt;
        milieu =(x_image + (l // 2)), (y_image + (h //2 ))   &lt;br /&gt;
        verre = cv2.circle(image, (milieu), (l // 2), (0, 255, 0), 5)&lt;br /&gt;
        cv2.circle(image, (milieu) , 5, (255, 0, 0), -1)                     #point au milieu des rond      &lt;br /&gt;
        num_cible_str = str(num_cible)&lt;br /&gt;
        cv2.putText(image, (num_cible_str), (x_image, y_image),cv2.FONT_HERSHEY_SIMPLEX, 2.5,(255, 0, 0),6)     &lt;br /&gt;
        num_cible =  (num_cible + 1)&lt;br /&gt;
&lt;br /&gt;
 cv2.imshow(&amp;quot;camera&amp;quot;, image)&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
 if cv2.waitKey(10) &amp;amp; 0xFF == ord(&#039;q&#039;):&lt;br /&gt;
   camera.release()&lt;br /&gt;
   cv2.destroyAllWindows()&lt;br /&gt;
   break&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
====&#039;&#039;&#039;Lancer le programme&#039;&#039;&#039;====&lt;br /&gt;
: 1. &#039;&#039;&#039;S&#039;assurer d&#039;avoir enregistré les modifications en faisant &amp;lt;q&amp;gt;ctrl + S &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: 2. &#039;&#039;&#039;Lancer le Terminal&#039;&#039;&#039;&lt;br /&gt;
:[[File:Terminal.png|600px]]&lt;br /&gt;
&lt;br /&gt;
: 3. &#039;&#039;&#039;entrer la commande suivante: &amp;lt;q&amp;gt; python3 exemple.py &amp;lt;/q&amp;gt; &#039;&#039;&#039;&lt;br /&gt;
:: *Remplacer &amp;lt;q&amp;gt;exemple&amp;lt;/q&amp;gt; par le nom du fichier bloc-notes choisis a l&#039;étape 2 de la section programmation python.&lt;br /&gt;
: 4. &#039;&#039;&#039;Pour arrêter le programme et fermer l&#039;image, appuyez sur la touche &amp;lt;q&amp;gt;Q &amp;lt;/q&amp;gt; de votre clavier. &#039;&#039;&#039;&lt;br /&gt;
::Si cela ne fonctionne pas, vous pouvez forcer le programme à s&#039;arrêter en faisans &amp;lt;q&amp;gt;ctrl + C &amp;lt;/q&amp;gt; dans le terminal.&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=94</id>
		<title>Vision robotique</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=94"/>
		<updated>2026-01-26T21:13:41Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation du projet==&lt;br /&gt;
:Le projet de vision robotique utilise la librairie open cv en python pour détecter des cibles dans une image.&lt;br /&gt;
:Au cégep nous utilisons des verres rouges sur fond gris (table tournante) comme cible.&lt;br /&gt;
:Comme les verres ont tous la même couleur, il est simple de les identifier dans l&#039;image en utilisant la fonction de détection de couleur de open cv.&lt;br /&gt;
:Pour réaliser ce projet, nous avons besoin d&#039;un ordinateur en linux avec webcam intégrée. &lt;br /&gt;
:Ce projet a été développé par Raphaël Bouchard en 2025. le code d&#039;exemple a été écrit par celui-ci au cégep de Sorel Tracy.&lt;br /&gt;
 [[File:apercu_comp.jpeg|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===&#039;&#039;&#039;Programmation Python&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; 1. ouvrir le bloc note&#039;&#039;&#039;&lt;br /&gt;
:[[File:Bloc_note.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Enregistrer le projet et le nommer avec un nom terminant en &amp;lt;q&amp;gt;.py &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
: Le fichier sera donc enregistré en document contenant du code python&lt;br /&gt;
  [[File:save_as.png|700px]]&lt;br /&gt;
:[[File:nom_py.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Copier le code d&#039;exemple et le coller dans le bloc-notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import cv2&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
camera = cv2.VideoCapture(0)    # 0 = cam ordi / 2 = cam usb&lt;br /&gt;
&lt;br /&gt;
while (1):&lt;br /&gt;
 &lt;br /&gt;
 ret, image = camera.read()&lt;br /&gt;
 image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)&lt;br /&gt;
 #rouge_min = np.array([110, 180, 140], np.uint8)        # en HSV&lt;br /&gt;
 #rouge_max = np.array([190, 255, 255], np.uint8) &lt;br /&gt;
 rose_min = np.array([160, 80, 60], np.uint8)        # en HSV&lt;br /&gt;
 rose_max = np.array([179, 255, 255], np.uint8) &lt;br /&gt;
 orange_min = np.array([0,80, 60], np.uint8)        # en HSV&lt;br /&gt;
 orange_max = np.array([15, 255, 255], np.uint8) &lt;br /&gt;
 masque_orange = cv2.inRange(image_hsv, orange_min, orange_max)&lt;br /&gt;
 masque_rose = cv2.inRange(image_hsv, rose_min, rose_max)&lt;br /&gt;
 masque_rouge = masque_rose | masque_orange&lt;br /&gt;
 kernal = np.ones((5, 5), &amp;quot;uint8&amp;quot;)&lt;br /&gt;
 masque_rouge = cv2.dilate(masque_rouge, kernal)&lt;br /&gt;
 masque_et_image = cv2.bitwise_and(image, image, mask = masque_rouge)&lt;br /&gt;
 &lt;br /&gt;
 contour, hierarchy = cv2.findContours(masque_rouge, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)       # cv2.RETR_EXTERNAL   ou   cv2.RETR_TREE&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 num_cible = 1&lt;br /&gt;
 for pic, contour in enumerate (contour):&lt;br /&gt;
     aire = cv2.contourArea(contour)&lt;br /&gt;
     if (aire &amp;gt; 5000):&lt;br /&gt;
              &lt;br /&gt;
        x, y, l, h = cv2.boundingRect(contour)&lt;br /&gt;
        x_image = x&lt;br /&gt;
        y_image = y   &lt;br /&gt;
        milieu =(x_image + (l // 2)), (y_image + (h //2 ))   &lt;br /&gt;
        verre = cv2.circle(image, (milieu), (l // 2), (0, 255, 0), 5)&lt;br /&gt;
        cv2.circle(image, (milieu) , 5, (255, 0, 0), -1)                     #point au milieu des rond      &lt;br /&gt;
        num_cible_str = str(num_cible)&lt;br /&gt;
        cv2.putText(image, (num_cible_str), (x_image, y_image),cv2.FONT_HERSHEY_SIMPLEX, 2.5,(255, 0, 0),6)     &lt;br /&gt;
        num_cible =  (num_cible + 1)&lt;br /&gt;
&lt;br /&gt;
 cv2.imshow(&amp;quot;camera&amp;quot;, image)&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
 if cv2.waitKey(10) &amp;amp; 0xFF == ord(&#039;q&#039;):&lt;br /&gt;
   camera.release()&lt;br /&gt;
   cv2.destroyAllWindows()&lt;br /&gt;
   break&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
====&#039;&#039;&#039;Lancer le programme&#039;&#039;&#039;====&lt;br /&gt;
: 1. &#039;&#039;&#039;S&#039;assurer d&#039;avoir enregistré les modifications en faisant &amp;lt;q&amp;gt;ctrl + S &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: 2. &#039;&#039;&#039;Lancer le Terminal&#039;&#039;&#039;&lt;br /&gt;
:[[File:Terminal.png|600px]]&lt;br /&gt;
&lt;br /&gt;
: 3. &#039;&#039;&#039;entrer la commande suivante: &amp;lt;q&amp;gt; python3 exemple.py &amp;lt;/q&amp;gt; &#039;&#039;&#039;&lt;br /&gt;
:: *Remplacer &amp;lt;q&amp;gt;exemple&amp;lt;/q&amp;gt; par le nom du fichier bloc-notes choisis a l&#039;étape 2 de la section programmation python.&lt;br /&gt;
: 4. &#039;&#039;&#039;Pour arrêter le programme et fermer l&#039;image, appuyez sur la touche &amp;lt;q&amp;gt;Q &amp;lt;/q&amp;gt; de votre clavier. &#039;&#039;&#039;&lt;br /&gt;
::Si cela ne fonctionne pas, vous pouvez forcer le programme à s&#039;arrêter en faisans &amp;lt;q&amp;gt;ctrl + C &amp;lt;/q&amp;gt; dans le terminal.&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Terminal.png&amp;diff=93</id>
		<title>Fichier:Terminal.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Terminal.png&amp;diff=93"/>
		<updated>2026-01-26T20:57:08Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=92</id>
		<title>Vision robotique</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=92"/>
		<updated>2026-01-26T20:20:36Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation du projet==&lt;br /&gt;
:Le projet de vision robotique utilise la librairie open cv en python pour détecter des cibles dans une image.&lt;br /&gt;
:Au cégep nous utilisons des verres rouges sur fond gris (table tournante) comme cible.&lt;br /&gt;
:Comme les verres ont tous la même couleur, il est simple de les identifier dans l&#039;image en utilisant la fonction de détection de couleur de open cv.&lt;br /&gt;
:Pour réaliser ce projet, nous avons besoin d&#039;un ordinateur en linux avec webcam intégrée. &lt;br /&gt;
 [[File:apercu_comp.jpeg|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===&#039;&#039;&#039;Programmation Python&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; 1. ouvrir le bloc note&#039;&#039;&#039;&lt;br /&gt;
:[[File:Bloc_note.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Enregistrer le projet et le nommer avec un nom terminant en &amp;lt;/q&amp;gt;.py &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
: Le fichier sera donc enregistré en document contenant du code python&lt;br /&gt;
  [[File:save_as.png|700px]]&lt;br /&gt;
:[[File:nom_py.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Copier le code d&#039;exemple et le coller dans le bloc-notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import cv2&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
camera = cv2.VideoCapture(0)    # 0 = cam ordi / 2 = cam usb&lt;br /&gt;
&lt;br /&gt;
while (1):&lt;br /&gt;
 &lt;br /&gt;
 ret, image = camera.read()&lt;br /&gt;
 image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)&lt;br /&gt;
 #rouge_min = np.array([110, 180, 140], np.uint8)        # en HSV&lt;br /&gt;
 #rouge_max = np.array([190, 255, 255], np.uint8) &lt;br /&gt;
 rose_min = np.array([160, 80, 60], np.uint8)        # en HSV&lt;br /&gt;
 rose_max = np.array([179, 255, 255], np.uint8) &lt;br /&gt;
 orange_min = np.array([0,80, 60], np.uint8)        # en HSV&lt;br /&gt;
 orange_max = np.array([15, 255, 255], np.uint8) &lt;br /&gt;
 masque_orange = cv2.inRange(image_hsv, orange_min, orange_max)&lt;br /&gt;
 masque_rose = cv2.inRange(image_hsv, rose_min, rose_max)&lt;br /&gt;
 masque_rouge = masque_rose | masque_orange&lt;br /&gt;
 kernal = np.ones((5, 5), &amp;quot;uint8&amp;quot;)&lt;br /&gt;
 masque_rouge = cv2.dilate(masque_rouge, kernal)&lt;br /&gt;
 masque_et_image = cv2.bitwise_and(image, image, mask = masque_rouge)&lt;br /&gt;
 &lt;br /&gt;
 contour, hierarchy = cv2.findContours(masque_rouge, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)       # cv2.RETR_EXTERNAL   ou   cv2.RETR_TREE&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 num_cible = 1&lt;br /&gt;
 for pic, contour in enumerate (contour):&lt;br /&gt;
     aire = cv2.contourArea(contour)&lt;br /&gt;
     if (aire &amp;gt; 5000):&lt;br /&gt;
              &lt;br /&gt;
        x, y, l, h = cv2.boundingRect(contour)&lt;br /&gt;
        x_image = x&lt;br /&gt;
        y_image = y   &lt;br /&gt;
        milieu =(x_image + (l // 2)), (y_image + (h //2 ))   &lt;br /&gt;
        verre = cv2.circle(image, (milieu), (l // 2), (0, 255, 0), 5)&lt;br /&gt;
        cv2.circle(image, (milieu) , 5, (255, 0, 0), -1)                     #point au milieu des rond      &lt;br /&gt;
        num_cible_str = str(num_cible)&lt;br /&gt;
        cv2.putText(image, (num_cible_str), (x_image, y_image),cv2.FONT_HERSHEY_SIMPLEX, 2.5,(255, 0, 0),6)     &lt;br /&gt;
        num_cible =  (num_cible + 1)&lt;br /&gt;
&lt;br /&gt;
 cv2.imshow(&amp;quot;camera&amp;quot;, image)&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
 if cv2.waitKey(10) &amp;amp; 0xFF == ord(&#039;q&#039;):&lt;br /&gt;
   camera.release()&lt;br /&gt;
   cv2.destroyAllWindows()&lt;br /&gt;
   break&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=91</id>
		<title>Vision robotique</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=91"/>
		<updated>2026-01-26T20:13:34Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation du projet==&lt;br /&gt;
:Le projet de vision robotique utilise la librairie open cv en python pour détecter des cibles dans une image.&lt;br /&gt;
:Au cégep nous utilisons des verres rouges sur fond gris (table tournante) comme cible.&lt;br /&gt;
:Comme les verres ont tous la même couleur, il est simple de les identifier dans l&#039;image en utilisant la fonction de détection de couleur de open cv.&lt;br /&gt;
:Pour réaliser ce projet, nous avons besoin d&#039;un ordinateur en linux avec webcam intégrée. &lt;br /&gt;
 [[File:apercu_comp.jpeg|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===&#039;&#039;&#039;Programmation Python&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; 1. ouvrir le bloc note&#039;&#039;&#039;&lt;br /&gt;
:[[File:Bloc_note.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Enregistrer le projet et le nommer avec un nom terminant en &amp;lt;/q&amp;gt;.py &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
: Le fichier sera donc enregistré en document contenant du code python&lt;br /&gt;
  [[File:save_as.png|700px]]&lt;br /&gt;
:[[File:nom_py.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;3. Copier le code d&#039;exemple et le coller dans le bloc-notes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import cv2&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
camera = cv2.VideoCapture(0)    # 0 = cam ordi / 2 = cam usb&lt;br /&gt;
&lt;br /&gt;
while (1):&lt;br /&gt;
 &lt;br /&gt;
 image= camera.read()&lt;br /&gt;
 image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)&lt;br /&gt;
 #rouge_min = np.array([110, 180, 140], np.uint8)        # en HSV&lt;br /&gt;
 #rouge_max = np.array([190, 255, 255], np.uint8) &lt;br /&gt;
 rose_min = np.array([160, 80, 60], np.uint8)        # en HSV&lt;br /&gt;
 rose_max = np.array([179, 255, 255], np.uint8) &lt;br /&gt;
 orange_min = np.array([0,80, 60], np.uint8)        # en HSV&lt;br /&gt;
 orange_max = np.array([15, 255, 255], np.uint8) &lt;br /&gt;
 masque_orange = cv2.inRange(image_hsv, orange_min, orange_max)&lt;br /&gt;
 masque_rose = cv2.inRange(image_hsv, rose_min, rose_max)&lt;br /&gt;
 masque_rouge = masque_rose | masque_orange&lt;br /&gt;
 kernal = np.ones((5, 5), &amp;quot;uint8&amp;quot;)&lt;br /&gt;
 masque_rouge = cv2.dilate(masque_rouge, kernal)&lt;br /&gt;
 masque_et_image = cv2.bitwise_and(image, image, mask = masque_rouge)&lt;br /&gt;
 &lt;br /&gt;
 contour, hierarchy = cv2.findContours(masque_rouge, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)       # cv2.RETR_EXTERNAL   ou   cv2.RETR_TREE&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 num_cible = 1&lt;br /&gt;
 for pic, contour in enumerate (contour):&lt;br /&gt;
     aire = cv2.contourArea(contour)&lt;br /&gt;
     if (aire &amp;gt; 5000):&lt;br /&gt;
              &lt;br /&gt;
        x, y, l, h = cv2.boundingRect(contour)&lt;br /&gt;
        x_image = x&lt;br /&gt;
        y_image = y   &lt;br /&gt;
        milieu =(x_image + (l // 2)), (y_image + (h //2 ))   &lt;br /&gt;
        verre = cv2.circle(image, (milieu), (l // 2), (0, 255, 0), 5)&lt;br /&gt;
        cv2.circle(image, (milieu) , 5, (255, 0, 0), -1)                     #point au milieu des rond      &lt;br /&gt;
        num_cible_str = str(num_cible)&lt;br /&gt;
        cv2.putText(image, (num_cible_str), (x_image, y_image),cv2.FONT_HERSHEY_SIMPLEX, 2.5,(255, 0, 0),6)     &lt;br /&gt;
        num_cible =  (num_cible + 1)&lt;br /&gt;
&lt;br /&gt;
 cv2.imshow(&amp;quot;camera&amp;quot;, image)&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
 if cv2.waitKey(10) &amp;amp; 0xFF == ord(&#039;q&#039;):&lt;br /&gt;
   camera.release()&lt;br /&gt;
   cv2.destroyAllWindows()&lt;br /&gt;
   break&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=90</id>
		<title>Vision robotique</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=90"/>
		<updated>2026-01-26T19:36:14Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation du projet==&lt;br /&gt;
:Le projet de vision robotique utilise la librairie open cv en python pour détecter des cibles dans une image.&lt;br /&gt;
:Au cégep nous utilisons des verres rouges sur fond gris (table tournante) comme cible.&lt;br /&gt;
:Comme les verres ont tous la même couleur, il est simple de les identifier dans l&#039;image en utilisant la fonction de détection de couleur de open cv.&lt;br /&gt;
:Pour réaliser ce projet, nous avons besoin d&#039;un ordinateur en linux avec webcam intégrée. &lt;br /&gt;
 [[File:apercu_comp.jpeg|400px|Apercu]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===&#039;&#039;&#039;Programmation Python&#039;&#039;&#039;===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; 1. ouvrir le bloc note&#039;&#039;&#039;&lt;br /&gt;
:[[File:Bloc_note.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2. Enregistrer le projet sous et le nommer avec un nom terminant en &amp;lt;/q&amp;gt;.py &amp;lt;/q&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
: Le fichier sera donc enregistré en document contenant du code python&lt;br /&gt;
 [[File:save_as.png|700px]]&lt;br /&gt;
:[[File:nom_py.png|700px]]&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Nom_py.png&amp;diff=89</id>
		<title>Fichier:Nom py.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Nom_py.png&amp;diff=89"/>
		<updated>2026-01-26T19:16:08Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Save_as.png&amp;diff=88</id>
		<title>Fichier:Save as.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Save_as.png&amp;diff=88"/>
		<updated>2026-01-26T19:10:13Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Bloc_note.png&amp;diff=87</id>
		<title>Fichier:Bloc note.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Bloc_note.png&amp;diff=87"/>
		<updated>2026-01-26T18:59:43Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Apercu_comp.jpeg&amp;diff=86</id>
		<title>Fichier:Apercu comp.jpeg</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Fichier:Apercu_comp.jpeg&amp;diff=86"/>
		<updated>2026-01-26T18:42:15Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=82</id>
		<title>Vision robotique</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=82"/>
		<updated>2026-01-23T15:21:45Z</updated>

		<summary type="html">&lt;p&gt;2249047 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Présentation du projet==&lt;br /&gt;
:Le projet de vision robotique utilise la librairie open cv en python pour détecter des cibles dans une image.&lt;br /&gt;
:Au cégep nous utilisons des verres rouges sur fond gris (table tournante) comme cible.&lt;br /&gt;
:Comme les verres ont tous la même couleur, il est simple de les identifier dans l&#039;image en utilisant la fonction de détection de couleur de open cv.&lt;br /&gt;
:Pour réaliser ce projet, nous avons besoin d&#039;un ordinateur en linux avec webcam integrée. &lt;br /&gt;
[[File:apercu_resultat.png]]&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
	<entry>
		<id>https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=70</id>
		<title>Vision robotique</title>
		<link rel="alternate" type="text/html" href="https://wiki.tge.cegeplabs.qc.ca/index.php?title=Vision_robotique&amp;diff=70"/>
		<updated>2026-01-23T13:39:29Z</updated>

		<summary type="html">&lt;p&gt;2249047 : Page créée avec « Test de création de la page. »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Test de création de la page.&lt;/div&gt;</summary>
		<author><name>2249047</name></author>
	</entry>
</feed>