Mohamed Rayen Sansa
ENFR
Tous les projets
Académique · Équipe de 52025

NoorCity

Comment une ville peut-elle surveiller son éclairage en temps réel et anticiper les pannes ?

Plateforme Smart City de gestion de l'éclairage public, en web Symfony et desktop JavaFX sur une même base MySQL. J'y ai mené le module Infrastructures (prédiction de pannes, détection de véhicules par YOLO, IoT sur ESP32), puis prolongé le projet par une application Android en Kotlin : la ville se pilote depuis le terrain, avec Firebase, de l'IA embarquée et la recharge de trottinettes.

Mon rôle
Module Infrastructures (IA, vision, IoT) et extension mobile Android en Kotlin
Plateformes
Android, Web, Desktop, IoT, IA
Stack
  • Symfony
  • Kotlin
  • Jetpack Compose
  • Python
  • YOLO
  • TensorFlow Lite
  • Firebase
  • OpenCV
  • Scikit-learn
  • ESP32-CAM
  • JavaFX
  • WebSocket
  • PHP
  • MVC
  • Java
  • MySQL
  • ML Kit
  • Stripe
  • Leaflet.js
  • Arduino
  • Node.js
  • Machine learning
  • Computer vision
  • NumPy
  • pandas
  • JavaScript
1:10 000

Situation

15fonctionnalités livrées dans mon module : lampadaires, zones, caméras, IoT

L’éclairage public coûte cher en énergie et se gère souvent à la main : pannes découvertes tard, interventions mal suivies. NoorCity relie lampadaires connectés, citoyens et techniciens dans un même système.

Projet PIDEV de 3e année à Esprit, en équipe de 5, un domaine chacun. Le mien : les infrastructures (lampadaires, zones, caméras), que j’ai rendues prédictives et temps réel grâce à l’IA et à l’IoT.

Puis j’ai voulu aller plus loin que l’écran d’ordinateur : j’ai prolongé le projet par une application Android, pour emmener NoorCity là où se trouvent les lampadaires, sur le terrain.

1:1 000

Produit

  • Carte des lampadaires avec, pour chacun, sa probabilité de panne.
  • QR code sur chaque lampadaire : le technicien le scanne et ouvre sa fiche.
  • 3 emplacements suggérés pour de nouveaux lampadaires dans une zone.
  • Trafic en direct depuis les caméras, avec alerte d’embouteillage.

Extension mobile : la ville dans la poche

Une idée ajoutée au projet web et Java : tout ce que l’équipe gère au bureau, disponible sur le terrain, et de nouveaux usages pour les citoyens.

  • 3 profils (administrateur, technicien, citoyen), une quarantaine d’écrans, en français, anglais et arabe.
  • Scanner le QR code d’un lampadaire pour signaler une panne ou lancer une intervention.
  • Caméras en direct, analysées par l’IA du téléphone : personnes, véhicules, score de sécurité.
  • Noor Charge : recharger sa trottinette ou son vélo sur un lampadaire équipé, avec paiement Stripe (mode test) et énergie suivie en direct.
  • Capteurs en temps réel, météo et qualité de l’air.
  • Vidéos certifiées par une chaîne de blocs SHA-256 : on peut prouver qu’un enregistrement n’a pas été modifié.
  • Programmes d’éclairage, événements proposés par les citoyens, chat entre équipes.
1:100

Système

  • Web : Symfony 6.4 en MVC (Twig, Doctrine, Leaflet), pour les équipes et les citoyens.
  • Desktop : JavaFX en MVC (FXML), branché en JDBC sur la même base MySQL : web et desktop partagent les mêmes données.
  • IA en Python (scikit-learn, YOLO, OpenCV), appelée par Symfony ou reliée en WebSocket pour le temps réel.
  • IoT : ESP32 avec caméra, Arduino et capteurs de mouvement, luminosité et température.
  • Mobile : Kotlin + Jetpack Compose (Material 3) en MVVM : écran → ViewModel (StateFlow) → repository qui écoute Firebase en temps réel.
  • Firebase comme backend, sans serveur : Auth (email, Google, Facebook), Realtime Database, Firestore, Cloud Functions.
  • Les ESP32 lisent et écrivent les mêmes données Firebase : l’app et le matériel restent synchronisés en direct ; seul le flux vidéo de l’ESP32-CAM est lu directement.
ESP32-CAM (PIR · LDR · temp.), YOLO + OpenCV (Python), Firebase (Realtime DB · Firestore), Ratchet WS (WebSocket :8081), Android (Kotlin · Compose), Symfony 6.4 (Twig · Leaflet), RandomForest (scikit-learn), MySQL (Doctrine ORM), JavaFX (FXML · JDBC).esp32 → vision : video; esp32 → firebase : sync; vision → ws : JSON; firebase → android : Flow; ws → web : push; web → ml : Process; web → db : ORM; db → desktop : JDBCvideosyncJSONFlowpushProcessORMJDBCESP32-CAMPIR · LDR · temp.YOLO + OpenCVPythonFirebaseRealtime DB · FirestoreRatchet WSWebSocket :8081AndroidKotlin · ComposeSymfony 6.4Twig · LeafletRandomForestscikit-learnMySQLDoctrine ORMJavaFXFXML · JDBC

Une requête de bout en bout

1:10

Modèle & données

  • Pannes : un RandomForest estime le risque de chaque lampadaire à partir de son âge, sa puissance, son type, ses pannes passées et le trafic.
  • Trafic : YOLO repère et compte les véhicules dans le flux de l’ESP32-CAM.
  • Emplacements : des positions sont tirées autour des lampadaires existants, puis filtrées par distance et validées par géocodage (pas dans l’eau, en zone urbaine).

Côté mobile et embarqué :

  • Un modèle TensorFlow Lite (MobileNet) analyse l’image des caméras directement sur le téléphone : personnes, véhicules, score de sécurité.
  • L’ESP32-CAM détecte un accident par différence d’images, avec des règles et des seuils générés en Python puis embarqués dans la carte.

Limite : le modèle de pannes a été entraîné sur des données simulées ; la suite est de le réentraîner sur les données réelles exportées.

Vous recrutez ? Comparez avec votre offre

Collez votre offre de stage. Vous verrez quelles technologies demandées sont prouvées par un de mes projets ou stages, et lesquelles ne le sont pas.

Le texte reste dans votre navigateur ; rien n’est envoyé.