Lecteur de plaques d'immatriculations

De fablab
Aller à : navigation, rechercher

Introduction

Sujet

L'objectif de ce projet est de concevoir et développer un lecteur de plaques d'immatriculations embarqué avec des données fournies par une entreprise. Les données étant peu nombreuses, si le projet possède une bonne précision il servira à lire des plaques en entrée de parkings pour le suivit des flux et payements. Sinon, si la précision est plus faible (Le plus probable), il servira à faciliter la création d'un dataset plus important (pour l'obtention d'une solution avec une meilleure précision) en lisant les plaques d'immatriculations des véhicules en entrée de parkings.

Equipe

  • Michael Gellenoncourt

Problématique

Avec la reprise des activités extérieures après les crises consécutives de Coronavirus, les parkings dans les villes sont de plus en plus sollicités. Le système de barrières traditionnel plutôt lent, provoque de nombreux embouteillages. Afin de fluidifier le trafic, une solution est adoptée dans plus en plus de parkings, celle de la lecture de plaques d'immatriculations. Cependant ces solutions sont extrêmement onéreuses alors qu'il est possible avec du matériel moins chère et des données de réaliser une solution peu onéreuse (en comparaison avec les solutions propriétaires).

Pour répondre à ce problème, j'ai décidé de mettre au point une solution qui permet aux propriétaires de parkings d'accumuler des données prétraitées afin de constituer un Dataset puis entrainer des réseaux de neurones profonds afin d'obtenir une solution haute précision avec peu de coûts.

Matériel

Utilisé

  • Jetson Nano
  • Raspberry pi RGB CAM

Alternative (version demo)

  • Raspberry pi 4 8GB
  • Logitech STREAM CAM (Ou n'importe quelle caméra compatible avec la raspberry pi)

Scénario d'utilisation

Architectures

le projet doit être logiciellement fortement adaptable étant donné que plusieurs topologies matérielles existent.

Dans le schéma ci-dessous toutes les composantes matérielles annexes sont reliés à un ordinateur embarqué centrale.

Archi1 gellenom.png

Dans le schéma ci-dessous nous pouvons voir que chaque élément camera, moteur, et autre éventuellement possèdent un ordinateur embarqué dédié. Ceci provient du faite que selon les entrées de parking, toutes les composantes matérielles du système ne sont pas forcément situées dans le même boîtier.

Archi2 gellenom.png

Conception

Fonctionnement abstrait de la solution

Le projet à été conçu comme une série de services interconnectable à l'aide de socket. En effet, il existe 3 services à distinguer :

  • Camera Service : Ce service déclenche une prise de photo lorsque l'on lui donne le signal qu'un véhicule a été détecté sur la boucle de la barrière (Capteur sous la chaussée)
  • LPR Service : Ce service récupère l'image qu'on lui transmet afin de lire la plaque d'immatriculation présente dessus, puis retourne le résultat. De plus ce service ajoute le résultat et chaque image reçu à un dataset. Ce service peut fonctionner avec OpenCV ou un régresseur (DeepLearning). Cependant ce service doit se trouver sur la même machine que le service Camera Service.
  • Client Service : Ce service représente le service qui se connecte à tous les services, dont les deux précédents. Il est là pour faire la passerelle entre les serveurs, moteurs, boucles et autre, avec les deux services de ce projet. Ainsi il suffit à l'utilisateur de développer un client adapté à ses besoins pour utiliser les services fournies par ce projet et les faire fonctionner avec son architecture existante.
Lprdiagram.png

Utilisation

  • manuelle d'utilisation et code source (Ce projet était un projet entreprise par conséquent certaines parties du code source ont été retirées. La majeur partie du code est présent, seul certains scripts qui reliaient certain modules ne sont pas présent car ils contenaient des données sensibles) : [1]
  • video de démonstration :
    • Partie 1 - Demo installation matérielle : [2]
    • Partie 2 - Demo commandes: [3]

Budget

Utilisé

  • Jetson nano : 115.55 €
  • Raspberry pi RGB camera : 6-15 €

Alternatif

  • Raspberry pi 4 8GB : 83.12 €
  • Logitech STREAM CAM : 69.99 €

Temps passé sur le projet : 160 H (= 10H par semaine)

Bilan

Le projet d'origine était très important et trop ambitieux pour la période de temps allouée pour ce projet. Par conséquent, les objectifs de bases ont bien été remplis mais les objectifs avancés sont en cours de réalisation.

Ce projet a été extrêmement formateur, il m'a permis de réaliser que travailler en équipe a un réel avantage, cela permet de mieux répartir la charge de travail mais aussi de la redistribuer quand un membre de l'équipe ne peut pas assumer sa charge pour des raisons diverses (Santé ou autre). Le projet a été réalisé à la hauteur de 80%. Enfin le projet a été assez frustrant par moment puisque qu'il met arrivé à plusieurs reprises de passer des dizaines d'heures sur un seul bug (Notamment pour faire fonctionner certaines librairies sur la jetson Nano).

Améliorations possibles

De nombreuses améliorations sont à faire sur ce projet pour qu'il soit réellement viable :

  • Amélioration des communications (pour être fail proof)
  • Utiliser une autre technologie plus robuste que les sockets
  • Améliorer la précision des lectures
  • Refaire le code en C++ pour un gain de performances sur les machines embarqués