Outils pour utilisateurs

Outils du site


Action disabled: diff
visionlpro2

Ceci est une ancienne révision du document !


Projet de Vision pour la robotique

Dans le cadre du confinement imposé par le gouvernement, vous devrez travailler à domicile. Profitons de cette occasion pour que vous puissiez mettre en oeuvre par vous même les concepts et utiliser les outils présentés dans le module de Vision: http://homepages.laas.fr/bvandepo/wiki/doku.php?id=visionlpro

Vous devrez développer une application en langage Python utilisant la librairie OpenCV afin de réaliser les différents traitements d'une tâche de vision.

Lors des développements, vous pourrez communiquer avec l'enseignant par mail afin d'obtenir des informations. Les informations pertinentes seront mises en commun sur le wiki pour que tous puissent en bénéficier. Vous devrez vous assurer que la réponse à votre question n'est pas déjà présente sur le wiki avant de la poser, afin de minimiser les échanges inutiles.

La quantité de travail pour ce projet est de l'ordre de 26 heures. Il sera évalué sur la base du code produit par l'étudiant, sur les interactions que nous aurons eu (vous devrez faire preuve d'autonomie mais ne pas rester bloqué et donc solliciter de l'aide avant de perdre trop de temps) ainsi que sur le rapport que vous devrez fournir en fin de projet. Ce rapport devra comporter:

  1. Un échéancier faisant apparaître clairement le temps passé sur chaque étape.
  2. La description des étapes de traitement que vous aurez réalisé, et une justification pour chacun des choix que vous aurez fait.
  3. Une liste d'images que vous aurez traitées ainsi que les résultats de traitement attendus et obtenus.
  4. Une analyse de votre travail indiquant ce qui fonctionne (ou pas), ce qu'il faudrait faire pour améliorer (ou faire fonctionner).

Etape 1: Installation des outils de développement et premiers test

Séance n°1: visio conférence le 20 mars de 14à 16h :

  1. Installation des outils PyCharm, python 3.8 et librairie openCV.
  2. Documentation opencv 4.2.0: https://docs.opencv.org/4.2.0/
  3. Présentation des fonctions pour la rectification d'images: *getPerspectiveTransform()* et *warpPerspective()*

Dans un premier temps, vous devez installer les outils et librairies nécessaires.

Système Linux Debian

Première situation, la plus simple, vous disposez d'un système d'exploitation Linux avec distribution Debian (éventuellement installé dans une machine virtuelle avec un outil comme Virtualbox). Ce système peut être installé sur une carte raspberry Pi comme en TP ou bien sur votre PC.

Pour installer les outils, copier coller une ligne après l'autre dans une console (en vérifiant qu'il n'y a pas de message d'erreur):

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install python3-opencv  libjasper-dev libqtgui4 libqt4-test libtiff5 libgstreamer1.0-0  libqtcore4  libopenexr23 libatlas3-base libsz2 build-essential cmake pkg-config libjpeg-dev libtiff5-dev libjasper-dev libpng-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libfontconfig1-dev libcairo2-dev libgdk-pixbuf2.0-dev libpango1.0-dev libgtk2.0-dev libgtk-3-dev libatlas-base-dev gfortran libhdf5-dev libhdf5-serial-dev libhdf5-103 libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5 python3-dev nano python3-pyqt4 screen  imagemagick gitk iotop lsof geeqie idle3 python3-pip 
sudo python3 -m pip  install imutils
sudo python3 -m pip  install opencv-python
sudo python3 -m pip  install matplotlib

Système Windows

Cette seconde situation est moins simple, et votre enseignant n'a pas une aussi bonne maîtrise. Vous privilégierez donc la première si possible.

Télécharger et installer Python 3.8.2 depuis: https://www.python.org/ftp/python/3.8.2/python-3.8.2-amd64.exe Lors de l'installation, cocher Add Python 3.8 to PATH.

Installation de pyCharm (choisir la version Community): https://www.jetbrains.com/fr-fr/pycharm/

