Rapport final de notre projet - Exploitation d`un réseau de caméras
Transcription
Rapport final de notre projet - Exploitation d`un réseau de caméras
Université de Cergy-Pontoise Master 1 SI Projet : Exploitation d'un réseau de caméras intelligentes Etudiants : Christelle DESCHAMPS Landry VANNIER Encadrants : Pierre ANDRY Ghilès MOSTAFAOUI SOMMAIRE I. ENVIRONNEMENT DE TRAVAIL / LE RESEAU PHYSIQUE 1.Les caméras 2.Les réseau 3.Les caméras en réseau 4.Configuration de notre réseau II. TRAITEMENT DE L'IMAGE 1.Général 2.Notre système de détection III. L'AUTO ORGANISATION DU RESEAU 1.Choix du réseau 2.Apprentissage implémenté 3.Interprétation des résultats 4.Suivis IV. PRINCIPE DE FONCTIONNEMENT 1.Initialisation du Réseau 2.Apprentissage 3.Interprétation des résultats de l'apprentissage 4.Suivi V. EXPERIMENTATION 1.Simulation 2.Amélioration à apporter VI. ORGANISATION ANNEXES •User Guide of system •Guide installation du routeur •Guide du site •Principe de fonctionnement caméra •Carte cognitive •Bibliographies INTRODUCTION Le projet qu’il nous a été demandé de réaliser consiste en l’exploitation d’un réseau de caméras intelligentes. Notre réseau devra permettre à l’utilisateur (entreprise ou organisme ayant disposé les caméras dans leur locaux) de détecter puis suivre un homme circulant dans les lieux couverts par les caméras. L’idée donc de ce projet consiste en la mise en place d’un système intelligent puisque le réseau devra, de lui même, identifier les différentes caméras le composant et leur proximité afin de savoir qu’elles sont les caméras pouvant voir la personne à un moment donné, et aux suivants. Pour cela nous avons donc dû étudier ce qu’était l’auto-organisation et tous les systèmes préexistants qui y sont liés et, en particulier, les cartes auto-organisatrices de Kohonen suggérées dans le sujet. Nous avons également fait des résumés des bibliographies sur les réseaux de caméras et sur les cartes cognitives. Dans un premier temps nous vous présenterons l'environnement de travail du projet (matériel et mise en place du réseau). Dans une deuxième partie l'étude et le choix de son auto-organisation puis notre système de détection d'image. Dans une quatrième partie nous verrons l'aboutissement de toutes ces études : le fonctionnement de notre système fini puis quelques expérimentations faites révélant les problèmes rencontrées. Dans une dernière courte partie, vous trouverez un diagramme de Gantt présentant le découpage des tâches et la durée de chacune. I. ENVIRONNEMENT DE TRAVAIL / LE RESEAU PHYSIQUE 1. Les caméras a) Général Caractéristiques d’une caméra : le nombre d'images capturées par seconde, la résolution et les types de résolutions, le type de connexion, la distance focale, type d'image (couleur ou noir et blanc), le poids, la taille et le type de capteur. Pour chaque situation, il faut identifier le type de caméras dont on a besoin. Nous allons donc étudier les caractéristiques des caméras qui existent puis motiver notre choix. Pour notre projet, les caméras servent uniquement à la détection de mouvement. La distance focale et l'angle de vue vont entrer en compte. En effet, si la caméra a un angle de vu petit, elle ne détectera qu’un mouvement que dans une petite zone de l'espace. En d'autres termes, il ne faut pas mettre une caméra avec un petit angle de vue dans une grande pièce. Mais, on peut mettre plusieurs caméras et ainsi avoir plus de prises de vues. C'est un choix aussi bien économique que stratégique à faire. D'autres caractéristiques doivent entrer en compte, la résolution et la netteté de l'image. Une image avec beaucoup de bruit ne sera pas facile à exploiter. Tandis qu'une image avec une grande netteté et sans bruit sera plus facile à traiter. Un autre problème peut alors survenir, une image très grande, c'est-à-dire avec une résolution très importante, pour entraîner des temps de traitement beaucoup trop long. En effet, il sera plus rapide de travailler avec une image de basse résolution que l'inverse. Une image couleur demande plus de temps de traitement, car elle contient plus d'informations. En effet, elle contient des informations pour coder l'intensité dans 3 couleurs tandis que les images en niveaux de gris ne contiennent qu'un codage pour une seule intensité. Le bruit est un problème récurrent dans les caméras. L’étude des sources de bruit peut permettre de comprendre pourquoi ils apparaissent. Comme ce sont des capteurs photoélectriques, il y a donc une conversion qui est faite en intensité lumineuse et la tension de sortie. Il apparaît alors qu’un problème peut apparaître dans cette conversion. Un autre problème peut venir par des signaux d’amplitude trop élevée. Ce qui conduit à un phénomène d’éblouissement. En d’autres termes, cela se traduit par un emmagasinement trop élevé des condensateurs qui vont écouler la charge dans les cellules voisines. C’est ce qui est appelé l’effet halo ou traînée. D’autres types de bruits existent, comme le bruit photonique qui est dû à l’arrivée aléatoire des photons. Le bruit de remise à zéro est créé par le transistor Mos qui établit la tension de référence aux bornes du condensateur de conversion des charges collectées. En ce qui concerne l’amplificateur de sortie, il existe deux sources de bruit : le bruit blanc et le bruit en 1/f. Utilisant des caméras numériques dans notre projet vous en trouverez le principe de fonctionnement en annexe 4.Principe de fonctionnement d'une caméra numérique b) Notre matériel Nous disposons de WebCam Logitech, QuickCam Pro 4000, Dont les caractéristiques sont les suivantes : port USB2.0, taille des images maximum : 640*480 et débit d'images :30 images/sec. C’est une caméra qui correspond bien à notre projet, car la résolution permet de travailler avec de bonnes images, le débit des images est très bon et le rendu de l’image est tout à fait convenable. Elle possède toutes les caractéristiques pour mener à bien notre projet. 2. Les réseaux a) Général Les réseaux sont constitués de plusieurs machines reliées entre elles, cela permet une communication entre ces machines. Il convient d’étudier la façon dont elles sont reliées entre elles et comment elles communiquent. Le support physique est le moyen de communication utilisé pour que deux machines puissent dialoguer. Il en existe de deux natures : les liaisons avec et sans fil. Les liaisons avec fil sont nombreuses et très répandues dans les réseaux. Il s’agit de relier les machines par des câbles : paire de fils torsadés, câble coaxial et fibre optique. Dans chaque cas, il y a un connecteur sur toutes les machines qui permet de les relier entre elles par un fil. Les réseaux sans fil sont totalement différents. La communication entre les machines se fait grâce à des ondes hertziennes. Le type de liaison sans fils le plus connu et le plus utilisé est le Wifi, mais il existe d’autre type de liaison sans fil comme les liaisons infra-rouge et le Bluetooth. C’est une technologie qui n’est pas très répandue encore, mais qui est de plus en plus utilisée. Le principal avantage du Wifi est qu’il n’y a plus de fils. Ce qui veut dire qu’il y a plus de problèmes liés aux câblages du réseau. Ainsi, la liaison entre les machines est plus simple et moins encombrante. Mais ce type de connexion apporte un inconvénient majeur, il est plus simple d’écouter les messages envoyés. C’est-à-dire, que n’importe qui peut intercepter les communications tant qu’il se trouve dans la zone de portée de l’émetteur. Donc, ça pose un problème de sécurité. C’est pour cela que les réseaux Wifi ne sont pas encore généralisés. Les techniques de transfert sont : la commutation de circuits, le transfert de paquets, le transfert de trame et de cellules et les techniques de transfert hybrides. Ces différentes techniques permettent de communiquer entre les machines. Le principe de base de tous les réseaux est : une machine est reliée à une autre. Cette machine veut dialoguer avec cette dernière. Soit, elle la connaît, c’est-à-dire qu’elle connaît son adresse, soit, elle ne la connaît pas et là elle envoie alors son message dans tout le réseau en attendant une réponse de la machine réceptrice. Il faut donc coder le message suivant le protocole utilisé, propre au réseau. En général, le nom de l’expéditeur et le nom du destinataire sont codés dans le message avec le contenu du message. Ce qui permet au destinatair de pouvoir répondre à l’expéditeur. Dans notre projet, nous avons à considérer un réseau de type Wifi (Wireless Fidelity). Nous allons donc voir quelques caractéristiques des réseaux Wifi. La portée des ondes varie suivant les caractéristiques du lieu. C’est-à-dire, que l’on peut aller jusqu’à 50m dans un environnement de bureau. Une limite de 500m peut être atteinte avec la condition qu’il n’y ait aucun obstacle entre le récepteur et l’émetteur. Toutefois, cette limite peut être franchie si l’on utilise une antenne directive et là on peut atteindre jusqu’à quelques kilomètres. Mais dans la pratique, les stations ont une portée d’environ 20m voir moins si les ondes doivent franchir un mur porteur. Le protocole utilisé par le Wifi est le protocole 802.11, composé essentiellement de deux sous-couches : LLC (Logical Link Control) et MAC. Le rôle de la couche MAC est de faire en sorte que les terminaux écoutent la porteuse avant d’émettre. Si la porteuse est libre, le terminal émet, sinon il se met en attente. La méthode d’accès est appelée DCF (Distributed Coordination Function). Le DCF a été conçu pour prendre en charge le transport de données asynchrones, transport dans lequel tous les utilisateurs qui veulent transmettre des données ont une chance égale d’accéder au support. Pour palier aux problèmes de sécurité exposés plus haut, le groupe de travail IEEE 802.11 a mis en place le protocole WEP (Wired Equivalent Privacy), dont les mécanismes s’appuient sur le chiffrement des données et l’authentification des stations. Le problème, c’est que ce protocole n’est pas toujours implémenté et donc tous les réseaux Wifi n’offrent pas la même qualité de sécurité. Le système de cryptage provient de l’algorithme de RSA, un système de chiffrement très utilisé car il garantit un très bon niveau de sécurité. Les systèmes d’authentification utilisés sont Open System Authentication et Shred Key Authentication. Seul le second offre une véritable sécurité car il utilise un mécanisme de clé secrète partagée. Il existe 3 normes à 802.11 : a, b et g. Ce qui est différent, ce sont les débits. - Le 802.11a : norme pour les réseaux locaux utilisant comme fréquence le 5 Ghz pour des transferts jusqu´à 54 Mbps. - 802.11b : autre norme pour les réseaux locaux, utilisant le 2,4 Ghz avec une bande passante maximale de 11 Mbps. - 802.11g : norme la plus aboutie pour les réseaux étendus, exploite le 2,4 Ghz avec des débits maximums de 54 Mbps. Elle est amenée à remplacer les deux normes précédentes. Pour faire un réseau Wifi, il faut des cartes Wifi qui permettent de relier deux machines l’une à l’autre. Pour faire un réseau plus complexe, il faut ajouter un routeur Wifi. Les stations vont communiquer entre elles via le routeur. C’est lui qui va faire la liaison entre les machines. Comme la distance entre les machines ne doit pas dépasser 20m pour qu’il y ait une bonne connexion entre toutes les machines, il faut rajouter des routeurs de telle sorte qu’il n’y ait jamais d’interruption entre les connections. b) Matériel et mise en place Pour notre projet, nous serons amenés à utiliser des routeurs Wifi. Ce routeur est WL500g deluxe de ASUS, dont voici la description faite par ASUS : Complet et facile d'utilisation il offre des taux de transferts de 54 Mbps et toutes les fonctions attendues dans un routeur WLAN, dont le serveur DHCP, le partage d'IP, le Firewall, le VPN pass through, etc. Pour garantir la meilleure sécurité WLAN, il intègre aussi un puissant WPA et un Firewall WLAN unique pour protéger les données du WLAN. Cette solution futée intègre également des fonctions de "plug-and-share" (brancher et partager) via le port USB 1.1. En accord avec le lancement officiel du standard 802.11g, le WL-500g supporte cette technologie offrant une connectivité sans fil des plus rapides tout en assurant une compatibilité avec les périphériques sans fil 802.11b. Mais si votre environnement WLAN est exclusivement 802.11g, vous pouvez passer en mode "802.11g only "pour des performances de sortie encore meilleures. Mais le WL-500g ne se contente pas d'être un simple routeur destiné au partage de connexion Internet, il est aussi doté d'un port USB1.1 supportant par exemple un disque dur externe USB... branchez-le sur le routeur et vous pourrez créer facilement un petit serveur FTP destiné au partage de données sur votre réseau. Il peut aussi être configuré en serveur d'impression via le port USB ou le port imprimante intégrée. Autre utilisation possible, l'ASUS WL-500g peut supporter une webcam USB pour devenir un centre de vidéo-surveillance. Ce routeur offre tous les avantages dont nous avons besoin pour notre projet. Son taux de transfert offre de bonnes perceptives. Son aspect de routeur permet donc une bonne communication, c’est-à-dire qu’il va être capable de transmettre des informations des autres caméras à des caméras plus distantes. Ce qui va permettre de surveiller une zone supérieure aux 20m de portée optimale du Wifi. Ainsi, de vastes zones pourront être mises en surveillance. Dès lors que l'on place des relais tous les 15/20m. Le routeur a été prévu pour faire de la vidéo surveillance par ASUS. Ce qui a pour conséquence une facilité à installer une webcam USB sur le routeur. 3. Les caméras en réseau Une définition des réseaux de caméras est : caméra numérique avec serveur Web intégré, possédant sa propre adresse IP. De plus, cette caméra est équipée d’une connexion réseau direct, lui permettant de fonctionner de manière totalement autonome, c’est-à-dire sans ordinateur. Cela a pour but de capturer des images vidéo et de les diffuser en temps réel sur un réseau IP, comme Internet. En plus de la diffusion par Internet, la caméra réseau est souvent destinée à des applications de contrôle d’accès et de surveillance distante et cela aussi bien en milieu intérieur qu’en milieu extérieur. Plusieurs systèmes sont commercialisés pour permettre à des entreprises ou des particuliers de faire de la surveillance vidéo. La surveillance est au coeur des réseaux de caméras, que se soit pour une chaîne de production ou une éventuelle effraction ou autre. Mais pourquoi mettre les caméras en réseau ? La réponse est simple, une seule caméra ne possède qu’un angle de vue très réduit. Alors pour surveiller une chaîne de production, il est souvent nécessaire d’avoir plus d’une caméra. En effet, ce qui peut être apporté par plusieurs caméras, c’est la vision en 3D. Si pour certains cas, une seule caméra peut résoudre le problème, en général, plusieurs caméras sont nécessaires pour surveiller de grands espaces ou pour obtenir une vision en stéréo. Donc, le but des réseaux de caméras peut être de surveiller de grandes zones. C’est à dire, que l’on va relier plusieurs caméras ensemble pour que l’on puisse surveiller d’un seul poste de contrôle les différents lieux. Dans cette perspective, les réseaux de caméras ont été implantés dans divers endroits. Pour la surveillance du trafic automobile, les caméras servent à compter les voitures qui passent. La surveillance des personnes, c’est-à-dire, de mettre des caméras à des points stratégiques dans une ville pour surveiller les personnes qui passent. Des caméras en réseaux utilisées pour l'imagerie 3D sont les caméras servant pour la « motion capture ». En effet, dans cette perspective, les caméras sont reliées entre elles afin que l’on puisse construire une image 3D. Une personne est alors habillée avec des marqueurs et les caméras filment toutes la même chose, sous divers angles permettant ainsi une reconstruction d’images en 3D. Le principe est que les caméras sont tout d’abord calibrées. C’est à dire que chaque caméra filme une région bien définie de l’espace. A l’aide d’un gabarit, on peut régler les caméras pour que chacune d’entre elles filment le gabarit en entier. Ensuite, grâce au point situé sur la personne qui est filmée, on peut recouper les images par triangulation. Des exemples de réseaux de caméras sont nombreux dans le monde. Il faut savoir qu’il y a environ 25 millions de caméras de surveillance vidéo réparties dans le monde entier. La Grande-Bretagne compte à elle seule 2,5 millions soit un dixième des caméras dans le monde. A tel point que l’on estime à 300 fois par jour le nombre de fois qu’une personne se fait photographier en se baladant à Londres. De plus, la Grande-Bretagne va lance une surveillance des déplacements des véhicules. Ce réseau qu’elle est sur le point de lancer ou qui a été lancé depuis peu de temps, va faire de la Grande-Bretagne le premier pays au monde à enregistrer les déplacements de tous les véhicules sur les routes. En fait, c’est au moins 35 millions de plaques d’immatriculations qui vont être enregistrées par tout le réseau de caméras. Ces caméras étant reliées à un système GPS, il est alors facile de dire où se trouvait une voiture et de la suivre durant tous ses déplacements. C’est d’ailleurs le but de ce réseau, permettre à la police de retrouver les déplacements d’une voiture conduits par un individu recherché. D’autres types de réseaux ont été mis en place par des municipalités comme Lyon. La ville a mis en place un réseau de caméras permettant de faire des photos d’identité à 300 mètres. Les caméras ont une mobilité sur 360° et permettent donc d’identifier des individus commettant des crimes ou délits. Plusieurs projets sont en cours de développement. Ericsson, groupe suédois de téléphonie, cherche à associer la vidéo à la géolocalisation. C’est-à-dire, qu’il veut permettre aux utilisateurs de téléphone portable de se connecter aux réseaux de caméras routières afin d’en vérifier le trafic. Deux remarques apparaissent alors, la première est que les réseaux de caméras sont en plein essor. Le marché est en pleine expansion. Cela est dû aux divers événements liés aux divers actes terroristes dans le monde et cela afin de protéger la population. Mais, et cela constitue la seconde remarque, toutes ces caméras ne nuisent-elles pas à la vie privée à laquelle chacun le droit ? Cette dernière remarque constitue de large débat dans la scène politique. 4. Configuration de notre réseau Pour notre projet, nous utiliserons donc des webcams reliées chacune, via le port USB 2, à un routeur Wifi. Ce sont des équipements simples et faciles à mettre ensemble. C'est-àdire, que le routeur va directement reconnaître la caméra sans qu'il soit nécessaire d'installer un autre pilote dans le routeur. Bien entendu, dans une autre perspective, nous pourrions fusionner ces deux équipements pour créer un ensemble unique. Mais cela serait plutôt une perspective de produit fini et commercialisable. photographie d'un routeur et d'une webcam. Pour débuter, nous avons fait un réseau avec un routeur branché au pc via ethernet. Ce routeur est dit « central », car il communique avec tous les autres routeurs en Wifi et avec le pc via ethernet. C'est ce routeur qui sera destiné à recevoir le serveur du système dans une optique embarquée. Le serveur est un programme qui va écouter les autres routeurs et ensuite traiter ces informations, c'est-à-dire, qu’il va faire l'apprentissage du réseau puis il servira pour le suivi. Une fois embarqué, les résultats seront accessibles via une page web du routeur. schéma de la configuration de notre réseau. Le routeur « central » connaît les adresses MAC de tous les autres, et tous les autres connaissent son adresse afin de pouvoir lui transmettre les messages. Pour notre projet, nous avons configuré le réseau sans fils avec l'option WDS. dans le cas où l'on utilise une clé sans fil ou une carte wifi, il conviendrait de modifier l’option WDS en hybrid. Si l'on devait placer des relais (dans un couloir de plus 20m) il faudrait également voir à configurer les routeurs qui servent de relais : leur donner les adresses de toutes les caméras qui sont à moins de 20m (ou par exemple de toutes les caméras situées à gauche et à moins de 20m et que les caméras concernées connaissent l'adresse du routeur relais. Un routeur pourrait couvrir 40m quasiment de part et d'autre, attention à la distance entre relais : elle ne doit pas dépasser 20m puisque, comme dit précédemment, c'est la distance optimale ! Les routeurs avec leurs caméras servent à faire la détection de mouvement. Les caméras qui détectent un mouvement le transmettent au serveur via le routeur. Le serveur va recevoir les différentes informations envoyées par les routeurs. Nous sommes donc dans une configuration centralisée. Tout est centralisé par le serveur. Le serveur est soit sur le PC, c’est ce que nous avons fait. Il peut aussi être embarqué dans un routeur. Ensuite, les différentes informations telles que la détection de mouvements, les caméras hors-service ou en service sont visibles depuis une page web. Pour le PC, nous avons utilisé des pages en PHP. Dans le cas du routeur, il faut convertir les pages PHP en ASP. En effet, le routeur possède un serveur ASP seulement. Une autre architecture peut être utilisée, une architecture décentralisée. C’est à dire, qu’au lieu que tous les routeurs communiquent avec un seul serveur, nous mettons en place plusieurs serveurs qui auraient pour tâche de centraliser l’information de plusieurs routeurs. Ensuite, ces routeurs communiquent au routeur qui fait l’apprentissage et le suivi. C’est une solution très intéressante dans le cas où l’on travaille avec beaucoup de routeurs. Ces routeurs relais reçoivent des informations venant d’un certain nombre de routeurs. Il les envoient alors soit à un autre routeur relais soit au serveur directement. Ainsi, nous pouvons utiliser une grande quantité de routeurs sans saturer les capacités d’écoute du serveur. Comme toute configuration décentralisée, si un routeur relais tombe en panne, tous les routeurs qu’il avait en charge ne sont alors plus considérés. II. TRAITEMENT DE L'IMAGE 1.Général Suivant l’utilité des caméras, il convient d’en appliquer un traitement spécifique. Une caméra qui sert à prendre des photos à intervalles réguliers et une caméra qui doit détecter la présence d’un objet bien précis donnent lieu à des traitement d’images différents et très spécifiques. De plus, pour des caméras de surveillance qui sont observées par un gardien, on n’a pas forcément besoin de traitement d’image: il n’est pas nécessaire de mettre en place des automatismes. Toutefois on peut seconder un homme et améliorer la surveillance grâce à des traitements et/ou des mises en place de système de traitement d’images. Tout d’abord, une caméra envoie un flux vidéo, c’est-à-dire plusieurs images par seconde. Le but va donc être de traiter ces images une par une ou plusieurs à la fois et cela de façon cyclique. C'est ici que l'on parle de caméras intelligentes : il convient alors de parler des traitements qui peuvent être apportés. En effet, dans la surveillance, qui est le domaine de prédilection des réseaux de caméra, il faut un homme qui regarde sans relâche des écrans vidéo dans l’espoir de trouver ce qu'il est censé surveiller. L’apport du traitement d’images permet une meilleure surveillance. En effet, un homme qui regarde un écran sans relâche se fatigue très vite. En revanche, lorsqu’il est aidé par un système de traitement d’images, il n’est plus nécessaire de regarder l’écran sans arrêt. Un signal sonore, par exemple, peut permettre de prévenir la personne. Donc, tout le problème va être de mettre en place un système qui va aider un vigile dans la surveillance des mouvements. Le vigile n'aura donc plus à regarder un moniteur en permanence mais il sera prévenu dès qu'il y aura un mouvement. Ce qui nous intéresse pour notre projet, c’est la détection de mouvements, il y a plusieurs algorithmes. Nous en avons testé quelques uns : a) Différence d'images consécutives sommation de n images => I(t-1) sommation de n images suivantes => I(t) puis différence d'images : Idiff = I(t-1) – I(t) ensuite on applique un traitement sur cette image : binarisation avec un seuil. on peut alors compter la quantité de mouvements. on dit alors qu'il y a un mouvement seulement si cette quantité est supérieur à un seuil. l Point positif : La détection est simple à mettre en place. la complexité en terme de temps est assez bonne : une boucle for pour la sommation des n images et une autre boucle for pour additionner les pixels des n images. on répète ça deux fois pour la première itération puis une seul fois pour les autres itérations. puis il y a une autre boucle for pour la binarisation. et enfin une condition pour dire s'il y a eu un mouvement. au final, on parcourt 2n+1 fois la taille de l'image pour la première itération puis n+1 fois la taille de l'image. La détection donne de bon résultat dans le sens où lorsqu’une personne passe devant la caméra, le programme donne la bonne réponse. ● Point négatif : En visualisant l'image binaire, on s'aperçoit qu'il y a juste des “contours” et pas la personne en entière. ce qui pose comme problème : pour détecter un mouvement, il faut un petit seuil de quantité de mouvement pour être détecté. b) Image de référence On enregistre une image de référence : cette image doit être le fond vide du couloir ou de la pièce à surveiller. Cette image est prise au départ et n'est jamais modifiée. => Iref Sommation de n images => I(t) Puis différence d'images : Idiff = I(t) – Iref Ensuite on applique un traitement sur cette image : binarisation avec un seuil. On peut alors compter la quantité de mouvements. On dit alors qu'il y a un mouvement seulement si cette quantité est supérieur à un seuil. ● ● point positif : On n'a plus le problème précédent. on a une image binaire avec une grande quantité de mouvement, on voit la personne entière. On a la même complexité en terme de temps tout le temps : (n+1)*taille de l'image. point négatif : Il est impossible de déplacer la caméra sinon le programme va détecter un mouvement tout le temps après le déplacement. Cela pose problème aussi pour tout ce qui est changement de lumière, déplacement d'objet, ou plus généralement, dès qu'on modifie l'espace vu par la caméra. c) Image de référence avec remise à jour On enregistre une image de référence : cette image est prise au départ. =>Iref(t) Sommation de n images => I(t) Ensuite on applique un traitement sur cette image : binarisation avec un seuil. On met à jour l'image de référence avec I(t) : Iref(t+1) = (alpha)*I(t) + (1-alpha)*Iref(t) alpha flottant compris entre 0 et 1. On peut alors compter la quantité de mouvements. On dit alors qu'il y a un mouvement seulement si cette quantité est supérieur à un seuil. ● ● Point positif : Supprime les problèmes liés aux détections précédentes et cela sans pour autant augmenter de façon significative la complexité de l'algorithme. si une personne reste un peu trop longtemps sur place, elle ne sera plus détectée, on ne détecte que le mouvement. Point négatif : Quand une personne reste sur place, l'image de référence va apprendre la personne qui est devant elle. Ce qui pose un problème car : quand elle va sortir du champ de vision, la détection va mettre un temps pour apprendre l'image sans la personne devant. et pendant ce temps là, le programme va continuer de dire qu'il y a un mouvement. ce qui entraîne qu'il est pratiquement impossible de donner la position de la personne dans le champ de vison de la caméra. d) Image de référence avec remise à jour (2) On enregistre une image de référence : cette image est prise au départ. =>Iref(t) Sommation de n images => I(t) Ensuite on applique un traitement sur cette image : binarisation avec un seuil. On met à jour l'image de référence avec I(t) : i c'est un pixel en mouvement :Iref(t+1) = (alpha)*I(t) + (1-alpha)*Iref(t). sinon : Iref(t+1) = I(t). alpha flottant compris entre 0 et 1. On peut alors compter la quantité de mouvements. On dit alors qu'il y a un mouvement seulement si cette quantité est supérieure à un seuil. ● ● point positif : Même point positif qu'avant. Seulement ici, le phénomène de mouvement persistant après la sortie de la personne va être un peu plus faible. point négatif : Même problème que précédemment mais moins prononcé. e) Image de référence avec remise à jour (3) on enregistre une image de référence : cette image est prise au départ. =>Iref(t) sommation de n images => I(t) ensuite on applique un traitement sur cette image : binarisation avec un seuil. on met à jour l'image de référence : si on a fait m itérations : Iref(t+1) = I(t). sinon : Iref(t+1) = Iref(t) on peut alors compter la quantité de mouvements. on dit alors qu'il y a un mouvement seulement si cette quantité est supérieure à un seuil. ● point positif & négatif : Si m est faible, on est dans la situation de “différence d'image” et si m est grand, on est dans la situation de “image de référence”. et entre les deux, on est dans la situation de “image de référence avec mise à jour” mais la dissipation se fait d'un coup et pas progressivement. Il y a donc toute une stratégie à mettre en place pour la détection de mouvement. Cette stratégie va consister à paramétrer chaque caméra. Le paramétrage individuel de chaque caméra serait peut être la meilleure façon de procéder. Car, on peut alors modifier la détection suivant les contraintes du lieu. Mais il y aurait un problème, ce problème est que les caméras pouvant être déplacées, il faudrait donc modifier chaque fois les paramètres de chaque caméra. Ce qui peut correspondre à une manipulation assez complexe pour des utilisateurs non expérimenté. Une autre solution pourrait être de mettre un paramétrage par défaut et créer une interface pour modifier les paramètres de détection. Après plusieurs tests, nous avons pu déterminer que “image de référence avec remise à jour (2)” semble être un bon compromis entre les différents points positifs et négatifs. En plus de la détection de mouvements, nous pourrions mettre un place un calibrage. Un calibrage consiste à repérer des points dans l'espace réel (x,y,z) et ces même points dans l'espace image (i,j). le but va donc de retrouver les points de l'espace réel dans l'espace de l'image. Le but du calibrage est de connaître la position de la personne en mouvement dans l'image. Et ainsi, on peut renvoyer non pas l'information 0 ou 1 pour présence ou absence de mouvement, mais la position de l'individu. c'est une solution assez complexe à mettre en place, car il faut soit calibrer la caméra avec un motif dont on connaît déjà la position dans le plan (x,y,z) et trouver la position dans (i,j), soit il faut mesurer des points dans la pièce et les repérer dans l’image. Ainsi, nous pouvons connaître la position de la personne. Cette solution est donc assez contraignante à mettre en place, au niveau technique. De plus il faut recommencer cette opération à chaque fois que l’on modifie la position de la caméra. Une autre contrainte est la ressource nécessaire. En effet, nous sommes dans le cas d’un routeur et donc, nous n’avons pas de grande ressource et de grande puissance de calcul. Donc, nous avons décidé de ne pas utiliser cette technique car nous sommes amenés à faire beaucoup de test et donc à changer de place assez souvent les caméras. Cependant, d’autre choix sont possibles. Nous pouvons renvoyer la quantité de mouvement détecté normalisé. C’est-à-dire la quantité de mouvement divisés par la taille de l’image. Nous obtenons alors une information sur la taille de l’individu dans l’image et donc sa distance par rapport à la caméra. Nous pouvons aussi obtenir sa position par rapport aux axes de l’image. Sans utiliser le calibrage : On fait la somme des pixels à 1 de l’image binaire colonne par colonne. On obtient un petit alors une distribution des pixels sur l’axe des X. On peut alors rechercher le barycentre du résultat ou pour simplifier, on peut chercher le maximum et dire que c’est ce point qui est le centre de la personne. On peut faire la même chose en Y et ainsi obtenir une position de la personne dans l’image. Avec ces trois composantes, on obtient une position moins précise que le calibrage mais avec un résultat beaucoup plus simple en terme de mise en place et en terme de calcule. Comme on a pu le voir, il y a plusieurs paramètres qui rentrent en compte. dans notre programme, nous avons implémenté tous les algorithmes de détection décrits plus haut. Un fichier de configuration nous permet de les tester et de les comparer. de plus, dans ce fichier de configuration, il y a aussi d'autres paramètres qui peuvent être modifiés comme la taille de l'image, le pourcentage de la taille de l'image qui faut considérer pour dire qu'il y a un mouvement et le nombre d'images sommées. 2. Notre système de détection Notre système de détection est embarqué dans les routeurs Wifi. Le programme de détection de mouvement est lancé dès que le routeur est branché. Il attend que le serveur soit mis en place pour commencer son travail de détection de mouvement. Une fois qu’il a reçu un signal du routeur, il commence la détection de mouvement. Notre système de détection est configurable. C’est à dire, que nous pouvons modifier des paramètres comme la taille de l’image, le nombre d’images sommé, le seuil pour la binarisation ou encore la quantité minimale de mouvement qu’il faut avoir pour dire qu’il y a un mouvement et même le type de détection. Ce dernier paramètre nous a été utile pour comparer les performances des différents algorithmes. Celui que nous utilisons est celui avec l’image de référence que l’on remet à jour. Notre système fait une boucle infinie sur cette algorithme. Une fois qu’un mouvement est détecté, on envoie un message sur le réseau puis, il va enregistrer une image sur le routeur pour qu’elle soit lue par l’utilisateur. Notre système arrive à détecter des mouvement quand une personne passe devant. Néanmoins, un problème se produit quand on positionne l’objectif face à une vitre avec un vue sur l’extérieur. Notre système va détecter le déplacement des personnes dans la rue ou en cas de vent le mouvement des arbres et même des nuages. Comme il est impossible de dire aux passants de ne pas bouger ou de faire cesser le vent, on ne peut donc pas supprimer la cause. Mais, il est possible d’arrêter la conséquence. Pour cela, il faut modifier les paramètres du fichier de configuration. Nous pouvons augmenter le seuil pour la binarisation et/ou augmenter le seuil pour la quantité de mouvement. Nous arriverons toujours à trouver un seuil qui va permettre de rendre cela possible. Le problème possible, c’est que le système ne détecte plus rien. Et dans ce cas, la caméra est inutilisable. Dans ce cas, il faut modifier l’orientation de la caméra. Le problème de changement de luminosité, allumer et éteindre l’éclairage de la pièce, entraîne une détection de mouvement. Il n’est pas concevable d’annuler ce problème. En effet, l’annuler reviendrait à augmenter les seuils pour la binarisation et pour la quantité de mouvement. En d’autres terme, on reviendrait à annuler les effets de la détection devant une fenêtre. Notre système fonctionne bien avec des changement de lumière de faible amplitude. C’est-à-dire, qu’il peut s'adapter au changement de lumière créé par le soleil, de plus, on en revient dans ce cas là aux problèmes liés à la détection de mouvement devant les vitres avec une animation extérieure que l’on ne peut pas contrôler. Mais, pour en revenir au problème d’éclairage, s’il y a une lumière qui s’allume ou s’éteint, c’est qu’il y a une personne qui l’a allumée donc il est très intéressant de le laisser détecter ça. Surtout dans le cas d’une surveillance de nuit où tout est dans le noir ou la pénombre. Dans une optique de travail avec un apprentissage de type Kohonen, il n’est pas préférable de n'envoyer qu’une information binaire de détection de mouvement. En d’autre terme, une telle information est bonne en première instance car elle donne de bon résultat avec Kohonen mais, une information sur la position de l’individu dans l’image serait meilleure. C’est pourquoi, nous voulions tester la solution de projeter l’image binarisée sur les axes x et y. Nous venons de voir notre système de détection de mouvement. Maintenant, nous allons voir comment fonctionne notre système d’apprentissage. III. L'AUTO ORGANISATION DU RESEAU Le système que nous avons mis en place doit apprendre par lui même sa disposition, on se situe donc dans un contexte d'auto apprentissage pour un réseau de neurone. 1.Choix du réseau Notre but étant de diviser l'espace couvert par les caméras en zone on estimera pour notre réseau : les ensembles {routeur,caméra} en tant que neurone i de la couche d'entrée les zones seront les neurones j de la couche de sortie schéma de fonctionnement de notre apprentissage, L'utilisateur devra donc décider de NBCAMERAS {routeur,caméra} = nombre de routeurs reliés à une caméra du réseau, et NBZONE zones désirées. On estime une matrice Weight de poids, de taille [NBCAMERAS][NBZONE]. Chaque neurone d'entrée i est relié à chaque neurone j de sortie avec un poids Wij, indiqué dans la matrice Weight, initialisée par des valeurs aléatoires. Après cette première réflexion, se pose le problème de choisir l'algorithme d'apprentissage. Pour cela nous avons étudié les existants : en effet l'apprentissage se fait par modifications des poids. Mais il existe plusieurs algorithmes possibles pour cela chacun ayant sa « règle d'apprentissage ». Un des premiers apprentissages est la loi de Hebb qui repose sur le principe que deux neurones actifs simultanément sont fortement reliés entre eux. On distingue deux modes d'auto-apprentissage : un premier dit supervisé et un autre dit non supervisé. Le premier mode nécessite de connaître la sortie voulue du réseau pour avoir une image de comparaison : ce sont le perceptron, les couches auto-associatives, les réseaux de hopfield. Pour plus de détails sur ces réseaux vous pouvez consulter notre bibliographie et le résumé fait sur l'auto-organisation. Le second se fait dans le cas où l'on ne connaît pas la configuration de sortie : le système doit apprendre de lui même sa disposition sans aucun apport extérieur. On peut citer comme algorithme existant dans ce mode celui de Kohonen. Dans notre cas nous ne connaissons pas la configuration du réseau : on veut pouvoir découper l'espace en zones mais on ne sait pas, puisque l'on pourrait changer les caméras, laquelle est située à côté de laquelle et comment découper et regrouper les champs de recouvrement pour avoir un certain nombre de portions (dites zones) de l'espace. On ne va donc pas présenter au système la sortie désirée lors de l'apprentissage, puisqu'on ne la connaît pas. C'est donc en mode non-supervisé que le réseau apprend ! Nous avons donc opté pour l'algorithme de Kohonen qui marche très bien dans les localisations spatiales puisque qu'il part du principe de rapprocher les neurones de sortie des entrées données : on va ainsi rapprocher une zone de certaines valeurs d'entrée. Pour nous l'entrée à chaque fois est en fait un vecteur représentant l'état des caméras : elles détectent ou non le mouvement donc on a un vecteur val[NBCAMERAS]. Ainsi avec Kohonen on va rapprocher les neurones de zones de certains vecteurs entrée : ensuite pour chaque vecteur possible on n’activera qu'un neurone de sortie qui correspondra à une zone de l'espace. 2. Apprentissage implémenté L'algorithme est le suivant durant l'apprentissage : − On présente plusieurs entrées possibles − On va alors, pour l'entrée présentée calculer le neurone de sortie gagnant : celui qui est le plus proche en terme de distance. Le calcul de la distance peut se faire de différentes façons : le programmeur peut prendre une distance euclidienne, comme une distance de Manhatan ou de Mahalanobis ou encore de Pearson. Pour notre part nous sommes restés sur la distance euclidienne : la distance de Manhatan (somme des valeurs absolues) est sûrement plus rapide mais moins précise. − Pour chaque neurone d'entrée on va alors modifier les poids correspondants les reliant au neurone gagnant grâce à la formule : wij = wij + α (val[i] – w[i][j]) où j est le neurone (zone) gagnant wij est le poids reliant la caméra i au neurone j val[i] la valeur (1 ou 0) indiquant la vue ou non d'une personne par la caméra i α un coefficient d'apprentissage qui diminue au cours de l'apprentissage Dans notre cas l'apprentissage est arrêté dès que le système se stabilise c'est-à-dire dès que la matrice de poids n'évolue plus. Aujourd'hui on a donc décidé que si deux fois de suite la matrice restait la même on arrêtait, en supposant que la personne se déplace bien aléatoirement dans le couloir et ait le temps de couvrir tout l'espace : sinon il est fort possible que l'apprentissage, n'ayant pas testé toutes les possibilités s'arrête. On pourrait voir à donner un nombre minimal d'entrées ou encore un temps minimal pour décider de l'arrêt de l'apprentissage, en plus du non changement de la matrice de poids qui reste primordial !On pourrait également voir à tester simplement(introduction d'une variable calculant les changements) que la matrice ne se modifie pas 2 fois de suite et non uniquement une fois, pour se donner une assurance de plus. La difficulté d'une telle implémentation réside dans le choix des coefficients d'apprentissage, la qualité des données et leur pertinences. Pour notre système et un tel algorithme il est important que la personne circule partout dans le couloir et ne reste pas dans un même coin surtout les premiers temps où les constantes d'apprentissage sont plus importantes et modifient donc de façon plus importante les poids que par la suite, leur valeur étant diminuée à chaque nouvelle entrée. Pour assurer un maximum de déplacement de la personne nous avons mis une variable, paramétrable par l'utilisateur dans le fichier de configuration du serveur : « tpsApp » qui permet de définir le temps de prise en compte entre deux mouvements : ainsi tous les « tpsApp » mais le système va prendre en compte le mouvement courant, laissant donc à la personne un temps égal à un peu plus de la moitié de tpsApp pour se déplacer. Pour nous les coefficients permettant de définir le coefficient d'apprentissage sont initialisés à 1 (on suppose ainsi que l'on est en plein apprentissage) et on les diminue à chaque itération en les divisant par 1,2 à chaque fois. Les poids sont initialisés par des valeurs aléatoires entre 0 et 0,5 pour éviter une trop grande différence au début et permettre des sélections différentes de neurones gagnants. 3.Interprétation des résultats Lorsque la matrice de poids n'évolue plus d'une fois à l'autre on a terminé l'apprentissage. Chaque caméra est donc plus ou moins fortement reliée à une zone : vient donc l'étape que nous appellerons «d'interprétation des résultats » . Cette étape, va nous permettre de réaliser le suivi en se servant des résultats du Kohonen. Pour cela on pourrait voir les choses de différentes façons : on regarde pour chaque caméra qu'elles sont la ou les zones pour lesquelles les poids les liant sont les plus forts et on peut estimer ainsi que la caméra appartient plus ou moins à une zone. On pourrait calculer carrément, un pourcentage d'appartenance à chaque zone en reprenant les principes de logique flou. De notre côté, nous avons préféré faire tester un maximum d'entrées différentes : le test consiste donc à faire circuler une personne qui va essayer de rentrer dans tous les champs possibles des caméras et essayé également de voir les différentes configurations qu'on peut avoir : les endroits où la personne ne serait vue que par le caméra i et la j puis celle où elle est vue par i, j et m puis j et m ... Le but est de tester le maximum d'entrées possibles ! C'est à cette fin que le fichier de configuration du serveur comporte une variable nommée « nbPoint » qui permet de définir le nombre de points que l'utilisateur veut tester pendant son interprétation, il peut mettre un nombre de points très grand pour être sûr de parcourir au maximum le couloir. De plus il a également la possibilité de régler le « temps d'interprétation » : variable tpsInter qui permet de définir le temps en ms de prise en compte entre deux mouvement de la part du système. C'est-à-dire que si l'on règle ce temps sur 2 000, le système ne va réellement écouter les détections de mouvement que toutes les 2 secondes. Si le nombre de tests (nbPoint) est très grand on peut diminuer ce temps et tester quasiment tous les points du couloir : faire un pas par un pas. Pour chaque entrée du système, on va calculer la neurone gagnant, soit la zone correspondante. On estime alors que toutes les caméras à 1 à ce moment peuvent appartenir à la zone et on remplit alors la matrice d'appartenance : pour toutes les caméras j tel que sa valeur dans le vecteur donné en paramètre au Kohonen est à 1 on met à 1 tous Appartenance[i][j] avec i la zone gagnante. Autrement dit : Pour toute caméras j tel que Val[j]=1 Appartenance[winner][j] = 1 // winner étant la zone gagnante (neurone gagnant). Fin Pour Cette étape se termine donc dès le nombre de points testés. Avant de redonner la main au serveur on déduit de la matrice d'appartenance (des caméras à une zone i), celle d'adjacence entre deux zone i,j : on regarde alors pour chaque caméra, si elle appartient à deux zones alors c'est que ces zones peuvent être considérées comme adjacentes. Autrement dit Pour toute caméra j Pour tous i Si Appartenance[i][j]=1 Pour tout k > i Si Appartenance[k][j]=1 Alors Adjacence[i][k]=Adjacence[k][i]=1 Fin Si Fin pour Fin Si Fin Pour Fin Pour 4. Suivi La phase d'interprétation terminée on va pouvoir réaliser le suivi correctement. Comme on l'a décidé le suivi doit afficher, pour un mouvement donné les caméras de la zone dans laquelle à lieu le mouvement et le numéro éventuelle des zones adjacentes. Donc à partir du moment ou le système à détecté un mouvement, le serveur n'a plus qu'à envoyer le vecteur correspondant au Kohonen, celui-ci calcule le neurone gagnant (la zone correspondante) puis grâce aux matrices d'appartenance et d'adjacence il peut inscrire dans un fichier le numéro de la zone, les caméras qui peuvent y être incluses et les numéros des zones adjacentes. Ces deux dernières informations sont séparées par un x afin de pouvoir les identifier. Ces informations seront ensuite lues par un programme php qui permet d'afficher les images désirées, d'où l'importance de la séparation entre numéro de caméra et numéro de zone. En fait le serveur ne déclenche le Kohonen que si le vecteur est différent du précédent. De son côté, le Kohonen déclenché en suivi ne va récrire le fichier que si le neurone gagnant n'est pas le même que précédemment. Ainsi, dès qu'un mouvement est détecter le serveur écrit automatiquement le fichier (Etat.txt) présentant l’état d’alerte afin que le programme php l’indique, mais on ne fait aucun calcul ou réécriture de fichier inutile : on évite de récrire le fichier de la zone concernée alors qu'il ne va pas changer. Le programme php lit en fait régulièrement les deux fichiers écrits par le serveur et le Kohonen pour régénérer la page php qui permet de visualiser les caméras détectant un mouvement. IV.PRINCIPE DE FONCTIONNEMENT L'utilisateur doit lancer le serveur et brancher les différents routeurs après avoir vérifié le fichier de configuration du serveur (éventuellement des caméras). Notre système va alors fonctionner en 4 phases distinctes : −l'initialisation du réseau −l'apprentissage −l'interprétation −le suivi Nous allons donc décrire ci-dessous chacune de ses phases ainsi que les paramètres les concernant dans le fichier de configuration du serveur. Si vous ouvrez le fichier « serveur.conf » vous pouvez distinguer 7 variables : −NBCAMERAS est un entier désignant le nombre de caméras dans votre réseau, à vous donc d'y insérer votre valeur. −NBZONE est un entier désignant le nombre de zones qui vont être identifiées au cours de l'apprentissage, c'est-à-dire le nombre de portions découpant votre espace. −NBPOINT est le nombre de points considérés pendant l'interprétation : un plus grand nombre vous assure plus de précision ! Mais toujours plus de temps pour faire l'interprétation −tpsApp est le temps en millisecondes pour l'apprentissage : c'est-à-dire le temps considérés entre chaque capture de mouvement, pendant tpsApp ms le système ne regardera pas les mouvements. Plus ce temps sera long plus les points sélectionnés pourront être éloignés. −tpsInter est également un temps en milliseconde, c'est le même principe que précédemment mais pour l'étape d'interprétation −tpsSuivi même chose mais pour l'étape du suivi. −tpsRas temps que met le routeur entre chaque signalement d'absence de mouvement (Rien A Signaler) vers le serveur. 1.Initialisation du Réseau Les routeurs et le serveurs peuvent être branchés et lancés dans n'importe quel ordre (à partir du moment où l'on prend soin de configurer le serveur : essentiellement les variables NBCAMERAS et NBZONE), sans conséquence néfaste pour le système. Nous allons donc voir comment fonctionne un routeur puis la façon dont le réseau va être initialisé par le serveur, qui gère au final tout le déroulement du système. schéma de l'initialisation des routeur par le serveur. a) Démarrage d'un routeur Un routeur (mis à part le routeur servant au serveur) est automatiquement relié à une caméra l'ensemble {routeur,caméra} représentant un neurone du réseau. Pour image on peut distinguer deux modes pour le routeur : − mode identification C'est le mode au démarrage du routeur : après que l'utilisateur l'ait branché il va tenter d'envoyer un « n » au serveur et ce jusqu'à ce qu'il y arrive. En effet le système marche de telle façon que si le n n'est pas envoyé c'est que le routeur ne trouve pas le serveur. Une fois le n bien envoyé et donc reçu par le serveur, ce dernier, détectant alors un nouveau {routeur, caméra} va renvoyer un numéro d'identification au routeur (compris entre 1 et NBCAMERAS, nombre de caméras du réseau déterminé par l'utilisateur). − mode détection de mouvement C'est le mode de fonctionnement classique : une fois son n envoyé correctement et son numéro d'identification connu le routeur lance le programme de détection du mouvement. Il envoie alors un message au serveur à chaque détection de mouvement de la part de la caméra qui lui ait reliée. Pour résumer Au démarrage du routeur connecté à une caméra, tous les programmes d'interprétation de l'image sont effacés par le programme « post boot », créé par nos soins, afin de pouvoir correctement interpréter nos programmes par la suite. Le routeur va alors envoyer des n en permanence au serveur via wifi jusqu'à ce que celui-ci le reçoive et lui envoie, en retour, un numéro d'identification. Le routeur communique ensuite en permanence avec la caméra qui lui est reliée via usb. A chaque détection de mouvement il envoie alors un message au serveur qui reste à l'écoute de chaque routeur en permanence. b) Au niveau du serveur A chaque détection d'un nouveau routeur (n reçu), le serveur va y attribuer un numéro identifiant la caméra correspondante. En même temps le serveur tient compte de la nouvelle caméra connectée en en comptant le nombre au fur et à mesure. Une fois que le nombre de caméras détectées par le serveur (soit le nombre de n reçus) égal à NBCAMERAS (soit le nombre de caméras données par l'utilisateur dans le fichier de configuration et correspondant au nombre de caméras du réseau) le serveur considère l'initialisation du réseau faite. Cette initialisation faite, chaque {routeur, caméras} est donc caractérisé par un entier compris entre 1 et NBCAMERAS.. Les informations sont alors stockées dans un fichier sous forme de table : adresse IP => numéro de caméra Le système passe alors à la phase d'apprentissage. Si un arrêt y survenait on ne serait pas obligé de reprendre la phase d'initialisation puisque le système réutilisera le fichier qu'il a créé avec la table. Si l'utilisateur veut modifier son réseau : ajouter ou retirer une caméra il devra effacer le fichier créé et contenant la table citée précédemment puis modifier le fichier serveur.conf en conséquence. 2. Apprentissage Cette phase va permettre au système de découper l'espace en « zone » grâce au Kohonen. Dans le fichier serveur.conf c'est la variable « tpsApp » qui est à définir (ou à laisser tel que) pour l'apprentissage. Dans un système fini on pourrait ne pas laisser à l'utilisateur la décision de cette variable, aujourd'hui elle sert principalement en terme de test. Elle permet de définir les temps d'écoute des détections de mouvements par le serveur : une détection ne peut être prise en compte que si elle intervient tpsApp ms après la précédente. Ainsi on laisse le temps à la personne circulant dans les couloirs de se déplacer d'avantage pour ne pas prendre en compte des points trop proches (cf partie III.2 de ce rapport). Une fois l'initialisation du réseau faite, les NBCAMERAS {routeur, caméras}identifiés, le serveur reste encore à l'écoute de chaque routeur en rentrant dans la phase d'apprentissage. On considère alors la variable « continu », initialisée à 1, indiquant l'apprentissage en cours. schéma de l'apprentissage. Le serveur ne prend alors en compte que les messages reçus tous les intervalles de temps égaux à tpsApp. Dès qu'il reçoit, à ce moment un message dénotant une détection de mouvement de la part d'un routeur/caméra, il va traduire le mouvement détecté par un vecteur de taille NBCAMERAS : en continuant d’écouter tous les routeurs, il met un 1 dans le vecteur pour ceux qui ont aussi détecté le mouvement, et un 0 pour les autres. Ce vecteur est alors envoyé en paramètre à la fonction « learning » du kohonen dont la valeur de retour est stockée dans la variable « continu ». La fonction « learning » va en fait modifier les poids de la matrice du kohonen afin de diviser l'espace en zone. Elle renvoie un entier=0 si l'apprentissage est terminé (la matrice des poids n'a pas évolué), 1 sinon. Ainsi le serveur récupère cet entier lui indiquant que l'on se trouve encore ou non dans la phase d'apprentissage. Ainsi si il reçoit 0, il passe dans la troisième phase : l'interprétation des résultats. On connaît alors la matrice des poids qui n'évoluera plus dans notre système. Le kohonen, avant de renvoyer 0 au serveur, va stocker cette matrice dans un fichier kohonen.conf afin que si l'on arrêtait le système pour le reprendre dans le même état on n’ait pas à refaire cette phase d'apprentissage. L'utilisateur devra donc faire attention à effacer ce ficher s’il veut réorganiser son réseau (ajouter, supprimer, déplacer une ou des caméra(s) ou encore changer le nombre de zones). 3.Interprétation des résultats de l'apprentissage Une fois l'apprentissage terminé, on a une matrice des poids qui permet au système d'attribuer une zone à un certain vecteur d'entrée (donc à un mouvement donné à un certain emplacement du couloir). Pour réaliser notre suivi on voudrait interpréter une zone : savoir qu'elles sont les caméras concernées et les zones adjacentes : ceci justifie donc notre phase « interprétation ». Pour celle-ci une variable « tpsInter » est à modifier dans le fichier serveur.conf (ou à laisser telle que de la même façon que la variable tpsApp précédente). Elle permet de régler l'intervalle de temps pendant lequel le serveur ne tiendra pas compte des mouvements détectés. L'autre variable liée à l'interprétation est la variable NBPOINTS : elle permet de définir le nombre de points minimums à tester pour juger de la pertinence des tests interprétés. Dans l'idéal il faut tester toutes les entrées possibles : toutes les valeurs du vecteur que l'on peut avoir, compte tenu de la disposition des caméras, c'est-à-dire tous les croisements possibles entre les champs de vision des caméras. Il est donc difficile de juger du nombre de points minimum : l'utilisateur peut tester des endroits qu'il juge caractéristiques ou à tester, pour voir l'attribution faite. Avec plus de temps il serait bien de mettre un très grand nombre de points et un temps tpsInter plus court afin de tester quasiment tous les « points » du couloir : l'interprétation total en sera un peu plus longue car on ne peut pas mettre un temps trop court non plus, une seconde reste un minimum acceptable. Il faut ensuite multiplier ce temps par le nombre de points voulus pour connaître le temps minimal total d'interprétation. schéma de l'interprétation En fait, le serveur continue à écouter les routeurs, dès que l'un d'eux signale un mouvement, il interprète le vecteur des caméras et l'envoie en paramètre à la fonction « interprétation » du kohonen. Celle-ci va appeler la fonction « computeWinner » du kohonen afin de récupérer le numéro du neurone gagnant et renvoyer en paramètre ce numéro ainsi que le vecteur des caméras à la fonction « modifZones ». Cette dernière va modifier la ligne indicée par le numéro du gagnant dans la matrice Appartenance (c'est-àdire la ligne indiquant l'appartenance de chaque caméra à la zone d'indice le numéro). Si la caméra est à 1 dans le vecteur il met l pour l'appartenance de la caméra à la zone sinon il laisse la valeur qui y était. La fonction interprétation du kohonen renvoie un entier au serveur indiquant la fin ou non de l'interprétation : sachant que l'interprétation n’est terminée que lorsque NBPOINTS ont été testés, la fonction renverra 0 si c'est le cas, 1 sinon. Quand l'interprétation du côté kohonen estime avoir finis (qu'il a testé les NBPOINT), juste avant de renvoyer 0 au serveur, il déduit de la matrice d'appartenance alors fixée celle d'adjacence. Il inscrit alors un « x » dans le fichier kohonen.conf (à la suite de la matrice de poids déjà enregistrée en fin d'apprentissage: cf 2 ci-dessus), qu'il fait suivre de la matrice d'appartenance, puis d'un nouveau « x » pour finir par la matrice d'adjacence. Ainsi, la phase d'apprentissage se termine et le système, en cas d'arrêt dans l'étape suivante pourra reprendre à partir de cette dernière. Cela semble fort utile : si on arrête le système pour le redémarrer par la suite dans le même état il sera alors inutile de refaire toutes les phases précédentes. Par contre, comme on l'a indiqué ci-dessus, si l'utilisateur rajoute des caméras, en retire, en déplace ect... il devra effacer tous le fichiers kohonen.conf et modifier le serveur.conf si nécessaire. 4. Suivi Le suivi consiste en l'affichage de toutes les caméras de la zone visualisant un mouvement sur une page html, avec l'affichage d'une alerte. S’il n'y a pas de mouvement la page html présente la dernière zone où a lieu le mouvement avec un message signalant l'absence de mouvement, et la possibilité d'afficher la caméra voulue. Pour cette phase aucun paramètre n'est à définir préalablement par l'utilisateur. schéma du suivi. En effet, le serveur, sachant l’interprétation terminée, n’a plus qu’à continuer de recevoir à intervalles de temps très proche (on ne regarde plus tpsApp ou tpsInterp mais toutes les 190ms) l’état des caméras. Si une caméra indique une détection de mouvement, il continue de regarder l’état de chaque caméra et envoie, au bout du temps d’écoute, au kohonen le vecteur interprété seulement s’il est différent du précédent. Ainsi en passant en paramètre le vecteur, à la fonction computewinner, le kohonen calcul le neurone gagnant lui indiquant donc la zone où se trouve la personne. Si le neurone gagnant est différent du précédent il lit la matrice d’appartenance afin d’enregistrer sur un fichier le numéro de la zone concernée puis tous les numéros des caméras concernées et enfin, après un marqueur x, en lisant la matrice d’adjacence, il indique les zones voisines. Ce fichier peut ensuite être lu par le php, qui réactualise la page html permettant de visualiser toutes les caméras de la zone où à été détecté le mouvement avec en plus le message d'alerte (avertissement d’un mouvement) qu’il connaît pour avoir lu le fichier « Etat.txt » créer par le serveur. La boucle du serveur est alors infinie : il écoute en permanence les caméras et réitère les processus de cette quatrième phase à chaque détection de mouvement de la part d’une caméra. V. EXPERIMENTATION 1. La simulation La simulation fonctionne sur le même principe d’apprentissage. En effet, les deux programmes possèdent les fonctions d’apprentissage avec les mêmes variables. La différence vient donc de la détection du mouvement. En effet, il est impossible d’ajouter à ce programme le même système de détection de mouvement car il n’y a pas de caméra réelle. Notre simulation se présente sous la forme d’un plan que l’on créé. Une petite interface en console demande de positionner les murs, les entrées/sorties et l’emplacement des caméras. Une fois fini, un personnage apparaît et que l’on peut déplacer à notre convenance. Dès que ce personnage arrive dans une case avec au moins une caméra, il active l’auto organisation. C’est-à-dire qu’il va déclencher l’une des phases suivantes : l’apprentissage, l’interprétation et le suivi. La phase d’initialisation vue précédemment se faisant pendant la mise en place des caméras dans le plan. Ainsi, nous avons une simulation de notre système. Une autre fonction de notre système de simulation est de pouvoir fonctionner avec notre système réel. Cela signifie que nous pouvons nous pas simuler le déplacement mais simuler les zones créer par notre système d’apprentissage. En utilisant cette fonction, on peut visualiser en direct les modifications des zones apportées par l’algorithme mis en place. Toutefois, il faut au préalable avoir créé le plan du site à surveiller. Il est impossible pour la simulation de recréer le plan avec la disposition des caméras car si une telle chose était possible, notre apprentissage serait alors beaucoup plus simple et cela voudrait dire que notre système arrive à modéliser l’environnement de travail. Nous n’avons pas trouvé comment faire une telle chose et nous doutons que cela soit possible. Donc, nous devons renseigner la simulation afin qu’elle puisse nous donner une idée du découpage des zones. Une fois renseigné, la simulation entre dans une boucle infinie. Pendant cette boucle, elle va lire un fichier créé par notre système réel. Ce fichier contient toute la matrice de poids de notre apprentissage. La simulation va alors initialiser les poids de sa matrice avec les poids indiqués dans le fichier. Ensuite, la simulation va lancer le suivi sur le plan créé. En fait, nous simulons le déplacement d’une personne dans tous les points du plan. Ainsi, nous obtenons le neurone gagnant et donc la zone dans laquelle se trouve la personne pour un point donné du plan. Comme on visite tous les points du plan, on obtient une carte avec la répartition des zones. Un petit problème est à considérer quand même, c’est la différence entre la simulation et le système réel. En effet, dans notre simulation, les caméras on une perception en deux dimensions. Tandis que les caméras perçoivent des mouvements dans un espace en trois dimensions. Ce qui peut produire des petites erreurs d’interprétation dans notre simulation. De plus, la simulation n’apporte pas une très grande précision dans le champ de vision des caméras. Donc, les résultats sont à prendre avec un recul. 2. Amélioration à apporter Une première amélioration pourrait être apportée à la simulation. En effet, notre simulation a des caméras qui perçoivent uniquement dans deux dimensions. Pour être plus fidèle, on pourrait créer une simulation avec une vision dans un espace. C’est-à-dire créer une simulation avec des logiciels en 3D. Nous aurions ainsi une plus grande fidélité dans la simulation car nous pourrions alors implémenter notre détection de mouvement. Le but serait d’avoir une simulation complète et fidèle de notre système. Les caméras auraient alors une grande importance que dans notre simulation car dans notre simulation, les caméras ont une vision et une détection de mouvement parfait dans le sens où dès qu’une personne entre dans la case qui fait partie du champ de vision, la caméra le détecte automatiquement et immédiatement. De plus, l’angle de vision serait plus fidèle à la réalité. Sans oublier que notre détection de mouvement fonctionne uniquement en binaire. Il faudrait donc modifier cela pour un système similaire à notre système réel. Une autre amélioration peut être mise en place dans notre système : l’apprentissage en continu. Il serait bien de pouvoir déplacer une ou plusieurs caméras afin d’avoir un système qui va s’adapter aux déplacements et apprendre ces déplacements. Nous n’avons pas pu tester cela car, nous n’avons pas eu le temps. Mais l’idée serait soit d’avoir une commande pour dire au système qu’une caméra a été déplacée. Ainsi, le système va recommencer l’apprentissage. Cette méthode est possible à faire, il faut arrêter le système et supprimer le fichier « kohonen.conf », ainsi le serveur va repartir à zéro. Mais cette méthode n’est pas convenable au sens où nous l’entendons. Nous voudrions que le système ne recommence pas tout mais seulement ce qu’y a changé. Pour faire une telle chose, il faudrait savoir comment le système réagissait avant pour être comparé maintenant. Une possibilité pourrait être d’enregistrer tout les vecteurs dans l’interprétation ainsi que les résultats donnés. Cette base de donnée servirait alors de comparaison pour les vecteurs du suivi. Dès qu’une modification est apportée, nous pourrions alors refaire un apprentissage. On fait apprendre à notre système les vecteurs de notre base de données avec le vecteur différent qui a été modifié. Les résultats obtenus ne sont pas connus mais avec un peu de temps, nous pourrions tester et dire si cette idée est bonne ou mauvaise. VI. ORGANISATION CONCLUSION Le code présenté aujourd'hui permet le suivi d'une personne circulant dans des couloirs, à condition que celle-ci soit seule. En effet, l’apprentissage par Kohonen ne permet pas d’apprendre une telle chose. Le résultat serait alors une mauvaise attribution des zone et donc sans réel possibilité d’avoir un suivi. Par la suite nous pourrions limité ce défaut en vérifiant que toutes les caméras actives comprises dans la zone. Mais ceci ne marcherait que si les personnes se trouvaient éloignées l’une de l'autre, et qu'il n'y ait pas trop de personnes. On pourrait juste conclure de la présence de plusieurs personnes mais pas du nombre ni des zones réellement concernées à moins de retirer les caméras non comprises et tester différents cas, si une zone est fortement activée. Malheureusement cela ne nous donnerait aucune certitude : le meilleur moyen serait d'allier à notre système une reconnaissance de personne. Malgré tout notre système donne des résultats convenables : l'apprentissage nous donne sur plusieurs test des résultats satisfaisants, la détection de mouvement fonctionne bien sauf dans le cas où l'on regarde une fenêtre et où l'on peut détecter le mouvement des arbres ou des nuages. Notre système fonctionne donc dans les conditions d'un espace clos que l'on veut surveiller alors que personne n'est censé y être présent et ce tant que l'on ne regarde pas en direction d'une fenêtre trop proche et qu'il n'y a pas de forte différence de luminosités intervenant dans l'espace couvert. ANNEXES •1.Présentation du système (en anglais) •2.Guide installation du routeur •3.Guide du site •4. Principe de fonctionnement caméra numérique •5. Premiers résumés des documents étudiés - réseau de caméra, - carte cognitive, - auto-organisation •6.Bibliographie ANNEXES 1 User's Guide I. Presentation of system Thanks to the system you can known if there is one person in your site and visualised her during she mooves in it. In this user's guide we describe you the material and its configuration : what you have to do to install your network. So we present you the system of file and how put the program in the router. After this, we explain you what you have to do to help the system learned is disposition. To finish, we will describe your interface where you can see the image of the cameras. II. Material To make the network you need cameras (webcameras in our test) linked via USB to one router (ASUS 500g deluxe) as you can see in the picture : So we need one router per camera and probably one more because you have to connect one to the computer which served as server of system. III.Installation of system To install your system you have to : 1. 2. 3. 4. 5. Configure the network Prepare the router Execute server and branch router Do the learning with the system Do the interpretation with the system After all that points you can see a personn mooving in the site. 1.Configuration of network You have to decide of one router which is linked to the server. This router named « central router » have to known all the MAC's address of the others. All the router have to know the MAC's adress of the « central router ». You have to configure all the router in « hybrid » . After that the routers can communicate in the network. In other side you have to put all the IP's adress in a samed network (if the IP's address of the computer is 192.168.2.1 the routers have to had adress samed : 192.168.2.*). With a network configure as this the server will be able to communicate with all the routers. 2. Prepare the router The program which permit to detect motion must be intall in the router. It's why you have to prepare the router : 3. Execute server and branch router After the preparation of network and routers you have to modificate a file before execute server. In this file, named « server.conf » you have to enter the number of cameras which constitute your network and the number of zone you want for your space. You have to decide of a number of points which can caracterise your site : its mean points with different configuration (different vector of camera which can see or not). The three other variable can rest as it is. So after that, you can execute server and branch the routers. When you see in your console that all the cameras is known by the server, it's mean that the system is in the learning mode and know it's important to do what you can read in the 4 point. 4. Do the learning with the system Doing the learning means help the system to know where the cameras are in the site. To do this, the system needs that one person mooved in the site. So we have to walk in the site, taking car to don't stand too many time in a particulary space : you have to parcour in all the points of the site whithout do a perfect trajectory. If the system take points too near it doesn't learned correctly and centralise all the site in one zone ! More in the first times, you have to make the system considered points spaced. When the learning is finish the system print it in the console, so we have to do the interpretation with it. 5. Do the interpretation with the system Doing the interpretation means help the system to know what cameras is include in what zone. To do this, the system needs that one personn mooved in the site. So we have to walk in the site, taking car to stand in differents points : test to be in points where your are seing by certain cameras and no other. At each time you must test a different point if it's possible. When the interpretation is finish the system print it in the console, so now you will able to see a personn mooved in the site. 6. View person mooved in the site To observe the site and view the zone where a person is detected, you have to execute the program named « central », after what, you will see a page which propose you to choise the cameras you want to see. If there isn't a person in the site, you have the possibility to choise a camera to observe its image, and the message that indicate you that there isn't alert. If no, you can see a message incated alert and the cameras of the zone where the person is. IV.To conclude This system can detected one person but if there is more person the system can return a fault zone (zone where the personnes aren't). When we do the learning or the interpretation, that need a long time, it have to be only one person in the site. The system don't oblige you to do back this two stage : the configuration doing by the system is saved in files : there is one file writed by the server (etat.txt) that indicate the identification of the router, and later, after learning and interpretation, the kohonen write a file (kohonen.conf) with the matrice wich describe the system. So you have not to do again this stape if you don't change your network. But, if you want to changed a cameras, after learning, you have to delete the file « kohonen.conf » and doing again the learning and the interpretation. If you want to add or remove a camera you have to del the « kohonen.conf » (if its exist) and the file « etat.txt » too. When a person is in your site the system, you can see an alert in the « control screen » and the zone where the person must be mooved. ANNEXES 2 ASUS WL 500g deluxe Mettre à jour / changer le firmware du routeur. Pour modifier le firmware, il faut un fichier .trx, ces fichiers se trouve sur le net. Le site d' ASUS en propose, d'autre site mette aussi à disposition des fichiers pour mettre à jour le routeur. Il faut bien faire attention qu'il ne s'agit pas d'un fichier comropu sinon le routeur ne fonctionnerait plus. Le site http://oleg.wl500g.info/ propose des firmware permettant d'effectuer des « telnet » ou des « ssh ». Pour notre projet, nous avons besoin d'effectuer ce genre d'opération. La mise à jour est une opération risquer car s'il y a un problème, le routeur pourrait ne plus marcher. En premier lieu, il faut remettre les paramêtes à zéro : ● connectez-vous au routeur : pour cela : ● allumez le routeur ● branchez le câble éthernet sur le routeur et sur votre PC. ● ● Paramettrez vous ordinateur pour vous cannecter sur le routeur. Ici, il s'agit de configurer votre PC pour qu'il se connecte à l'adresse du routeur. (Voir le manuel pour de plus ample explication) entrez le login et le mot de passe : admin & admin si vous n'avez rien changer. ● Sur la page web du routeur, il y a un menu à gauche. Appuyez sur « System Nat » puis sur « firmware custum ». ● vous arrivez ensuite sur une page vous indiquant la version de votre firmware ainsi que la possibilité de mettre un autre firmware. Clicker sur explorer pour selectionner un firmware sur votre PC. ● Ensuite, il n'y a plus qu'à valider votre choix. Et si tout se passe bien, 80 secondes plus tard votre routeur redémarre et fonctionne avec le nouveau firmware. ● Pour vérifier que ça marche reconnettez-vous sur le routeur à la même page que pour changer de firmware et constater le changement de la version. Configurer le ssh du routeur ● Connectez-vous au routeur via un telnet (telnet 192.168.1.1) ● il faut créer un dossier dans l'arboresce du routeur : ● ● ● le -p sert dans le cas où le dossier existe, pour ne pas afficher de message d'erreur. Ensuite, il faut gérérer des clés, pour DSS : ● ● mkdir -p /usr/local/etc/dropbear dropbearkey -t dss -f /usr/local/etc/dropbear/dropbear_dss_host_key la clé RSA : ● dropbearkey -t rsa -f /usr/local/etc/dropbear/dropbear_rsa_host_key ● à ce stade, le ssh ne marche pas encore, il faut lancer la commande dropbear pour que ça fonctionne. ● Si vous lancer dropbear comme ça, quand vous allez éteindre votre routeur, il vous faudra recommencer à vous connecter via un telnet au routeur et relancer la commande dropbear. ● ● Pour palier à ça, il faut créer un fichier script qui va être lancer à chaque démarrage : ● mkdir -p /usr/local/sbin/ ● echo «#!/bin/sh» >> /usr/local/sbin/post-boot ● echo «dropbear» >> /usr/local/sbin/post-boot ● chmod +x /usr/local/sbin/post-boot ● flashfs save && flashfs commit && flashfs enable cette derniere commande permet de flasher le contenu de la mémoire flash du routeur dans la partie dure et donc d'enregistrer définitivement les modifications. Monter une clef USB ou un DD USB sur le routeur Les deux premières étapes sont là seulement pour permettre à ceux qui n'ont pas de partition ext3 d'en avoir. Pour faire ça, il faut que votre périphérique soit branché sur le routeur ou sur le PC pour les deux premières étapes et ensuite sur le routeur. ● Il faut d'abord créer un partition avec la commande fdisk. Mais pour cela, vous devez démonter le périphérique de stockage USB, avec umount. Il n'est pas nécéssaire de créer une partition, c'est selon la capacité de votre mémoire et votre envie. ● Ensuite, il faut formater votre partition à l'aide de la commande « mke2fs -j » pour mettre la partition en ext3. ● Monter la clef : mount -t ext3 /dev/scsi/host0/bus0/target0/lun0/part1 /mnt ● copie du routeur sur la clef : tar cvO -C / .version bin/ etc/ lib/ sbin/ usr/ www/ var/ | tar x -C /mnt ● création des répertoire nécéssaire pour le bon fonctionnement : mkdir -p /mnt/tmp && mkdir -p /mnt/dev && mkdir -p /mnt/proc && mkdir -p /mnt/mnt ● ● ● demonter la clef : umount /mnt mettre la cléf comme boot : nvram set boot_dev= «/dev/scsi/host0/bus0/target0/lun0/part1 » mettre les changement à jour : nvram commit ● pour mettre les droits en lecture écriture sur le périphérique USB, il faut mettre la commande : mount -o remount,rw,noatime /dev/scsi/host0/bus0/target0/lun0/part1 ● pour mettre les droits en lecture seulement, il faut taper la commande suivante : mount -o remount,ro /dev/scsi/host0/bus0/target0/lun0/part1 / ● il est aussi possible de mettre les droits en lecture-écriture aux démarges : il faut mettre la commande dans le fichier /usr/local/sbin/post-boot et suivre les même instruction que plus haut avec le flashfs save pour mettre les modifications en dure. ANNEXES 3 Guide du site Notre site est hébergé par Free. Son adresse Internet est : http://networkcameras.free.fr. Un menu à gauche permet une navigation sur toutes les rubriques crées. Il se décompose donc en 5 grandes parties : Sujet, où l’on peut prendre connaissance de la description du sujet tel que présenter par les •enseignants. Les deux autres rubriques du sujet (Etudiants et Enseignants) étaient destinées à citer, et peut être faire une petite description des intervenants dans ce projet, mais il est fort probable qu’on les retire. Organisation , cette partie est découpé en trois sous partie, tel que figurant dans le menu déroulant, visible dès que l’on appuie dessus : Découpage Landry Christelle La première permet d’accéder à la description de l’organisation du projet au niveau de la répartition des tâches, on pourra y mettre un diagramme de gantt, en cours de réalisation et bientôt disponible. Les deux autres parties décrivent l’organisation de chacun des étudiants pour leur partie respective. - Landry Dans cette partie, propre à Landry, on peut voir tout le travail effectué par ce dernier que ce soit au niveau de ces objectifs propre, de son organisation et des rapports réalisés progressivement, de ces codes, ainsi que de ses tests et simulations. - Christelle De la même façon, dans cette partie, propre à Christelle, on pourra voir tout le travail effectué par cette dernière. - Documents Cette partie nous a permis de recenser tous les documents nous permettant d’étudier les trois thèmes dont on avait à faire la bibliographie et qui sont l’Auto Organisation, les cartes cognitives, et les réseaux de caméras. A la fin de chacune de ses parties nous avons insérer un résumé fait pour mars, à partir de l'étude des documents citées. - Rendus Ici, se trouve tout ce qui concerne le travail rendu : les codes, simulation avec test et rapport. ANNEXES 4 Principe de fonctionnement caméra numérique •Nous vous présentons ici le fonctionnement d’une caméra numérique. En effet, comme nous allons utiliser des caméras numériques pour notre projet, il convient donc d’en connaître le principe. Le principe de base est le suivant, des capteurs sont situer derrière une lentille. Ces capteurs reçoivent la lumière qui travers la lentille et transforme la lumière en signal électrique qui pourra être en suite traité. Ces capteurs sont donc semblable à une rétine d’un ?il humain. C’est d’ailleurs l’étude de la vue qui a permit de mettre au point toutes ces techniques de captures et de traitements. Ces capteurs sont utilisés dans de vaste domaine comme l’astronomie, la biologie, la photographie et bien d’autre. Il existe deux principaux type de capteurs. Les capteurs CCD qui existent depuis plus de 25 ans et les capteurs Cmos. •Les CCD, Charge coupled devices, sont, avant tout, des composants intégrés qui permettent le transfert individuel de paquets de charges électrique sur une certaine distance physique. Dans le processus de construction d’un signal vidéo, ils collectent les charge photoélectrique et organisent leurs successions dans un ordre simulant un balayage de la surface photosensible. Ces rétines CCD nécessitent la mise en ?uvre d’un processus de fabrication particulier et imposent un adressage séquentiel de l’ensemble des points de l’image. La conversion entre la charge et la tension + amplitude du photo-signal se fait juste avant la sortie. •Les capteurs Cmos utilisent une méthode de traitement décentralisé au niveau de chaque photo site. Ce qui permet de mettre en ?uvre un processus standard et autorisant l’accès aléatoire à chaque point de l’image. Le concept de base est celui du pixel actif. Ce qui associe au sein de chaque phot site au minimum un capteur de lumière et un amplificateur. Les rétines Cmos ont certain avantage comme son plus faible coût et des résolutions potentiellement très élevées. Néanmoins, Cmos possède un inconvénient qui est sa moindre adaptation à de faible lumière. Pour obtenir une image en couleur, il faut appliquer des filtres sur les capteurs sinon, une image en niveau de gris sera obtenue en sortie. Les filtres généralement utilisés sont les filtres RVB. Cependant, ces filtres étant très absorbants, une solution est de prendre des filtres utilisant des couleurs complémentaires cyan, jaune et magenta. Mais cette opération n’apporte pas de grande différence car la conversion dans l’espace de couleurs RVB engendrent des pertes équivalentes. ANNEXES 4 Carte cognitive. Définition. Plusieurs formulations de cette définition ont été trouvées. Voici quelques-unes unes [39] [40] [41] [42] [43][44][45]: C’est un concept donné E. Tolman en 1948. Cette notion repose sur la représentation mentale qu’un individu se fait de l’organisation de l’espace dans lequel il se trouve. Cette représentation interne mentale implique que l’individu est capable de déduire des relations, des distances ainsi que des directions qui lient différents points de l’espace sans avoir eu une expérience directe. Ainsi, l’individu peut atteindre un but en passant par des chemins, sans jamais les avoir emprunter auparavant. Les expériences en psychologie cognitive montrent que cette carte cognitive est construite grâce à la perception visuelle. La carte cognitive traduit de manière visuelle et dynamique des représentations mentales. Elle permet d'introduire les facteurs cognitifs dans l'analyse et dans la présentation des résultats. C'est Tolman qui utilise le premier le terme de carte cognitive pour décrire comment ses rats, et par analogie l'humain, se comportent dans un environnement. Dans un sens général, une carte cognitive est une construction mentale qu'on utilise pour comprendre et connaître l'environnement. Cela suppose que les gens stockent de l'information sur leur environnement, qu'ils utilisent ensuite pour prendre des décisions spatiales. Une carte cognitive aide à simplifier, coder l'interaction complexe de l'homme avec son environnement. C'est une représentation mentale des connaissances environnementales. Une carte cognitive inclut les connaissances sur des lieux aussi bien que des connaissances sur les relations humaines spatiales. Elle entraîne l'intégration d'images, d'informations, d'attitudes sur un environnement: elle n'est pas une entité isolée du contexte. Selon Golledge, il n'y a pas une seule carte cognitive dans la mémoire. Nous en construisons en fonction d'événements spécifiques: une carte cognitive est dynamique. Il s'agit d'un processus compose d'une série de transformations psychologiques par lesquelles un individu acquiert, stocke et décode de l'information sur l'emplacement et les attributs d'un phénomène, dans son environnement spatial de tous les jours. La carte cognitive peut aussi être définie comme étant l'union entre la cognition spatiale et la cognition environnementale. La carte cognitive (Debray,1992, p.43) est un outil qui permet, à travers 7 paramètres d’analyse de l’acte d’apprentissage, de mieux positionner ces difficultés ou de proposer des activités pertinentes par rapport à des besoins donnés. Dans une approximation, on peut définir une carte cognitive comme une représentation matérielle graphique, qui se veut une modélisation d’une représentation mentale d’une personne sur un problème donné. Cette carte est composé d’idée ou de concepts reliés par des liens. Pour nous, notre but va d'être de créer une carte de la topologie des routeurs. Utilisation. Les cartes cognitives sont utilisées dans des domaines aussi varié que les modélisations comportementales, la prise de décision, la stratégie… Il n’y a donc pas une seule utilisation de la cartographie cognitive mais plusieurs et cela pour tous les domaines. Elle peut donc être utilisée à chaque fois que l’on a un objet et un individu qui s’en fait une représentation mentale. Avec diverse méthode, l’individu peut par lui-même ou des tiers personnes peut faire une représentation graphique de la modélisation mentale qu’il s’en fait. Un autre point qui pourrait poser problème, c’est le passage entre deux individus. Néanmoins, il réside une limite de la cartographie cognitive. Cette théorie est expliquée dans un document trouvé sur Internet [41], elle entreprend de démontrer que la représentation ne sera jamais identique au représenter. Concept central de la psychologie cognitive, le concept de carte cognitive a été initié par les recherches de Tolman (1948) en psychologie animale. Pour notre cas, ce sont les algorithmes non supervisé qui vont être utilise pour construire notre carte cognitive. Cette algorithme va nous permettre de trouver la répartition des routeurs dans un lieu donné. Méthode d’élaboration. Une première méthode est de demander à la personne de faire elle-même la carte. C’est une méthode simpliste mais qui permet de comprendre la personne à l’origine de la carte. Ainsi, on a une carte cognitive de sa représentation mentale. Cette méthode n’est pas valable si le résultat que l’on attend n’est pas la représentation mentale qu’un individu a cru comprendre mais la représentation exacte sur un sujet précis. Prenons en exemple notre sujet, une personne qui lit le sujet va se faire une représentation mentale du sujet. Mais si cette personne n’a aucune connaissance en informatique ou en sciences, sa représentation mentale ne sera pas celle attend pour répondre au sujet. Une autre méthode est de prendre plusieurs experts pour faire cette représentation. Il convient pour les experts de ce mettre en accord sur les concepts entrant en jeu. Mais ici, la difficulté est de mettre en accord tous les experts. Et faute d’accord, le résultat ne remplira pas les attentes. Afin d’avoir une approche plus rigoureuse et sans la problématique du désaccord des experts, il est possible de prendre la cartographie cognitive comme un réseau de neurones formels, et ainsi, utiliser les algorithmes d’apprentissage. Dans ce cas, les concepts deviennent des neurones. Les liens de causalité sont alors perçut comme les poids d’apprentissage des connexions dans le réseau. Il convient qu’une personne qualifier mette en place les concepts intervenant dans la représentation. Deux types d’apprentissages sont possibles, l’apprentissage supervisé et non supervisé. L’avantage de l’apprentissage non supervisé est que cela ne nécessite pas une grande connaissance sur le monde que l’on souhaite modéliser. Dans tous les cas, il y a une démarche d’acquisition des données puis de traitements des données pour former une première carte. Ensuite, il faut valider cette représentation puis la modifier en conséquence. Cette dernière étape est à répéter tant qu’il n’y a pas une validation du modèle. Pour notre projet, ça va être l'algorithme de Kohonen qui va répartir les différentes caméras dans des zones et ainsi construire une carte cognitive pour notre système. Bibliographie Réseaux de neurone RechercheLivres [1]Réseaux neuronaux, une approche connexioniste de l'intelligence artificielle -P.Bourret, J.Reggia, M.Samuolides - Teknea, 1991. [2]Applications of neura Network - Edited by AlanF.Murray - Kluwer Academic Publishers Fichiers extraits de Internet [3]Exemple d'utilisation des SOM : Catégoritsation de patrons syntaxiques [4]Exemple d'utilisation des SOM : Classification des défauts de rails [5]Rapport d'un stage avec description des cartes de Kohonen [6]Cours sur les cartes de Kohonen [7]Cours (Historique et évolution) sur les réseaux de Neurones, l'apprentissage, les cartes de Kohonen [8]Sujet d'un projet informatique décrivant les SOM et leur adaptation possible dans les cas d'&étude d'image ou de texte [9]Exemple d'utilisation des SOM pour l'analyse de fichier Logs [10]Exemple d'utilisation des SOM [11]Exemple d'utilsation des cartes de Kohonen au travers d'un sujet de stage [12]Exemple d'utilisation des SOM sur un exemple médicale : détéction de l'hypovigiliance [13]Cours sur le réseaux de neurones, l'auto apprentissage en citant kohonen [14]Exemple d'utilisation des SOM : détection d'intrus dans un système informatique. On retrouve ici un algorithme d'apprentissage [15]Exemple d'utilisation des SOM avec plusieurs algorithmes d'apprentissage [16]Cours sur les réseaux de neurones non supervisés [17]Cours sur les réseaux de neurones, définition de l'apprentissage supervisé VS non supervisé Extrait de These de Mr Andry [18]pdf extrait de la thése soutenu par Mr Andry [19]zip du pdf précédent Liens Internet [20]Les différents liens recensés ci dessous avec leur description LIENS RESEAUX DE NEURONES [21]http://www.cnrs.fr/Cnrspresse/n386/html/n386a09.htm [22]http://fr.wikipedia.org/wiki/R%C3%A9seau_de_neurones [23]http://apiacoa.org/teaching/nn/ [24]http://patrice.dargenton.free.fr/ia/ialab/rnautoconfigurant.html [25]http://www.isib.be/Etudiant/eln3/rapide.htm [26]http://sn1.chez-alice.fr/presentation/dedoubl.html [27]http://www.vieartificielle.com/article/index.php?action=article&id=56 [28]http://www.grappa.univ-lille3.fr/polys/apprentissage/sortie005.html LIENS AUTO ORGANISATION [29]http://www.irisa.fr/bibli/publi/theses/2003/priam/priam.html [30]http://diwww.epfl.ch/w3mantra/tutorial/french/competitive.html [31]http://www.inria.fr/rrrt/tu-1092.html [32]http://www.vieartificielle.com/article/index.php?action=article&id=56 [33]http://www.vieartificielle.com/article/index.php?action=article&id=56 LIENS CARTES DE Kohonen [34]http://www.vieartificielle.com/article/index.php?action=article&id=62 [35]http://www.scico.ubordeaux2.fr/~corsini/Pedagogie/ANN/main/node40.html#algo:som [36]http://perso.wanadoo.fr/kohonen/ [37]http://condor.ebgm.jussieu.fr/~debrevern/COURS/SOM/2004/img0.html Carte cognitive Fichiers extraits d'Internet [38]Une analyse cognitive du concept de vision entrepreneuriale - Fréderic CREPLET et Babak MEHMANPAZIR - juillet 1999 [39]L'approche socio-cognitive de la formation de la stratégie : apports théoriques et méthodologiques. - Sylvie EHLINGER [40]Une analyse cognitive du concept de vision entrepreneuriale - Fréderic CREPLET et Babak MEHMANPAZIR - juillet 1999 [41]peut-on approcher les représentations mentales grâce la cartographie cognitive? - Flrence RODHAIN [42]le modèle des cartes cognitives de graphes conceptuels : un modèle graphique d'aide la prise de décision. [43]les cartes cognitives, outil de compréhension des acteurs d'une organisation en changement? [44]la cartographie cognitive : outil pour une démarche d'essence heuristique d'identification des facteur clés de succès [45]Utilisation d'une carte cognitive pour le problème de la sélection de l'action dans un cadre multi-motivationnel Liens Internet [46]http://tecfa.unige.ch/staf/staf-f/deiaco/staf11/ex1/11carte_cogn.html [47]http://tecfa.unige.ch/staf/staf9597/pilard/staf15/cogn_map.html [48]http://www.ymca-cepiere.org/guide/docs/la_carte_cognitive.htm [49]http://www.i-km.com/cartes_cognitives.htm [50]http://www.lps.ens.fr/~risc/ecocog/Berder2000/resumes.html Réseau de caméras Document [51]Cours de Mr MOSTAFAOUI sur la détection du mouvement [52]Dossier sur la vision artificiel [53]Tutorial sur accv2000 [54]Exemples de ce que peut faire un réseau de caméras. Liens Internet [55]http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/MANESSIS/lite r/ [56]http://www.axis.com/fr/index.htm [57]http://www.topachat.com/comprendre/wifi.php [58]http://www.commentcamarche.net/wifi/wifiintro.php3 [59]http://www.monde-diplomatique.fr/2001/08/MAZOYER/15444 [60]http://cyberie.qc.ca/jpc/2004/04/certains-dossiers-ont-un-comportement.html [61]http://ecolesdifferentes.free.fr/GBBIGBRO.htm [62]http://www.oqlf.gouv.qc.ca/ressources/bibliotheque/dictionnaires/Internet/fich es/8360922.html Documents [63]PDF sur uclinux Liens Internet [64]http://france.asus.com/products4.aspx?l1=12&l2=43&l3=0&model=61&mod elmenu=1 [65]http://materiel.net/details_WL-500gDeluxe.html