Skip to content
This repository has been archived by the owner on Mar 26, 2022. It is now read-only.
/ SmartUnlock Public archive

Connected front door. Opening with facial recognition / mobile app / website - Project made during courses - 3rd year of Master's degree

Notifications You must be signed in to change notification settings

BghinC/SmartUnlock

Repository files navigation

Smart Unlock

Votre porte d'entrée connectée

Réalisée avec Constellation

Smart Unlock vous permet d'ouvrir simplement votre porte d'entrée par reconnaissance faciale. L’autre point fort de ce projet est le faible coût des composants, c’est pourquoi cela en fait une solution adaptée pour tout le monde.

Schéma synthétisant le projet

Voici le fonctionnement général de « Smart Unlock ». Une personne sonne à la porte, une photo est alors prise par la caméra. La reconnaissance faciale commence grâce à « Microsoft Cognitive Services ». Si le visage est reconnu, la porte s’ouvre sinon la photo de la personne ayant sonné vous est envoyée sur vos différents appareils. Vous pouvez, si vous le désirez, ouvrir à distance votre porte d'entrée grâce à une application mobile ou un site web.

Sommaire

Prérequis

Etape 1 - Réalisation de la serrure

Etape 2 - Réalisation de la sonnette

Etape 3 - Caméra IP

Etape 4 - Reconnaissance Faciale

Etape 5 – Site web et application mobile

Prérequis

  • Un serveur Constellation
  • Deux boutons poussoirs
  • Deux ESP8266
  • Une caméra IP
  • Du fil électrique
  • Une résistance 8 à 10 kΩ
  • Une gâche électrique 12V / 500 A
  • Un régulateur de tension LM1117
  • Deux condensateurs 0,1 µF et 0,33 µF
  • Une batterie ou un adaptateur 12V
  • Un transistor NPN TIP 110 ou un relais 12V

A titre d'exemple, voici le lien correspondant à la caméra que nous avons utilisé.

Etape 1 - Réalisation de la serrure

Pour concevoir la serrure nous avons suivi cet article disponible sur le site de Constellation. Cependant, nous avons choisi d'utiliser un relais à la place du transistor. Voici le schéma final :

Schéma de la gâche électrique

Schéma détaillé des branchements du relais

Nous avons aussi ajouté un bouton poussoir à l’intérieur de la maison afin de pouvoir déverrouiller la serrure et ouvrir la porte de l’intérieur.

Etape 2 - Réalisation de la sonnette

Partie hardware

La réalisation de la sonnette est très simple. Il vous faut utiliser :

  • Un ESP8266
  • Une résistance 8 à 10 kΩ
  • Un bouton poussoir

Schéma du bouton poussoir

Connectez votre ESP8266 à votre Wifi et à Constellation. Ensuite, il faut publier un StateObject de la façon suivante pour connaitre l’état de la sonnette en temps réel :

constellation.pushStateObject("etatSonnette", "{'etat':0}","DATA",10); 

Ensuite dans la fonction loop on modifie le StateObject en fonction de l’état du bouton poussoir.

    if(digitalRead(BP)==HIGH){
      constellation.pushStateObject("etatSonnette","{'etat':1}","DATA");
      delay(1000);
    }
    else constellation.pushStateObject("etatSonnette","{'etat':0}","DATA");

Partie réalisation 3D

Nous avons réalisé un cache pour la sonnette sur un logiciel de modélisation 3D afin que cela soit plus esthétique. Nous l’avons imprimé grâce à une imprimante 3D.

Modélisation 3D du cache

Rendu final de la sonnette

Etape 3 - Caméra IP

Nous avons connecté la caméra IP au réseau internet puis nous l’avons connectée à ZoneMinder dont le package est disponible sur Constellation. Le tutoriel pour installer le package ZoneMinder est disponible ici. Cela nous permet d’avoir une photographie de l’individu au moment où celui-ci appuie sur la sonnette.

ZoneMinder vous permet de gérer plusieurs caméras simultanément afin d’adapter « Smart Unlock » à vos besoins.

Etape 4 - Reconnaissance Faciale

