MU5EEH12 AKLI & WANG __Project__ _Sésame
Informations
- Membre du projet : AKLI Ilyes, WANG Zihan
- EMAIL : ilyes.akli@etu.sorbonne-universite.fr
- CURSUS : 2ème année Master en IPS (SMR)
- UE : MU5EEH12 : Designing
- Chargé d'UE : Mr Fabien VERITE
- Date de début : 16-09-2024
Contexte
Notre projet vise à faciliter l'ouverture des portes pour les personnes à mobilité réduite, pour qui cette tâche peut représenter un défi quotidien. Nous sommes conscients qu'un dispositif de ce type peut sembler ambitieux, mais nous croyons que chacun devrait pouvoir ouvrir les portes de sa maison facilement, sans effort excessif.
L'objectif de ce projet est de concevoir un appareil simple, abordable et accessible à tous. Ce dispositif pourra être installé rapidement, sans nécessiter de modifications majeures à la porte ou à ses mécanismes d'ouverture, et sans perturber son utilisation normale.
Matérielles
- ESP32 CAM
- Arduino Uno (Pour les tests)
- ESP32 (Pour l'utilisation finale)
- 2 moteurs ft5330m
- Support imprimer en 3D par une Prusa et avec un filament en PLA
Vidéo temporaire
CAD
Le design de notre outil permet de répondre aux besoins du processus d’ouverture : tirer la poignée, la faire descendre de 3 à 4 cm, puis pousser la porte. Pour cela, nous avons reparti l’outil en plusieurs sous-pièces.
Platine moteur
Ces pièces permettent de supporter deux moteurs
Platine moteur Tire poignée
Cette pièce est créée selon le schéma ci-dessous, avec une épaisseur de 0,5 cm.
Platine moteur Pousse porte
Cette pièce est conçue pour pousser la porte en translation. Elle est également imprimée en PLA.
Support ESP-CAM
Cette pièce a pour objectifs de :
- supporter l’ESP32-CAM,
- verrouiller les platines dans le boîtier,
- fermer le boîtier.
Les dimensions sont présentées dans les figures suivantes.
Came
La fabrication de la came nécessite l’utilisation d’inserts filetés pour PLA afin de stabiliser sa rotation et d’éliminer les vibrations dues aux jeux mécaniques.
Boîtier
Pièce maîtresse de ce projet, le boîtier permet de regrouper tous les éléments. Il est conçu de manière symétrique pour permettre une utilisation avec des portes s’ouvrant à droite ou à gauche.
Un emplacement est laissé vide en bas du boîtier pour accueillir la batterie ainsi que le câblage.
ContrĂ´le
La partie contrôle se divise en plusieurs étapes : la définition de la caméra, la transmission des informations entre l’ESP et le terminal, la détection de reconnaissance faciale sur le terminal et la définition du servomoteur.
Commençons par la définition de la caméra.
ESP32-CAM : Acquisition de flux vidéo en temps réel
L’ESP32-CAM est une carte de développement caméra de très petite taille, mesurant seulement 27 x 40,5 x 4,5 mm. Elle peut fonctionner de manière autonome en tant que système, avec un courant en mode veille profonde ne dépassant que 6 mA.
L’ESP32-CAM est largement utilisée dans divers développements pour l’Internet des objets (IoT). Elle convient parfaitement aux dispositifs intelligents domestiques, au contrôle sans fil industriel, à la surveillance sans fil, à la reconnaissance sans fil de QR codes, aux signaux de systèmes de localisation sans fil, ainsi qu’à d’autres applications IoT. Elle constitue une solution idéale pour les projets IoT.
Pour compléter l’ESP32-CAM, le module ESP32 AI Thinker est utilisé, permettant une gravure facile via une connexion USB. Cela simplifie grandement le développement pratique.
Configuration de l’ESP32-CAM avec Arduino IDE
Il existe de nombreuses méthodes pour compiler l’ESP32-CAM, mais l’utilisation d’Arduino IDE est la plus simple et sera expliquée ici.
Tout d’abord, étant donné qu’Arduino IDE ne prend pas en charge nativement les cartes ESP32, il est nécessaire d’installer manuellement les configurations nécessaires. Heureusement, un référentiel contenant les bibliothèques ESP32 est déjà disponible. Il suffit d’ajouter le lien suivant dans les paramètres d’URL de gestionnaire de cartes supplémentaires :
https://dl.espressif.com/dl/package_esp32_index.json
Ensuite, accédez à Outils > Type de carte > Gestionnaire de cartes, recherchez ESP32 et sélectionnez ESP32 Wrover Module.
Une fois cette étape terminée, vous constaterez qu’une nouvelle catégorie ESP32 apparaît dans le menu des exemples : Fichier > Exemples > ESP32 > Camera > CameraWebServer. En accédant à cet exemple, on peut charger le code source et configurer les identifiants et mots de passe Wi-Fi nécessaires. Cela permettra à l’ESP32-CAM de transmettre un flux vidéo en temps réel à votre ordinateur.
Nous procédons ce code au téléversement sur l’ESP32-CAM. Si tout se passe bien, l’ESP32-CAM affichera une URL dans la console série de l’IDE.
Cette URL permettra d’accéder au flux vidéo ou aux données renvoyées par l’ESP32-CAM via un navigateur web.
Automatisation du Stream et intégration des commandes HTTP
Si nous ne modifions pas le code d’exemple, le résultat est comme illustré à la figure 26, où l’utilisateur doit manuellement cliquer sur “Start Stream” pour obtenir une surveillance en temps réel dans une zone spécifique de la page web. Cependant, cette méthode ne correspond pas à nos objectifs de conception, car elle ajoute une complexité inutile aux opérations manuelles, rendant difficile l’automatisation des tâches de surveillance en temps réel. De plus, la vidéo en streaming ne peut pas être directement transmise au module Python via Wi-Fi de manière optimale, ce qui entraîne un retard significatif pour le module de détection faciale. Pour résoudre ces problèmes, nous avons apporté les modifications suivantes au code d’exemple :
Création d’une tâche Stream pour le déclenchement automatique
Pour répondre aux exigences de réactivité et éviter les blocages dans le programme principal, nous avons intégré une tâche FreeRTOS dédiée dans le fichier .cpp, qui encapsule la fonction de gestion du flux vidéo et permet une transmission automatique du flux vidéo en la déclenchant automatiquement lors du démarrage du système. Cette tâche est définie comme suit:
Ces modifications garantissent que la tâche est lancée immédiatement après l’initialisation du serveur HTTP, sans nécessiter d’intervention manuelle.
Intégration de la commande d’ouverture dans le fichier principal .ino
La gestion des commandes repose sur deux parties :
· Dans le fichier .cpp : La route HTTP /control est enregistrée pour associer les requêtes POST à la fonction control_handler.
· Dans le fichier .ino : La fonction control_handler implémente la logique d’ouverture de la porte.
En combinant les fonctions définies dans le fichier .cpp et .ino, cette logique permet une gestion efficace des commandes d’ouverture, intégrant à la fois la réception des requêtes et l’exécution des actions correspondantes.
Terminal : Détection faciale pour les vidéos transmises par ESP32
Aperçu du système de détection faciale
Notre système de détection faciale est basé sur DeepFace, un framework Python léger conçu pour la reconnaissance faciale et l’analyse des attributs du visage (incluant l’âge, le sexe, les émotions et l’origine ethnique). DeepFace est un framework hybride qui intègre plusieurs modèles de pointe, notamment VGG-Face, FaceNet, OpenFace, DeepFace, DeepID, ArcFace, Dlib, SFace et GhostFaceNet.
D’après les résultats expérimentaux, les humains atteignent une précision de 97,53% dans les tâches de reconnaissance faciale, tandis que les modèles intégrés dans DeepFace ont déjà égalé ou dépassé ce niveau de précision. DeepFace fournit également des interfaces fonctionnelles pratiques qui permettent d’accomplir rapidement des tâches complexes de reconnaissance faciale.
Lien officiel : https://github.com/serengil/deepface
Le processus de reconnaissance faciale dans DeepFace peut être résumé en plusieurs étapes : détection, alignement, extraction de caractéristiques et comparaison. Nous pouvons explorer les principes fondamentaux de sa détection faciale pour mieux comprendre son fonctionnement.
· Détection faciale : DeepFace utilise des algorithmes de détection pour localiser les visages dans une image ou un flux vidéo. Si une image contient visages, alors chaque visage est extrait comme une région
définie par ses coordonnées de boîte englobante :
· Comparaison de caractéristiques : Une fois les caractéristiques extraites sous forme de vecteurs d’encodage , la similarité entre deux visages est mesurée à l’aide de la distance euclidienne :
où est la distance entre les vecteurs de caractéristiques
et
. Si
, alors les deux visages sont considérés comme correspondants, avec
comme seuil prédéfini.
Ces formules permettent d’expliquer deux étapes cruciales de DeepFace : la détection des visages et la mesure de leur similarité.
Dans notre système, nous utilisons un jeu de données personnalisé, qui contient plusieurs photos de visages destinées aux tâches de comparaison et de reconnaissance faciale. Conformément à la documentation officielle de DeepFace, il suffit d’ajouter les photos des visages des personnes cibles dans le jeu de données et d’utiliser les modèles pré-entraînés fournis par DeepFace pour répondre à nos besoins de reconnaissance.
Comme le montre la figure 18, le jeu de données stocke des photos de plusieurs personnes, chaque photo étant nommée selon l’identité correspondante (par exemple, trump1, trump2, trump3). Nous créons un dictionnaire des permissions pour inclure les identités autorisées à ouvrir la porte. Par exemple, si Trump et moi-même avons la permission d’ouvrir la porte, nous ajoutons les noms de fichiers correspondants (comme trump1, trump2, trump3) au dictionnaire.
Lors de l’exécution, le modèle de détection de DeepFace compare les images d’entrée avec les identités dans le jeu de données, en fonction du dictionnaire des permissions. Si le modèle détecte une identité autorisée, celle-ci est ajoutée à une liste renvoyée par le système. En vérifiant si cette liste contient une identité autorisée, le système décide s’il doit envoyer une commande d’ouverture à l’ESP32.
Description de l’implémentation globale
Comme décrit précédemment, nous disposons d’un outil de détection faciale basé sur DeepFace, d’un jeu de données personnalisé et des images transmises par ESP32. En combinant ces éléments, nous pouvons mettre en œuvre notre fonction de détection faciale pour identifier des visages autorisés et envoyer des commandes à ESP32.
Cette implémentation permet de combiner les capacités de détection faciale de DeepFace avec la transmission vidéo de l’ESP32. Ce système garantit une intégration fluide entre le terminal Python et l’ESP32, offrant une reconnaissance faciale rapide et précise, tout en automatisant les commandes pour améliorer l’expérience utilisateur.
Conclusion
Dans le cadre de ce projet, nous avons réalisé un dispositif d’ouverture de porte automatisé à très faible coût. Les deux parties essentielles de ce dispositif – la conception assistée par ordinateur (CAO) et le contrôle automatisé – permettent toutes deux une reproduction à coût nul et une fabrication à faible coût. Cela offre une nouvelle solution, économique et facilement déployable, pour transformer une porte manuelle classique en porte automatique.
Nous sommes particulièrement heureux que notre conception puisse venir en aide aux personnes rencontrant des difficultés à ouvrir les portes. Ce projet a également été pour nous l’occasion de nous initier à la modélisation CAO, et de combiner avec succès la conception assistée par ordinateur, le développement matériel, l’apprentissage profond, ainsi que la configuration de la transmission WIFI entre le matériel et le terminal. Nous avons ainsi pu mettre en pratique les connaissances acquises depuis notre licence dans un projet concret.
Nous tenons à remercier l’Université Sorbonne pour les ressources mises à notre disposition, ainsi que Monsieur Fabien Vérité pour son accompagnement et ses conseils tout au long du projet. Nous lui souhaitons une brillante carrière académique et espérons que notre avenir professionnel sera tout aussi riche en réussites.
No Comments