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.
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.
Etape 1 - Réalisation de la serrure
Etape 2 - Réalisation de la sonnette
Etape 4 - Reconnaissance Faciale
Etape 5 – Site web et application mobile
- 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é.
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 :
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.
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
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");
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.
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.
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é.
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");
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 :
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.
Ce qui se trouve dans le site ou l’application est parfaitement intégrable dans vos projets déjà existant.
Démonstration :