Pour reconnaitre les différents visages, nous avons utilisé Face API de Cognitive Services. Vous devrez vous créer un compte afin d'obtenir une "Subscription Key" qui est obligatoire pour utiliser Face API. Afin de détecter une tête sur l'image à analyser, il suffit d’utiliser Face Detection. Bien sûr, nous vous laissons le choix d'adapter le programme présent sur le site à votre gré. Dans notre cas, ce qui nous intéresse concerne exclusivement la faceId, que nous conservons dans une variable. Pour obtenir les faceId des personnes autorisées à ouvrir la porte, nous parcourons le dossier où les photos sont rangées puis récupérons les différentes faceId dans une liste. Ensuite, il faut identifier les personnes sur l'image à l'aide de Face Verification. Si la personne est reconnue, on appelle le message callback « OpenDoor » afin d'ouvrir la porte. Sinon, on envoie sur les différents appareils du propriétaire un message grâce à PushBullet (dont le package est disponible sur Constellation) contenant la photo prise par la caméra et en indiquant que quelqu'un a sonné.

Gif ouverture de la porte

Afin de comparer deux photos voici comment nous procédons :

     int i = 0;
     while (i < listeFaceIDTemoins.Length && !samePerson)
     {
        Result_face_verify verif = await MakeRequestFaceVerify(listeFaceIDTemoins[i], faceId2);
                    
        if (verif.IsIdentical == true)
        {
           samePerson = true;
           PackageHost.CreateMessageProxy("SerrurePackage").OpenDoor();
        }
        i++;
     }

Nous parcourons la liste contenant les faceID des photos témoins. Chaque faceID de la liste est envoyé aux Cognitive Services avec le faceID de la photo prise par la caméra. En fonction de la réponse de cette fonction, on peut :

• Ouvrir la porte directement grâce au message callback :

    PackageHost.CreateMessageProxy("SerrurePackage").OpenDoor();

• Envoyer la photo sur les différents appareils du propriétaire :

    PackageHost.CreateMessageProxy("PushBullet").PushFile(@"D:\Images\image.jpg", "Ca sonne !", "Device");

Etape 5 – Site web et application mobile

L’utilité de ces deux interfaces est tout simplement d’ouvrir la porte à distance. Concernant l’application, nous l’avons développée avec Ionic ce qui nous permet d’utiliser sensiblement le même code que le site web.

Pour créer l’application avec Ionic vous devez d’abord disposer de Node.js et npm. Il faut ensuite installer Ionic depuis l’invite de commande :

nmp install – g cordova ionic

Placez-vous dans le dossier dans lequel vous souhaitez développer votre application grâce à la commande cd. Une fois que vous y êtes il faut créer un nouveau projet comme ceci :

ionic start myApp tabs --type ionic1

Maintenant, il faut modifier votre page html. Pour connecter le site ou l’application à Constellation, référez-vous à ce tutoriel. Vous serez aussi en mesure de vous abonner à un StateObject et d’appeler un message callback. Il y a une petite différence entre l’application mobile et le site web. Le code javascript devra se trouver dans le fichier app.js et le controller devra se trouver dans le fichier controllers.js pour l’application alors que pour le site web nous pouvons tout rassembler dans le fichier html en utilisant les balises "script".

Voici à quoi ressemble notre application :

Application mobile

Nous disposons d’un bouton pour ouvrir la porte et un indicateur qui nous donne en temps réel l’état de la porte.

Il est possible de créer l’application sous forme .apk (tutoriel ici), c’est ce que nous avons fait car cela nous permet de disposer de l’application sur plusieurs téléphones.

Pour le site web, nous avons ajouté un script qui permet de prendre une photo depuis la webcam de son ordinateur afin d’ajouter facilement une personne autorisée à ouvrir la porte grâce à la reconnaissance faciale.

Site web

Ce qui se trouve dans le site ou l’application est parfaitement intégrable dans vos projets déjà existant.

Démonstration :

Démo

About

Connected front door. Opening with facial recognition / mobile app / website - Project made during courses - 3rd year of Master's degree

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages