Difference between revisions of "Détection de trafic automobile et de d’attente aux feux"

From air
Jump to navigation Jump to search
 
Line 30: Line 30:
   
 
-Récuperer les sources a l'adresse svn suivante :
 
-Récuperer les sources a l'adresse svn suivante :
 
http://subversion.assembla.com/svn/m2m_surveillance_flux_autoroutiers
 
http://subversion.assembla.com/svn/m2m_surveillance_flux_autoroutiers
 
   
 
-Le projet se découpe en 4 sous-projets maven et une partie C++:
 
-Le projet se découpe en 4 sous-projets maven et une partie C++:

Latest revision as of 17:52, 4 March 2016

  • Enseignant : Didier Donsez, Thomas Calmant
  • Etudiants: CEYTE Christophe, DAMONT Pierre-Rémy.

Description

Ce projet a pour d'effectuer des décomptes de trafic automobiles à differents feux d'une ou plusieurs villes. Les resultats seraient rendus à un serveur central sous forme de relevés. Ces relevés pourraient être ensuite analysés et interprétés afin de modifier l'ordonnancement des feux, ou une modification de l'urbanisme. Il pourrait aussi servir à reperer une voiture en infraction dans le cas du passage alors que le feu est rouge

Materiel et configuration Requise

  • Deux ordinateurs dont un ayant une webcam
  • OS : Linux ubuntu ou fedora
  • Un JRE ou JDK java
  • Plateforme OSGI Felix ou Equinox
  • Librairie OpenCv
  • Compilateur C/C++
  • Apache Maven

Architecture

  • Partie embarquée :

Cette partie est destinée a être embarquée sur les caméras positionnées aux feux à surveiller. Composée de deux bundles proposant les services suivants : demarrer la Camera et recuperer le relevé de celle-ci.

  • Partie fixe :

Cette partie est destinée a être installée sur un ordinateur fixe dont le role sera de récupérer les données des différentes caméras déployées. Composée de deux bundles proposant les services suivants : demarrer les acquisitions et recuperer les relevés.

Manuel d'installation

-Récuperer les sources a l'adresse svn suivante : http://subversion.assembla.com/svn/m2m_surveillance_flux_autoroutiers

-Le projet se découpe en 4 sous-projets maven et une partie C++:

La partie n°1 nommée Camera_Finale est à compiler obligatoirement sur le pc embarquant la caméra, du fait de la non portabilité du code C++.

Ces 2 parties sont à compiler et à déployer sur le pc embarqué avec la caméra

   Partie n°2 nommée CameraServeur
   Partie n°3 nommée CameraServlet

Ces 2 parties sont à compiler et à déployer sur le pc jouant le role du serveur

  Partie n°4 nommée ServeurServlet
  Partie n°5 nommée ServeurCentral

En effet le projet étant encore en développement, les chemins d'accès aux relevés et à l'executable doivent être modifiés. (Notamment encas de deploiement sous système windows)

Architecture fonctionnelle :


Architecture détaillée :

ArchitectureDetaillee.jpg

Manuel d'utilisation

Un fois les parties compilées avec les chemins adéquats, il faut insérer dans le répertoire bundle de felix les paquets générés par maven. Ces paquets se situent dans le répertoire target du sous-projet maven correspondant à la partie en question.

Ainsi sous la plate-forme OSGI embarqué sur l'ordinateur possédant la caméra nous devons avoir ces bundles déployés :

   camera-broker-bundle-0-SNAPSHOT.jar
   camera-broker-servlet-bundle-0.0.1-SNAPSHOT.jar

Sous la pate-forme OSGI du serveur central ces deux-la :

   information-broker-bundle-0.0.1-SNAPSHOT.jar
   information-broker-servlet-bundle-0.0.1-SNAPSHOT.jar

Une fois ces bundles déployés un simple accés à la servlet du serveur via un navigateur web a l'url : http://localhost:8080/camera permettra de démarrerl'acquisition sur la caméra distante.

Pour récupérer le relevé de la caméra un accés à l'url : http://localhost:8080/releve permettra de télécharger le fichier releve.xml généré par le serveur de la caméra distante.

Par défaut le téléchargement à lieu dans /home/"nom d'utilisateur" (Ce nom est a préciser par l'utilisateur lors de la compilation)

Fonctionnalités envisagées

Nous souhaitions disposer de n caméras, de pouvoir déclencher leur acquisition à distance sur une période donnée, et d'effectuer une collecte automatisée des relevés générés par ces caméras. Ces relevés seraient stockés dans une base de données en attendant d'être traitées par un outil d'analyse. Nous souhaitions aussi pouvoir détecter une inffraction.

D'autre part, bien qu'il ne s'agisse pas d'un projet ayant pour sujet le traitement d'image, l'objectif était d'avoir un système de reconnaissance minimal.

Fonctionnalités réalisées

Nous n'avons pu develloper un gestion de n caméras, actuellement le système ne fonctionne qu'avec un serveur central et une partie deportée abritant la caméra (simple webcam dans notre cas).

Nous avons mis en place un service de comptage minimal, le défaut étant qu'il reconnait tout les objets en mouvement, pas seulement les voitures, ce qui fausse le résultat.

L'édition de relevé a partir du comptage effectué est fonctionnel. Ce relevé est téléchargeable a partir du serveur central, la remontée d'information est donc opérationnellev ia le protocole HTTP.

Améliorations

Il resterait à étendre la gestion des caméras à partir du serveur. Par exemple fournir une api web permmettant d'ajouter ou de retirer des caméras suivants leur adresse.

D'autre part si nous avions la possibilité d'être connecter à l'automate du feu, nous pourrions lancer les aquisitions suivants l'état du feu. Actuellement nous avons lançons l'acquisition pour une durée pré-determinée.

L'édition de relevés pourrait être ainsi plus conséquente, et s'étaler sur une journée entière et prendre ne compte plus d'informations (infractions par exemple).

La reconnaissance pourrait être affinée afin de reconnaitre des objets plus précis (seulement des voitures).

Un outil d'analyse des données sur le serveur central, permettant d'éditer des courbes par exemple serait utile à l'interprétation des résultats.

Difficultés rencontrées

- Découverte d'OSGI, packager les composants en bundle.

- Trouver un système de reconnaissance un minimum efficace et rapide, la solution actuelle étant un code open source "FastMatchTemplate".

- Appeller ce code C/C++ non portable à partir d'un bundle.