Note d`application mise en oeuvre de la librairie OpenCV
Transcription
Note d`application mise en oeuvre de la librairie OpenCV
HARRACHE Khaled PROJET P10A08 ANALYSE AUTOMATIQUE DE POSTURES NOTE D’APPLICATION MISE EN OEUVRE ET UTILISATION DE LA LIBRAIRIE OPENCV Rédacteur : Khaled HARRACHE Client: M. Yannick DICHAMPT Tuteur Industriel : M. Gérard CHAZELLE Tuteur Technique : M. Jacques LAFFONT 1 HARRACHE Khaled Sommaire 1. Introduction! 3 2. Présentation de la librairie OpenCV! 4 3. Installation de la librairie! 5 A. Installation et mise en oeuvre sous le système Linux! 5 B. Installation et mise en oeuvre sous le système Mac OS! 7 4. Structure de la librairie OpenCV! 9 A. CV & CVAUX : traitement dʼimages! 9 B. CXCORE & HIGHGUI! 9 C. CXCORE : nombreuses fonctions de dessin! 5. Fonctions élémentaires de la librairie OpenCV! 10 10 A. Fenêtres I/O! 10 B. Image I/O! 10 C. Vidéo I/O! 10 D. Interactions clavier I/O! 11 2 HARRACHE Khaled ! 1. Introduction Devant le vieillissement croissant de la population et l’importance que prend le service à la personne dans les pays occidentaux, il devient nécessaire d’exploiter la nouvelle technologie dans le but de servir au mieux cette tranche de la population. Dans cette optique, le traitement d’image apporte maintes nouvelles perspectives à la surveillance et l’assistance à la personne. En effet, cette technologie peut être utilisée dans le but de la détection de présence, reconnaissance de posture ou encore détection de chute. Dans le cadre de notre Projet P10A08 de 2010 réalisé au cours de notre dernière année dans la filière génie électrique au sein de Polytech’Clermont-Ferrand, nous avons eu à réaliser une application destinée à filmer une scène à l’aide d’une caméra IP, détecter la présence d’une personne et déterminer sa posture (debout, assise ou couchée). La détection de présence et la reconnaissance de posture sont réalisées par traitement d’image avec l’utilisation de la librairie OpenCV. Cette note d’application est donc un tutoriel de mise en oeuvre et d’utilisation de cette librairie. 3 HARRACHE Khaled ! 2. Présentation de la librairie OpenCV La vision humaine est extrêmement complexe. Chaque pixel contient des informations sur la lumière (quantité et contenu spectral/couleur) reçue par l’oeil. Les objets (téléphone, voiture...) n’existent pas sur la rétine, et pourtant on les voit ; leur interprétation est le résultat du processus visuel. La vision par ordinateur ne cherche pas à comprendre ou à reproduire la vision humaine, mais à construire un modèle algorithmique qui, vu de l’extérieur, possède des propriétés semblables. L’ensemble du processus se présente de la manière suivante : Extraction de primitives à partir des images. Représentation des connaissances. (modèle) Mise en correspondance image/connaissances. (reconnaissance). OpenCV (Open Source Computer Vision) est une bibliothèque optimisée,de fonctions dédiées à la programmation pour la vision en temps réel. Cette librairie publiée sous une licence BSD est gratuite pour un usage scolaire ou commercial. Son intérêt est de réaliser des traitements sans forcément connaître les algorithmes. La bibliothèque possède plus de 500 algorithmes optimisés. Elle est utilisée dans la vision en contexte robotique pour des applications simples. 4 HARRACHE Khaled ! 3. Installation de la librairie ! ! A. Installation et mise en oeuvre sous le système Linux ! L’installation de la librairie sous le système Linux se fait directement depuis le Terminal. Il faut donc ouvrir le terminal et se placer dans le dossier personnel avec la commande cd. Une connexion internet est nécessaire pour le téléchargement de la librairie directement depuis le site sourceforge d'OpenCV. La Troisième commande permet de réaliser l'extraction de l’archive. On crée ensuite un «dossier build», et on se place dans ce dernier. On réalise enfin l’installation par les quatre lignes de commande. Pour la compilation et l’exécution du programme, on utilise encore une fois le terminal. Pour cela on crée tout d’abord notre programme dans un fichier avec l'extension .cpp grâce à un éditeur de texte. On crée aussi un fichier Makefile qui va nous permettre de compiler le programme avec une simple ligne de commande. 5 HARRACHE Khaled 1) Lancez l’éditeur de texte Gedit et taper le programme suivant : 2) Enregistrez ce programme sous le nom ex_opencv.cpp dans un dossier Créez un Makefile dans lequel il faut taper les lignes suivantes : all: g++ -O2 -Wall -o exemple ex_opencv.cpp `pkg-config --cflags --libs opencv` clean: rm -rf exemple 3) Enregistrez ce fichier dans le dossier où se trouve le fichier ex_opencv.cpp sous le nom de Makefile. Remarque : la ligne `pkg-config --cflags --libs opencv` permet l’appel des librairies OpenCV lors de la compilation. 3) Dans le Terminal, placez-vous dans le dossier où sont enregistrés les deux fichiers précédents. Tapez ensuite la commande make. Le programme est donc compilé et un fichier exemple est créé. 4) Pour exécuter le programme il faut taper, toujours dans le Terminal ./exemple. Le programme se lance alors. Ce programme doit allumer la Webcam (de l’ordinateur) et afficher la scène filmée. 6 HARRACHE Khaled B. Installation et mise en oeuvre sous le système Mac OS Plusieurs Méthodes existent pour installer cette librairie sous le fameux système de la pomme, mais nous allons ici présenter la plus simple et la plus pratique. En effet, le développement sous ce système d’exploitation se fait généralement sous le logiciel Xcode (offert dans le CD d'installation). La méthode de mise en oeuvre de la librairie que nous allons présenter ici permet de travailler exclusivement avec Xcode. Par conséquent, compiler et exécuter le code peuvent être réalisées directement par ce logiciel contrairement aux autres méthodes de mise en oeuvre, qui nécessite de passer par le Terminal pour compiler et exécuter le code. La première étape consiste à télécharger le framework d’OpenCV en cliquant sur le lien suivant : http://code.google.com/p/opentouch/downloads/ detailname=OpenCV.framework.zip&can=2&q=. Après extraction de cette archive dans ./Library/Frameworks il faut copier ce dossier et le placer dans le dossier de travail et placer ensuite le projet au même niveau que le framework. Le projet ce crée de la manière suivante : 1) Ouvrir Xcode, sélectionner File/new projects 2) Sélectionnez dans la fenêtre qui s’ouvre Command Line Utility/Standar Tool 3) Sélectionnez ensuite, dans target BSD/Shel Tool 4) Il faut sélectionner ensuite le target créé et ajouter le Frameworks, 7 HARRACHE Khaled 5) On peut alors créer notre fichier .c ou .cpp en cliquant sur File/new File puis BSD/ C++ File 6) Il faut inclure dans le début du programme les librairie OpenCV de la manière suivante. 7) On peut alors compiler puis exécuter le programme en cliquant sur build/run. Pour tester l'installation, veuillez tester le programme suivant qui permet de récupérer le flux vidéo de la webcam et d’afficher le résultat. 8 HARRACHE Khaled 4. Structure de la librairie OpenCV La librairie OpenCV se présente de la manière suivante : A. CV & CVAUX : traitement dʼimages Gradient, contours, coins et contours actifs, Morphomath (érosion, dilatation, fermeture...) Filtrages divers (lissage, rehaussement de contraste, suppression de fond...) Conversion d’espace couleur (RGB, HSV, YCbCr...) Étiquetage, manipulation de contours, Transformations diverses (Fourier, Hough...) Histogrammes Analyse de mouvement et suivi • Suivi d’objets, flot optique... Reconstruction • • Calibration, mise en correspondance... Détection et reconnaissance de formes • • Détection de visages et autres formes particulières. • • • • • • • B. CXCORE & HIGHGUI • Structures élémentaires • matrices, tableaux, listes, files, graphes, arbres... • opérateurs standards sur ces structures, Dessin de primitives géométriques • • lignes, rectangles, ellipses, polygones... et texte. Manipulation des images et des séquences • 9 HARRACHE Khaled • lecture, écriture... • Interface utilisateur • fenêtre, entrées/sorties utilisateur. C. CXCORE : nombreuses fonctions de dessin • • • • lignes, cercles, ellipses, arcs, ... Polygone plein ou contours Textes (avec différentes fonts) Trousse à outils pour gérer les couleurs, les tailles,.. 5. Fonctions élémentaires de la librairie OpenCV Voici quelques fonctions élémentaires de la bibliothèque très utiles : A. Fenêtres I/O La création d’une fenêtre : cvNamedWindow(window_name, fixed_size_flag); Autres fonctions de manipulation de fenêtre : cvNamedWindow(“ViewA”,1); cvMoveWindow(“ViewA”,300,100); cvDestroyWindow(“ViewA”); Observation d’une image : cvShowImage(window_name, image); Elle permet la copie d’une image dans le buffer fenêtre. Seulement l’intégralité du contenu de la fenêtre peut être modifié. La mise à jour de régions de la fenêtre doit être faite par traitements sur l’image. B. Image I/O IplImage* cvLoadImage(‘‘Img.png’’, colorness_flag); Cette fonction charge une image depuis un fichier, la convertit si nécessaire en couleurs ou en niveaux de gris et la renvoie. le format d’image est déterminé par son contenu. cvSaveImage(‘‘img_1.png’’, image); Permet la sauvegarde d’une image dans un fichier, le format est déterminé par l’extension. BMP, JPEG (via libjpeg), PNG (via libpng), TIFF (via libtiff), PPM/PGM sont supportés. C. Vidéo I/O CvCapture* cvCaptureFromCAM(camera_id=0); Permet l’initialisation de la capture depuis la caméra spécifiée. CvCapture* cvCaptureFromFile(videofile_path); Permet l’initialisation de la capture depuis un fichier vidéo 10 HARRACHE Khaled IplImage* cvQueryFrame(capture); La fonction ci-dessus récupère la trame suivante (image dans un flux vidéo). Elle renvoi NULL si aucune trame n’est disponible ou en cas d’erreur. cvGetCaptureProperty(capture, property_id); Permet la récupération des propriétés de capture (résolution, position dans la vidéo, etc) cvSetCaptureProperty(capture, property_id, value); Permet l’attribution des propriétés de capture (résolution, position dans la vidéo, etc) ! ! ! ! ! ! ! ! ! ! ! property id Property identifier : ! CV_CAP_PROP_POS_MSEC Film current position in milliseconds or video capture ! timestamp ! CV_CAP_PROP_POS_FRAMES 0-based index of the frame to be decoded/captured ! next ! CV_CAP_PROP_POS_AVI_RATIO Relative position of the video file (0 - start of the ! film, 1 - end of the film) ! CV_CAP_PROP_FRAME_WIDTH Width of the frames in the video stream ! CV_CAP_PROP_FRAME_HEIGHT Height of the frames in the video stream ! CV_CAP_PROP_FPS Frame rate ! ! CV_CAP_PROP_FOURCC 4-character code of codec cvReleaseCapture(&capture); Elle permet la libération de la ressource. D. Interactions clavier I/O cvWaitKey(delay=0); Cette fonction permet d’attendre un événement (un appuis au cavier) pendant delay ms ou indifiniment si delay=0. À appeler périodiquement pour vider le buffer clavier. Cette fonction permet aussi, de voir clairement l’aspect séquentiel d’un programme. 11