generated/
: n'existe pas initialement et est créé lors de la première calibration.public/
: contient les points d'entré du programme ainsi qu'un fichier de configuration.sources/
: contient les sources du projet.sources/backend
: contient la logique fonctionnelle.sources/camera_system
: contient la logique métier.sources/gui
: contient le code lié à l'interface utilisateur graphique.
- Python3.7
Le logiciel n'a pas été testé sous MacOS. Sous Windows, n'ont été testé que la procédure d'installation et le lancement de l'interface CLI. Linux est vivement conseillé pour utiliser ce programme.
De plus, il est vivement conseillé de faire usage d'un environement virtuel de type virtualenvwrapper ou pyenv pour ségréguer les dépendances du projet des dépendances de l'installation système de Python.
- Téléchargez ou clonez les sources du projet sur github.
- Après décompression de l'archive, ouvrez un terminal à la racine du projet.
- (optionel) Crééz un nouvel environement virtuel et activez le.
- Installation des dépendances avec
$ pip install -e .
Le fichier public/settings.py
contient les configurations du logiciel. La majorité des valeurs par défaut sont valables mais il est nécessaire d'en adapter certaines:
-
DEVICE
: Les valeurs des champsleft
etright
correspond à l'id usb qu'occupent vos caméras. -
CHESSBOARD
:-
rows
correspond au nombre de lignes -1 nombre de lignes -1 -
columns
correspond au nombre de colonnes - 1. -
square_size
représente la taille d'un carré en$cm$ .
-
Pour lancer le CLI, À la racine du projet:
$ python public/stereovision.py
Les 4 actions possibles sont affichés. Les autres modes ne sont pas visibles car l'application ne détecte pas les fichiers contenant les données de calibration. Avant de lancer la procédure de calibration, il est utile de faire un pré-réglage manuellement des caméras. En pressant la touche "l" (L minuscule) du clavier, des lignes apparaissent:
Ces lignes servent à régler grossièrement la position verticale des caméras. Sur la figure précédente, la caméra de gauche devrait être pivotée vers le bas, manuellement.
La figure suivante montre le résultat, après une correction grossière:
Le système est maintenant prêt à être calibré. Pour ce faire, il est nécessaire de changer de mode pour le mode 2, qui est dédié à la calibration, en pressant sur la touche "2" du clavier:
Le mode calibration est un mode en deux procédures:
- Le logiciel va capturer un certain nombre de paires d'images.
- Le logiciel utilise les images pour déterminer un certain nombre de paramètres, notament les paramètres intrinsèques, les données de distorsion, les matrices fondamentale et essentielle.
Pour effectuer les captures, il est nécessaire de se munir de la mire de calibration et de se balader avec, devant les caméras. Les captures se font automatiquement lors de la détection de la mire dans les deux images. Après une capture, le logiciel laisse 2 secondes à l'utilisateur pour changer de position, avant de recommencer à chercher la mire.
La barre de progression permet de connaitre l'état d'avancement de la procédure:
La transition vers la seconde procédure se fait automatiquement lorsque la barre de progression est complète. La seconde procédure ne demande aucune action de l'utilisateur et prend un certain temps pour faire ses calculs:
Si la première procédure échoue pour une raison ou pour une autre ou si l'utilisateur souhaite faire une nouvelle calibration, il lui suffit de relancer ce mode.
Une fois les calculs effectués, l'application change automatiquement de mode pour aller dans le numéro 3, c'est à dire le mode distorsion:
Dans ce mode il est possible d'afficher les lignes d'aide (touche "l") qui permettent de visualiser la qualité de la rectification ainsi que de la suppression de la distorsion. Pour alterner entre images normales et images réctifiées, il est possible de presser la touche "d".
La touche "4" active le mode depth:
Dans ce mode, plus la couleur tend vers le rouge, plus l'objet est proche. Et dans la précédente capture (qui correspond à la scène de la figure 21), il est facile de voir que l'objet au premier plan est rouge vif, celui au second jaune et celui dans le 3e bleu clair.
Ce mode offre de nombreuses options qui seront détaillées dans le prochain sous-chapitre:
Les dernières lignes de la figure précédente laissent sous entendre qu'il est possible d'obtenir la distance en double cliquant sur un point de l'image. Cette fonctionnalité est expérimentale et est décrite dans le chapitre suivant.
Lancer le programme en mode GUI donne accès à une interface graphique. Pour lancer ce mode, à la racine du projet:
$ python public/stereovision_gui.py
Dans la GUI, on retrouve les modes de l'application sous forme d'onglets, en haut à gauche. Il y en a un de moins qu'en mode CLI car il n'est pas possible pour le moment de calibrer dans ce mode. Dans chaque onglet, en haut à droite se trouve un bouton pour lancer / stopper la capture. Si une capture est en cours et que l'onglet est changé, la capture cesse automatiquement et doit être relancée dans le nouveau mode. Et finalement, en bas à gauche des images, il y a les différentes options du mode courant, qui sont les mêmes que celles du CLI. Sur la précédente figure, on peut voir un bouton pour activer l'affichage des lignes horizontales d'aide.
Dans l'onglet "Depth", on retrouve l'image résultante du traitement sur les deux caméras qui affiche une carte de profondeur. Par défaut c'est le mode WLS qui est activé et qui propose un filtre particulier qui permet de replaquer le résultat de la carte de profondeur sur une image filtrée:
Si on le retire en cliquant sur la radio "Colored", l'image résultante n'est plus traitée avec le filtre WLS et affiche juste une carte de profondeur colorée:
Et si on retire la couleur, en cliquant sur la radio "Disparity", il ne reste que la carte de disparité sans aucun traitement autre qu'une normalisation ramenant la disparité maximum à 0.
Sur la figure précédente, le mode du blockmatcher a également été changé. Il existe deux modes:
- SBM (StereoBlockMatcher): Un mode qui crée des cartes moins riches mais permet d'avoir une image fluide.
- SGBM: Un mode qui crée des cartes disparité riches mais très couteux en puissance de calcul. Entraine une réduction conséquente du nombre d'images par secondes.
Il est possible de changer les paramètres du blockmatcher dans le module public/settings.py
dans la partie DEPTH_MAP_DEFAULTS
.
La capture précédente montre une carte de profondeur colorée (plus c'est rouge, plus c'est proche) mais avec le blockmatcher SBM. Dans ce mode, pour une résolution de capture HD (1280 x 920), le nombre d'images par seconde est proche de 60 alors qu'avec le mode SGBM et le filtre WLS il oscille entre 2 et 3 images par secondes.