Acquisition du flux d`images sous Qt
Transcription
Acquisition du flux d`images sous Qt
Note d’application Acquisition du flux d’images d’une caméra IP sous Qt Ndack THIAM – P11A09 Génération d’alertes par traitement d’images Client : Yannick DICHAMPT Tuteur industriel: Pascal FICKINGER Tuteur Technique : Jacques LAFFONT Acquisition du flux d’images d’une caméra IP sous Qt Ndack THIAM GE3 Page 1 Acquisition du flux d’images d’une caméra IP sous Qt Sommaire Table des illustrations ............................................................................................................. 3 Introduction.............................................................................................................................. 4 1. Caractéristiques de la caméra IP .................................................................................... 5 2. Présentation de la librairie Qt et du logiciel Qt Creator ............................................. 5 2.1. La librairie Qt ................................................................................................ 5 2.2. Comment installer Qt ? ................................................................................... 6 2.3. 3. 4. Le logiciel Qt Creator ................................................................................... 7 Acquisition du flux d'images sous Qt ........................................................................... 8 3.1. Communication Caméra-PC ....................................................................... 8 3.2. Récupération d’images sous Qt ................................................................. 9 Algorithmes .................................................................................................................... 11 4.1. Initialisation des buffers, du serveur et des sockets ............................ 11 4.2. Connexion de la caméra au serveur......................................................... 11 4.3. Envoie de la requête d’images à la caméra ............................................ 12 4.4. Récupération du flux d’images de la caméra et analyse de l’entête HTTP ........................................................................................................................ 12 4.5. Déconnexion de la caméra ........................................................................ 13 Conclusion .............................................................................................................................. 14 Ndack THIAM GE3 Page 2 Acquisition du flux d’images d’une caméra IP sous Qt Table des illustrations Figure 1 : Synoptique du système ....................................................................................... 4 Figure 2 : Caméra IP TRENDnet TV-IP 422W ................................................................... 5 Figure 3 : Interface d'accueil Qt Creator ............................................................................. 7 Figure 4 : Communication Caméra - PC ............................................................................. 8 Figure 5 : Synthèse acquisition d'images sous Qt ............................................................ 9 Ndack THIAM GE3 Page 3 Acquisition du flux d’images d’une caméra IP sous Qt Introduction Face au nombre grandissant de personnes âgées en France, on assiste à une forte admission ces dernières dans les maisons de retraite. Leur assistance par le personnel soignant devient donc de plus en plus lourde. Afin d'aider le personnel soignant dans leurs tâches, notre client se propose de mettre en place un système de surveillance à distance et d'assistance. Dans ce cadre, il nous est proposé le projet intitulé "Génération d'alerte par traitement d'images". Cette note d’application permet de configurer une caméra IP de référence TV-IP 422W sous le système d’exploitation linux et d’acquérir le flux d’images de cette dernière sous le logiciel Qt creator. Ce flux d’image acquis à partir de la caméra permettra, après son traitement dans l’unité de traitement, de déterminer la présence d’une personne filmée dans une zone d’intérêt. La figure 1 ci-dessus donne une vue d’ensemble du système « Génération d’alertes par traitement d’images ». Figure 1 : Synoptique du système Ndack THIAM GE3 Page 4 Acquisition du flux d’images d’une caméra IP sous Qt 1. Caractéristiques de la caméra IP Figure 2 : Caméra IP TRENDnet TV-IP 422W La caméra ci-dessus que nous disposons est une caméra IP de référence TV-IP 422W. Elle présente les caractéristiques suivantes : Enregistrement vidéo MJPEG et MPEG-4 de haute qualité jusqu'à 30 images par seconde. La lentille infrarouge vous permet de bien voir de jour comme de nuit (visibilité la nuit jusqu'à 5 mètres) Supporte la mise en réseau TCP/IP, la messagerie SMTP, le HTTP, Samba et les autres protocoles Internet Protocol TCP/IP, UDP, DHCP, HTTP, RTP, RTSP, RTCP, etc. Vitesse de défilement de l'image : 30fps @VGA, QVGA, QQVGA Paramétrage de l'image : Brillance, contraste, saturation réglables Paramétrage de la vitesse de défilement 1 à 30 fps(trames par seconde) SE supportés Windows 2000/XP/Vista Hardware Specifications Système, SE Linux LAN 10/100Mbps Auto MDIX 2. Présentation de la librairie Qt et du logiciel Qt Creator 2.1. La librairie Qt Qt est une bibliothèque multiplateforme écrite en C++ et faite pour être utilisée à la base en C++, mais il est aujourd'hui possible de l'utiliser dans d'autres langages comme Java, Python, etc. Ndack THIAM GE3 Page 5 Acquisition du flux d’images d’une caméra IP sous Qt Qt est en fait plus qu'une bibliothèque c'est un ensemble de bibliothèques appelé Framework ce qui signifie que vous avez à votre disposition un ensemble d'outils pour développer des programmes plus efficacement. Les différentes bibliothèques, appelées "modules" que contient Qt sont entre autres : Module GUI : c'est toute la partie création de fenêtres. Module OpenGL : Qt peut ouvrir une fenêtre contenant de la 3D gérée par OpenGL. Module de dessin : pour dessiner dans une fenêtre (en 2D), c’est un module de dessin est très complet. Module réseau : Qt fournit une batterie d'outils pour accéder au réseau, que ce soit pour créer un logiciel de Chat, un client FTP, un client Bittorent, un lecteur de flux RSS... Module SVG : possibilité de créer des images et animations vectorielles, à la manière de Flash. Module de script : Qt supporte le Javascript (ou ECMAScript), qu’on peut réutiliser dans des applications pour ajouter des fonctionnalités, sous forme de plugins par exemple. Module XML : c'est un moyen très pratique d'échanger des données avec des fichiers formés à l'aide de balises, un peu comme le XHTML. Module SQL : permet un accès aux bases de données (MySQL, Oracle, PostgreSQL...). 2.2. Comment installer Qt ? Pour installer Qt, il faut d’abord commencer par télécharger Qt sur le site de Qt. On vous demandera de choisir entre la version LGPL et la version commerciale. Sachant que la version LGPL est gratuite, il faut donc la choisir. Il faut ensuite choisir entre : Qt SDK : la bibliothèque Qt + un ensemble d'outils pour développer avec Qt, incluant un IDE spécial appelé Qt Creator. Qt Framework : contient uniquement la bibliothèque Qt. Il est plus judicieux de choisir Qt SDK, car il contient un certain nombre d'outils qui vont grandement vous simplifier la vie. Choisissez soit "Qt pour Windows: C++", "Qt pour Linux/X11: C++" ou "Qt pour Mac: C++" en fonction du système d'exploitation que vous utilisez. Ndack THIAM GE3 Page 6 Acquisition du flux d’images d’une caméra IP sous Qt NB : Si vous êtes sous Linux, et notamment sous Debian ou Ubuntu, il est plus facile d’installer directement le paquet qtcreator avec la commande aptget install qtcreator. La version sera peut-être légèrement plus ancienne mais l'installation sera ainsi centralisée et plus facile à gérer. 2.3. Le logiciel Qt Creator Qt Creator est un environnement multi-plateforme de développement intégré (IDE) adaptés aux besoins des développeurs de Qt. Qt Creator fonctionne sur Windows, Linux/X11 et systèmes Mac OS X d'exploitation de bureau, et permet aux développeurs de créer des applications pour le bureau et plates-formes mobile. Bien qu'il soit possible de développer en C++ avec Qt en utilisant notre IDE (comme Code::Blocks) il est plus intéressant d'utiliser l'IDE Qt Creator que vous venez d'installer. Il est particulièrement optimisé pour développer avec Qt. En effet, c'est un programme tout-en-un qui comprend entre autres : Un IDE pour développer en C++, optimisé pour compiler des projets utilisant Qt (pas de configuration fastidieuse) Un éditeur de fenêtres, qui permet de dessiner facilement le contenu de ses interfaces à la souris Une documentation pour tout savoir sur Qt Voici à quoi ressemble Qt Creator lorsque vous le lancez pour la première fois : Figure 3 : Interface d'accueil Qt Creator Ndack THIAM GE3 Page 7 Acquisition du flux d’images d’une caméra IP sous Qt 3. Acquisition du flux d'images sous Qt Avant de commencer l’acquisition sous Qt, il faut d’abord s’assurer que la communication entre le PC et la caméra est bien établie. 3.1. Communication Caméra-PC La caméra IP peut être assimilée à un serveur qui répond à un client (PC). La caméra choisie est une entité http, donc pour pouvoir faire la communication avec le PC, nous devons utiliser le mode connecté TCP. Figure 4 : Communication Caméra - PC Elle n’est configurable que sous le système d’exploitation Windows. Ainsi, pour établir la communication entre la caméra et le PC sous Linux, on a deux possibilités : Creation d’une seule connexion Pour ce faire, suivre les étapes suivantes : o Déterminer l’adresse ip du réseau local, o Choisir une adresse IP Caméra fixe, pour notre application on a comme IP Caméra 172.16.31.224 avec un masque de réseau 255.255.240.0, o Mettre l’adresse IP du réseau local en DHCP, o Caméra doit se connecter automatiquement au réseau local, o Envoyer un Ping à l’adresse IP de la caméra via le terminal pour tester la connectivité. Ndack THIAM GE3 Page 8 Acquisition du flux d’images d’une caméra IP sous Qt Création de deux connexions Nous avons l’algorithme ci-dessous o Connexion caméra avec un IP statique 192.168.151.240, o Connexion réseau local avec un IP statique 192.168.151.241, o Changer de connexion pour basculer d’une connexion à une autre, o Envoyer un Ping à l’adresse IP de la caméra via le terminal pour tester la connectivité entre Caméra et PC. NB : Pour toutes les deux possibilités, il faut avoir préalablement configuré la caméra sous le système d’exploitation Windows afin de choisir une adresse IP statique à la caméra. Pour la configuration de la caméra, voir la note d’application de Mlle Derji dans le projet P10A08 « Analyse Automatique des postures ». 3.2. Récupération d’images sous Qt Nous disposons d'abord d'un programme codé en C++ qui permet d'acquérir le flux d’images de la caméra IP mais comme on devait intégrer tous les programmes dans une interface graphique sous Qt Creator, nous avons donc recompilé le même programme sous Qt Creator et ensuite les intégré avec les autres programmes (Détection de personnes et création de zones d’intérêt). Pour ce faire, il faut veiller sur deux points : Mettre les bonnes librairies (Qt Creator et caméra) et éviter les problèmes de conflits entre fonctions. Conflit entre les fonctions librairies Acquisiti on flux sous Qt Figure 5 : Synthèse acquisition d'images sous Qt Les bonnes librairies On distingue trois sortes de librairies à inclure : Les includes pour le langage C++ #include <iostream> #include <string> #include <fstream> Ndack THIAM GE3 Page 9 Acquisition du flux d’images d’une caméra IP sous Qt Les includes pour Qt #include <Qfile> #include <Qt> #include <QApplication> #include <QTcpServer> #include <QMessageBox> #include <QTcpSocket> #include <QtNetwork> #include <qlist.h> #include <QtGui> Les includes pour la caméra #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <arpa/inet.h> #include <time.h> Une fois que les bonnes librairies sont incluses, le deuxième défi à relever est de résoudre les problèmes de conflits entre fonctions. Les problèmes de conflits en fonction Lors de l’intégration du programme d’acquisition d’images avec les autres programmes sous Qt Creator, nous avons eu des erreurs dues à des conflits de fonctions. Effet, la fonction « connect », qui permet à la caméra d’établir la connexion au point d’accès afin d’établir la communication avec le serveur, est utilisée sous Qt comme une connexion d’un signal à un slot. Un signal est un message envoyé par un widget lorsqu'un évènement se produit (Par Exemple : on a cliqué sur un bouton). Un slot est la fonction qui est appelée lorsqu'un évènement s'est produit. Ndack THIAM GE3 Page 10 Acquisition du flux d’images d’une caméra IP sous Qt En effet, pour créer un bouton qui permet d’ajouter un type de zone d’intérêt, il faut définir la nature du bouton et ensuite créer un slot qui permet de connecter le bouton « ajouter » à la fonction associée à savoir « connexion du clic de bouton à l’ajout d’un type de zone ». Fonction connect pour le bouton « ajouter » Ainsi, pour éviter ce problème, il faut ajouter « :: » devant la fonction connect utilisée par la caméra. Ceci permet à Qt Creator de distinguer les deux fonctions et de chercher la fonction connect au-delà des librairies incluses pour Qt. Voir ci-dessous. Fonction connect pour connecter le point d’accès de la caméra 4. Algorithmes 4.1. Initialisation des buffers, du serveur et des sockets 4.2. Connexion de la caméra au serveur Ndack THIAM GE3 Page 11 Acquisition du flux d’images d’une caméra IP sous Qt 4.3. Envoie de la requête d’images à la caméra 4.4. Récupération du flux d’images de la caméra et analyse de l’entête HTTP Ndack THIAM GE3 Page 12 Acquisition du flux d’images d’une caméra IP sous Qt 4.5. Déconnexion de la caméra Ndack THIAM GE3 Page 13 Acquisition du flux d’images d’une caméra IP sous Qt Conclusion Cette note d’application permet, d’une part, d’établir la communication entre la caméra IP TRENDnet TV IP 422W et le PC sous le système d’exploitation Linux. D’autre part, elle permet de récupérer le flux d’images de cette caméra sous Qt Creator avec la librairie multiplateforme Qt. Pour pouvoir configurer la caméra sous Windows (étape préalable afin de choisir une adresse IP statique à la caméra avant de passer au système d’exploitation Linux), il faut se référer à la note d’application de Mlle Derji (Projet P10A08: Analyse automatique de posture). Ndack THIAM GE3 Page 14