Lancer pycharm

Faire “New Project”

cocher “Existing interpreter”, puis “…” puis choisir “System Interpreter”, puis “Ok”

Cliquer sur “Create”

File→“Settings”

Ouvrir petite flêche à gauche de “Project: untitled”

“Project Interpreter”

cocher le signe + à droite de “Latest Version”

taper opencv dans la zone de texte recherche, choisir le paquet opencv-pythoon , vérifier qu'il est bien en version 4.2.0.32, puis cliquer en bas sur “Install Package”. Ceci installe openCV et sa dépendance numpy.

Pour créer un fichier python dans le projet, clic droit sur Project→New→Python File puis saisir ne nom du fichier, par exemple test1.py

saisir dans le fichier python le code suivant:

test1.py
import cv2
im=cv2.imread('riz.jpg')
cv2.imshow('image1',im)
cv2.waitKey(0)
cv2.destroyAllWindows()

Télécharger le fichier homepages.laas.fr_bvandepo_files_iut_tp_lpro_vision_riz.jpg et le sauver dans le dossier du fichier test1.py sous le nom riz.jpg . Ensuite lancer votre programme en cliquant sur Run→Run test1 (ou Maj+F10).

Installation pour les possesseurs de windows 10 Pro N

A l'exécution, on obtient le message d'erreur suivant: import cv2 File “C:\Users\B\AppData\Local\Programs\Python\Python38\lib\site-packages\cv2\init.py”, line 3, in <module> from .cv2 import * ImportError: DLL load failed while importing cv2: Le module spécifié est introuvable.

D'après https://stackoverflow.com/questions/52349669/dll-load-failed-when-import-cv2-opencv:

This can happen if you are using windows 10 N distribution, the N distributions does not come preinstalled with windows media feature pack, which is required after OpenCV version 3.4 and onwards.
The preferred solution is to install the feature pack at : 

https://www.microsoft.com/en-us/software-download/mediafeaturepack

En cas de problème lors de l'exécution de l'installeur: https://pcsecurise.fr/demander/comment-corriger-le-code-derreur-windows-update-0x8008000005/

Pour résoudre le problème:

  1. Appuyez sur les touches Windows + I pour ouvrir les Paramètres.
  2. Ouvrez maintenant la rubrique Mises à jour & Sécurité dans le volet de gauche.
  3. Cliquez sur Dépannage.
  4. Cliquez sur Windows Update et sélectionnez Lancer le Dépanneur.

Ressources externes pour l'installation

Ci dessous des liens vers des tutos d'installation, pas nécessaires si la procédure d'installation précédente s'est déroulée correctement.

La page suivante détaille l'installation de python3 et openCV sous windows: https://solarianprogrammer.com/2016/09/17/install-opencv-3-with-python-3-on-windows/

Vous pouvez ensuite installer l'environnement de développement idle3 comme en TP, en suivant les instructions de: http://maths.spip.ac-rouen.fr/IMG/pdf/idle-windows.pdf

Premiers tests

Vous devriez maintenant pouvoir exécuter les programmes que nous avons développé ensemble et qui sont sur la page: http://homepages.laas.fr/bvandepo/wiki/doku.php?id=visionlpro

Etape 2: Projet RubiksCube

Dans un premier temps, vous devrez re développer l'application réalisant la lecture d'une face du rubikscube. Cette application a été décrite dans les modules de vision industrielle et de robotique de manipulation Kuka. Les étapes du traitement sont rappelées ici:

L'image de test à traiter est:

Image 0: homepages.laas.fr_bvandepo_files_iut_tp_lpro_vision_rubiks.jpg

Vous devez spécifier manuellement les coordonnées des 4 coins de la face à traiter:

Image 1:

