« Vision OpenCV » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
(5 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 2 : | Ligne 2 : | ||
=OpenCV ?= | =OpenCV ?= | ||
OpenCV est un groupe de librairies C/C++ dédiés à la vision temps réel par ordinateur. | OpenCV est un groupe de librairies C/C++ dédiés à la vision temps réel par ordinateur. Développées initialement par Intel, elle sont distribuées sous licence BSD. <br />Mieux qu'une longue présentation, une visite sur le [http://sourceforge.net/projects/opencvlibrary site officiel] vous en apprendra d'avantage. | ||
=Comment ça se passe ?= | =Comment ça se passe ?= | ||
[[Image:OpenCV-test.jpg| | [[Image:OpenCV-test.jpg|Recherche de balles bleues|frame|right]] | ||
Un exemple de recherche de balles bleues fonctionnerait ainsi : | Un exemple de recherche de balles bleues fonctionnerait ainsi : | ||
* Obtenir le flux vidéo de la webcam. | * Obtenir le flux vidéo de la webcam. | ||
Ligne 22 : | Ligne 22 : | ||
* Le seuillage filtré vert. | * Le seuillage filtré vert. | ||
* Le seuillage filtré bleu. | * Le seuillage filtré bleu. | ||
<br clear="all" /> | |||
=Et dans un robot ?= | |||
[[Image:ReconnaissanceOpenCV.png|Recherche d'objet en utilisant la webcam intégrée au Netbook|350px|thumb]] | |||
Dans un robot la vision n'est pas un but en soit. Il s'agit d'une source d'informations (un capteur) supplémentaire qui doit rester au service de l'IA. Afin de disposer de la puissance nécessaire un [[PC_embarqué|netbook]] est embarqué dans le robot. | |||
Aussi nous avons choisi d'implémenter la fonction de vision sous forme d'un serveur accessible en [http://fr.wikipedia.org/wiki/CORBA CORBA]. Il devient alors aisé de décorréler vision et IA à plusieurs niveaux : | |||
* Langages de programmation : C/C++ pour la vision, Java/Python/... pour l'IA | |||
* Développement : il est possible de modifier le fonctionnement de la partie vision sans devoir recompiler la partie IA | |||
* Exécution : les différentes tâches sont des threads complètement distincts | |||
* Emplacement : pourquoi ne pas disperser chaque tâche sur une machine différente ? | |||
<br clear="all" /> | |||
=Quelques images= | |||
[[Image:Test openCV.png|Recherche de balles bleues, cette fois-ci sous linux|480px|thumb|left]] | |||
[[Image:Reconnaissance2OpenCV.png|Recherche de cercles dans une image de test|480px|thumb|left]] |
Version actuelle datée du 8 février 2009 à 22:13
Cette page est dédiée à la vision par ordinateur telle que nous la mettons en place. Il s'agit d'applications simples: détecter des objets, déduire leur distance ...
OpenCV ?
OpenCV est un groupe de librairies C/C++ dédiés à la vision temps réel par ordinateur. Développées initialement par Intel, elle sont distribuées sous licence BSD.
Mieux qu'une longue présentation, une visite sur le site officiel vous en apprendra d'avantage.
Comment ça se passe ?
Un exemple de recherche de balles bleues fonctionnerait ainsi :
- Obtenir le flux vidéo de la webcam.
- Le filtrer, par exemple en faisant un flou gaussien.
- Le convertir dans un espace colorimétrique moins sensible aux changements de luminosité (HSV, CIE L*a*b* ...)
- Effectuer un seuillage sur les différentes couleurs (ici seul le bleu nous intéresse vraiment).
- Un second filtrage destiné à mieux détecter les objets (ouverture/fermeture).
- Finalement une reconnaissance de forme.
Le tout peut sembler complexe mais OpenCV nous simplifie bien la tâche. Au final un tel programme tiens en quelques lignes de code. La capture d'écran située à droite présente 5 fenêtres vidéos. De gauche à droite et de haut en bas :
- Le flux vidéo source.
- Le flux vidéo filtré avec le résultat de la détection d'objet (les cercles rouges incrustés).
- Le seuillage filtré rouge.
- Le seuillage filtré vert.
- Le seuillage filtré bleu.
Et dans un robot ?
Dans un robot la vision n'est pas un but en soit. Il s'agit d'une source d'informations (un capteur) supplémentaire qui doit rester au service de l'IA. Afin de disposer de la puissance nécessaire un netbook est embarqué dans le robot.
Aussi nous avons choisi d'implémenter la fonction de vision sous forme d'un serveur accessible en CORBA. Il devient alors aisé de décorréler vision et IA à plusieurs niveaux :
- Langages de programmation : C/C++ pour la vision, Java/Python/... pour l'IA
- Développement : il est possible de modifier le fonctionnement de la partie vision sans devoir recompiler la partie IA
- Exécution : les différentes tâches sont des threads complètement distincts
- Emplacement : pourquoi ne pas disperser chaque tâche sur une machine différente ?