Pour les utilisateurs de parkings, il est souvent souhaité connaître le nombre de places libres disponibles, tout du moins s'il en reste. Aussi, être capable d'obtenir des statistiques d'utilisations des parkings peut être important pour leur gérant: par exemple, savoir distinguer les heures creuses des heures pleines permet d'optimiser les plages horaires des employés. C'est une problématique importante, qui a souvent été résolue par l'utilisation de divers capteurs.
Ce travail propose une solution se reposant sur un système de capture vidéo. Des images provenant d'une caméra, il est possible d'en retirer le taux d'occupation du parking à l'aide de diverses méthodes d'analyse d'images ou d'apprentissage automatique. Ce projet permet d'exposer avant tout des méthodes de deep learning, tel que la détection d'objets.
Afin de concrétiser les solutions explorées dans ce projet, une caméra a été installée sur le toit du site de Cheseaux la HEIG-VD. Celle-ci permet de capturer des images d'un des parkings qui y sont présents. L'évaluation des différentes caméras adéquates et l'installation de celle qui semble le plus adaptée est documentée dans ce travail.
Ce projet propose d'étudier plusieurs solutions qui peuvent répondre à la problématique de la mesure du taux d'occupation d'un parking. L'une de celle-ci se repose sur une suppression de l'arrière-plan d'une image. Cependant, il est souhaité que ce travail aborde avant tout le problème à l'aide de technologies d'apprentissages automatiques, et non pas de traitement d'images. Néanmoins, la solution pré-citée est brièvement explorée.
Des modèles de réseaux de neurones sont aussi présentés. Certains de ceux-ci sont définies à la main. D'autres utilisent ce qui a été pensé dans le domaine de la recherche de la détection d'objets, dans le but de pouvoir distinguer, dans une image, les voitures qui y sont présentes. Notamment, les modèles Faster-RCNN et Yolo sont présentés et testés.
Une petite API REST est aussi présentée dans ce projet qui permet de fournir l'état actuel d'un parking à un utilisateur.
Le rapport effectué dans le cadre de ce travail est disponible à la racine du projet, sous le nom de TB2018_Report_Parking .
- report : Rapport latex du projet
- dev : Développement
- tensorflow_models : API de détection d'objets de Tensorflow
- park_python : Le développement effectué
- camera : Connexion à la caméra et récupération automatique d'images
- dataset_helper : Méthodes d'aides au traitement de dataset, comme pouvoir séparer celui-ci en 3 sous dossiers test, dev et train
- final_models : Modèles finaux utilisés
- logger : Système de log développé
- ml_helper : Fonctions d'aide à l'entrainement et à l'utilisation des modèles. Contient notamment des predictor permettant de calculer le nombre de voitures présentes en fonction d'une image
- drafts : Création et entrainement des modèles, traitements d'images
- cam_image_processing : Test de traitements d'images
- edge_detection : Détection de bords
- image_regression : Création et entrainement du modèle approchant le problème sous forme de régression
- object_detection : Modèles de détection d'objets
- darknet : Modèle de détection de voiture basé sur Yolo
- grid_keras : Modèle de détection des voitures à l'aide d'une grille et Keras
- tensorflow_api_cars : Modèle de détection d'objets utilisant l'API tensorflow sur le corpus Cars
- tensorflow_api_pklot : Modèle de détection d'objets utilisant l'API tensorflow sur le corpus PKLot
- rest_app.py : Application permettant d'exposer une API REST fournissant à un utilisateur l'état actuel du parking.
Tensorflow, Tensorflow Object Detection API, Keras, Darknet, Yolo, Faster RCNN, Python, OpenCV, Scikit-image, REST API, Flask
Cars : https://ai.stanford.edu/~jkrause/cars/car_dataset.html
PKLot : https://web.inf.ufpr.br/vri/databases/parking-lot-database/
Python doit être installé sur la machine. Les librairies suivantes sont nécessaires, pouvant être installé à l'aide d'un pip install :
- flask
- tensorflow
- skimage
- numpy
- panda
- apscheduler
- requests
Afin de lancer l'API REST permettant de fournir à l'utilisateur l'état actuel du parking, il suffit d'accéder au dossier /dev/park_python et d'exécuter la commande suivante:
sudo python rest_app.py