Vous devez ensuite générer une image rectifiée (par application de l'homographie) de la face du cube avec une résolution de 31×31 pixels:

Image 2:

Vous devez ensuite déterminer pour chacun des pixels de l'image quelle est la couleur (parmi les 6 couleurs apprises) la plus proche:

Image 3:

Vous devez finalement effectuer un vote pour chacune des cases du rubiks cube en utilisant les différentes valeurs calculées précédemment, et générer une image de 3×3 pixels:

Image 4:

Séance 2: Grosses explications sur matrices et transformations projectives

hom.py
import cv2
import numpy as np
rouge=np.array([  0,   0, 255])
print(str(rouge))
mat= np.zeros((4, 2), dtype="float32")
print(mat)
imagette_couleur=np.zeros((4, 2,3), dtype="uint8")
 
imagette_couleur[0][0]=rouge
imagette_couleur[3][0]=rouge
imagette_couleur[3][1]=rouge
cv2.imwrite('imagette.png',imagette_couleur)
 
 
 
 
src= np.zeros((4, 2), dtype="float32")
dst= np.zeros((4, 2), dtype="float32")
retval=cv2.getPerspectiveTransform(src,dst) #solveMethod= DECOMP_LU 
 
''' matrice obtenue	
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 1.]]
'''
 
xi=20
yi=30
Pi= np.zeros((3, 1), dtype="float32")
Pi[0]=xi
Pi[1]=yi
Pi[2]=1
 
print(Pi)
 
np.matmul(retval,Pi)
 
 
maxWidth=2
maxHeight=2
dst = np.array([        [0, 0],        [maxWidth - 1, 0],        [maxWidth - 1, maxHeight - 1],        [0, maxHeight - 1]], dtype="float32")
src = np.array([        [0, 0],        [maxWidth - 1, 0],        [maxWidth - 1, maxHeight - 1],        [0, maxHeight - 1]], dtype="float32")
print(src)
print(dst)
retval=cv2.getPerspectiveTransform(src,dst)
print(retval)
#on obtient identité à la précision numérique près
 
#
tx=100
dst = np.array([        [0+tx, 0],        [maxWidth - 1+tx, 0],        [maxWidth - 1+tx, maxHeight - 1],        [0+tx, maxHeight - 1]], dtype="float32")
src = np.array([        [0, 0],        [maxWidth - 1, 0],        [maxWidth - 1, maxHeight - 1],        [0, maxHeight - 1]], dtype="float32")
retval=cv2.getPerspectiveTransform(src,dst)
print(retval)
 
img = cv2.imread('rubiks.jpg')
[haut,larg,nbcomposantes]=img.shape
print(haut)
print(larg)
dst=cv2.warpPerspective(img, retval, (haut,larg))
 
#affichage
cv2.imshow('image1',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

Fonctions utilisables

Etape 3: Projets Bonus individualisés

Après que l'enseignant ait validé des résultats sur le premier projet, il pourra vous affecter l'un des projets individuels suivants:

Traitement d'images individuelles

Détecter des carrés et rectangles dans l'image et mesurer longueur/largeur/surface/position et orientation

Détecter des disques (pièces de monnaie) et mesurer position et orientation (par template matching)

Détecter des clous et mesurer leur longueur/position

Apprentissage et classification par réseau de neurones CNN: https://www.pyimagesearch.com/2018/11/19/mask-r-cnn-with-opencv/

Comptage du nombre d'anneaux concentriques (dans un premier temps intégralement vus dans l'image puis partiellement)

Traitement d'image de profondeur acquise avec la caméra RGB-D realsense

traitement d'image avec projecteurs lasers

Détecter des lignes pour robot mobile

Estimation de pose 3D avec tag 2D aruco pour la réalité augmentée: https://www.uco.es/investiga/grupos/ava/node/26

Détections de défauts sur objet manufacturé: motifs périodiques sur un tissus

Détecter différentes postures de main

Traitement d'images en séquence

Traitement d'une paire d'images acquises successivement pour la mesure de vitesse d'un objet sur un tapis

visionlpro2.1585155032.txt.gz · Dernière modification : 2020/03/25 17:50 de bvandepo