Table des matières:

Système de sécurité par reconnaissance faciale pour un réfrigérateur avec Raspberry Pi : 7 étapes (avec photos)
Système de sécurité par reconnaissance faciale pour un réfrigérateur avec Raspberry Pi : 7 étapes (avec photos)

Vidéo: Système de sécurité par reconnaissance faciale pour un réfrigérateur avec Raspberry Pi : 7 étapes (avec photos)

Vidéo: Système de sécurité par reconnaissance faciale pour un réfrigérateur avec Raspberry Pi : 7 étapes (avec photos)
Vidéo: Créer un système de RECONNAISSANCE FACIALE ? Opencv et Python 2024, Juin
Anonim
Image
Image
Système de sécurité de reconnaissance faciale pour un réfrigérateur avec Raspberry Pi
Système de sécurité de reconnaissance faciale pour un réfrigérateur avec Raspberry Pi
Système de sécurité de reconnaissance faciale pour un réfrigérateur avec Raspberry Pi
Système de sécurité de reconnaissance faciale pour un réfrigérateur avec Raspberry Pi

En parcourant Internet, j'ai découvert que les prix des systèmes de sécurité varient de 150$ à 600$ et plus, mais toutes les solutions (même les plus chères) ne peuvent pas être intégrées à d'autres outils intelligents chez vous ! Par exemple, vous ne pouvez pas installer une caméra de sécurité à votre porte d'entrée, elle ouvre donc automatiquement la porte pour vous ou vos amis !

J'ai décidé de faire une solution simple, bon marché et puissante, que vous pouvez utiliser n'importe où ! Il existe de nombreux manuels sur la façon de créer des systèmes de sécurité bon marché et faits maison, mais je veux démontrer une application vraiment non triviale de ceux-ci - un système de sécurité pour un réfrigérateur avec reconnaissance faciale !

Comment ça marche? La caméra IP placée sur le dessus d'un réfrigérateur, des capteurs (deux boutons) détectent lorsqu'une personne ouvre la porte du réfrigérateur, après quoi Raspberry Pi prend une photo de cette personne (avec caméra IP), puis l'envoie à l'API Microsoft Face pour analyser l'image et recevoir le nom de la personne. Avec cette information Raspberry Pi scanne la « liste d'accès »: si la personne n'a pas l'autorisation d'accéder au réfrigérateur, Raspberry en informe le propriétaire par e-mail, SMS et twitter ! (Voir photos ci-dessus)

Pourquoi? Le système vous permet de contrôler les membres de votre famille, surtout lorsqu'ils sont au régime ou ont du mal à ne pas manger après minuit ! Ou utilisez-le juste pour le plaisir !

De plus, vous pouvez réellement installer la caméra à votre porte d'entrée et configurer le système pour ouvrir la porte lorsque vous, les membres de votre famille ou vos amis vous approchez. Et ce n'est pas la fin ! Les possibilités de l'application sont infinies!

Commençons!

Étape 1: Préparation

Préparation
Préparation

Tu auras besoin de:

  • Raspberry Pi 3 (vous pouvez utiliser des versions plus anciennes, mais la troisième génération a le Wi-Fi, donc c'est très pratique)
  • Boutons
  • Fils
  • Ancien Smartphone ou appareil photo Raspberry Pi

La première chose à faire est de configurer votre Raspberry Pi. Vous trouverez des instructions détaillées sur la façon de procéder ici et ici, mais nous couvrirons les étapes les plus importantes dans ce manuel.

  1. Téléchargez Win32 DiskImager à partir d'ici (si vous utilisez Windows)
  2. Téléchargez SD Formatter à partir d'ici
  3. Insérez la carte SD dans votre ordinateur et formatez-la avec SD Formatter
  4. Téléchargez l'image Raspbian à partir d'ici (choisissez "Raspbian Jessie avec pixel")
  5. Exécutez Win32 DiskImager, choisissez votre carte SD, spécifiez le chemin d'accès à l'image Raspbian, cliquez sur "Write"
  6. Insérez la carte SD dans votre Raspberry Pi et allumez-le !

De plus, vous devrez configurer votre Raspberry Pi pour avoir accès au système via SSH. Il y a beaucoup d'instructions sur Internet, vous pouvez les utiliser, par exemple, ou vous pouvez connecter un moniteur et un clavier.

Votre Pi est maintenant configuré et vous êtes prêt à continuer !

Étape 2: fabrication d'un capteur

Fabriquer un capteur
Fabriquer un capteur
Fabriquer un capteur
Fabriquer un capteur
Fabriquer un capteur
Fabriquer un capteur

Description de l'étape: Dans cette étape, nous allons créer un capteur qui détecte quand une personne ouvre la porte d'un réfrigérateur et active Raspberry Pi.

Pour le configurer, vous aurez besoin des 2 boutons que vous avez initialement préparés. Le premier bouton détectera lorsque la porte est ouverte, le deuxième bouton détectera lorsque la porte est ouverte au point où nous prenons une photo d'une personne.

  1. Souder les fils aux boutons.
  2. Fixez le premier bouton à la porte du réfrigérateur pour qu'il soit poussé lorsque la porte est fermée (voir photo ci-dessus)
  3. Fixez le deuxième bouton à la porte du réfrigérateur comme indiqué sur la photo ci-dessus. Ce bouton doit être relâché à tout moment, sauf lorsque la porte atteint le point où le système prend une photo. Pour le mettre en place, vous devez attacher quelque chose à votre réfrigérateur afin que ce bouton soit enfoncé lorsque la porte est ouverte dans la mesure souhaitée (voir photos ci-dessus).
  4. Reliez les fils des boutons au Raspberry Pi: premier bouton au GPIO 23 et à la masse, deuxième bouton au GPIO 24 et à la masse (voir schéma de frittage).

Remarque: j'utilise le brochage BCM (pas la carte), en savoir plus sur la différence ici.

Une fois connecté à votre Raspberry Pi via SSH, pour exécuter le shell python, tapez dans le terminal:

python3

Si vous connectez un moniteur et un clavier à Raspberry Pi, exécutez simplement "Python 3 IDLE" dans le menu.

L'étape suivante consiste à faire fonctionner Raspberry Pi avec les boutons. Nous allons attacher des écouteurs spéciaux aux broches GPIO 23 et 24, qui écouteront l'événement « front montant » et l'événement « front descendant » sur ces broches. En cas d'événement, les auditeurs appelleront les fonctions que nous avons définies. « Front montant » signifie que le bouton a été enfoncé et maintenant relâché (premier bouton – la porte est ouverte), « front descendant » signifie que le bouton a été relâché et maintenant enfoncé (deuxième bouton – la porte a atteint un point spécifique). Plus d'informations sur la fonctionnalité des boutons - ici.

Tout d'abord, importez la bibliothèque qui nous donne accès aux broches:

importer RPi. GPIO en tant que GPIO

Définissez maintenant les fonctions spéciales qui seront appelées lorsque l'événement est déclenché:

def sensor1(canal): print("capteur 1 déclenché")def sensor2(canal): print("capteur 2 déclenché)

Définir le type de brochage:

GPIO.setmode(GPIO. BCM)

Configurer les broches:

GPIO.setup(23, GPIO. IN, pull_up_down=GPIO. PUD_UP)GPIO.setup(24, GPIO. IN, pull_up_down=GPIO. PUD_UP)

Attachez les auditeurs:

GPIO.add_event_detect(23, GPIO. RISING, callback=sensor1, bouncetime=300)GPIO.add_event_detect(24, GPIO. FALLING, callback=sensor2, bouncetime=300)

Vous pouvez maintenant le tester ! Si vous appuyez sur le bouton 1 vous verrez un message sur la borne « capteur 1 déclenché », le bouton 2 vous donnera un message « capteur 2 déclenché ».

Remarque: Lorsque vous avez terminé d'expérimenter, n'oubliez pas d'appeler la fonction suivante: GPIO.cleanup().

Mettons en place une autre fonction qui s'appelle lorsque la porte atteint le point où nous prenons une photo ! Vous pouvez le faire vous-même ou utiliser mon implémentation que j'ai jointe ici (sensor.py)

Remarque: sensor.py est utilisé uniquement à des fins de test, les fichiers avec toutes les fonctionnalités que j'ai joints à la dernière étape.

Étape 3: Configurer la caméra IP

Configurer la caméra IP
Configurer la caméra IP
Configurer la caméra IP
Configurer la caméra IP
Configurer la caméra IP
Configurer la caméra IP

Description de l'étape: Nous allons maintenant configurer l'ancien smartphone en tant que caméra IP.

L'utilisation du smartphone comme caméra IP se fait via l'application. Il existe différentes applications pour Android, iOS, Windows Phone que vous pouvez utiliser. J'ai choisi celle qui s'appelle "IP Webcam" pour Android. Ceci est une application gratuite et il est facile à configurer.

Exécutez l'application, accédez à "Préférences vidéo" pour configurer la résolution des photos que l'application fournira. Appuyez ensuite sur "Démarrer le serveur" (première image ci-dessus). En bas de l'écran, vous devez voir l'adresse IP de la caméra (voir la deuxième image ci-dessus). Dans le navigateur, vous pouvez taper https://cam_ip_address/photo-j.webp

Enfin, fixez la caméra au réfrigérateur (dernière image ci-dessus).

Étape 4: API de visage

API de visage
API de visage

Description de l'étape: dans cette étape, nous parlerons de l'API Face de Microsoft qui effectue la reconnaissance faciale et identifie les personnes.

L'API Face de Microsoft est un service de reconnaissance faciale, grâce auquel nous pouvons analyser des photos et identifier des personnes dessus.

Tout d'abord, vous avez besoin d'un compte Microsoft Azure. Si vous n'en avez pas, vous pouvez le créer gratuitement ici.

Deuxièmement, accédez à https://portal.azure.com, cliquez sur "Nouveau" sur le côté gauche, saisissez le formulaire "API Cognitive Services", sélectionnez-le et cliquez sur "Créer". Ou vous pouvez ouvrir ce lien. Vous devez maintenant saisir le nom de votre service, sélectionner le type d'abonnement, le type d'API dont vous avez besoin (dans notre cas, c'est l'API Face), l'emplacement, le niveau de tarification, le groupe de ressources et accepter les conditions légales (voir capture d'écran ajoutée à cette étape).

Troisièmement, cliquez sur "Toutes les ressources", sélectionnez votre service Face API et consultez les statistiques d'utilisation, les informations d'identification, etc.

Les détails de l'API Face peuvent être trouvés ici, des exemples dans différents langages de programmation sont fournis. Pour ce projet, nous utilisons python. Vous pouvez lire la documentation et créer votre propre ensemble de fonctionnalités ou vous pouvez utiliser celui fourni ici (ce n'est pas l'ensemble complet des fonctionnalités fournies par Microsoft, uniquement les points nécessaires pour ce projet). Mes fichiers python sont attachés à cette étape.

Passons à la structure de travail avec l'API Face. Pour utiliser la fonctionnalité "Identification", nous devons créer une bibliothèque de personnes utilisant le service Face API qui reconnaîtra les photos prises par l'application. Pour le configurer, veuillez suivre les étapes:

  1. Créer un groupe
  2. Ajouter des personnes à ce groupe
  3. Ajouter des visages à ces personnes
  4. Train de groupe
  5. Soumettez une photo avec la personne que vous souhaitez identifier (vous devez fournir une photo et un identifiant de groupe dans lequel le service recherchera des candidats)
  6. Résultat: En réponse, vous obtiendrez une liste de candidats pouvant figurer sur la photo que vous avez soumise.

J'ai créé trois fichiers avec des fonctionnalités spécifiques qui permettent de travailler avec des groupes, des personnes seules et des photos individuelles:

  • PersonGroup.py - contient des fonctionnalités qui permettent: créer un groupe, obtenir des informations sur le groupe, obtenir la liste de tous vos groupes, former un groupe et obtenir le statut de la formation
  • Person.py - contient des fonctionnalités qui permettent: créer une personne, obtenir des informations sur la personne, répertorier toutes les personnes dans un groupe spécifié, ajouter des visages à une personne spécifiée
  • Face.py - contient des fonctionnalités qui permettent: détecter le visage sur l'image, identifier la personne, obtenir le nom de la personne identifiée

Dans le fichier appelé "recognition.py", je propose des fonctionnalités qui vous permettent de vérifier si l'image contient un visage et d'ajouter des visages à une personne spécifiée (ajoute automatiquement un visage à partir de nombreuses images du dossier spécifié).

Téléchargez le fichier joint à cette étape, décompressez-le, modifiez la variable globale 'KEY' dans ces trois fichiers: PersonGroup.py, Person.py et Face.py en votre propre clé que vous pouvez trouver: portal.azure.com > toutes les ressources > service api face (ou comment vous l'appelez) > onglet touches. Vous pouvez utiliser n'importe laquelle des deux touches.

Remarque: ici, nous allons entraîner le service Face API à reconnaître les personnes, de sorte que les actions suivantes peuvent être effectuées à partir de n'importe quel ordinateur (Raspberry Pi n'est pas nécessaire pour cela) - les modifications sont enregistrées sur le serveur de Microsoft.

Après avoir modifié KEY, exécutez reconnaissance.py et entrez la commande suivante dans le shell python:

PersonGroup.create("family", 'fff-fff')) // vous pouvez utiliser votre propre nom et identifiant pour

groupe printResJson(PersonGroup.getPersonGroup('fff-fff'))

Vous devez voir les données sur le groupe que vous venez de créer. Entrez maintenant:

printResJson(Person.createPerson('fff-fff', 'nom de la personne'))

Maintenant, vous obtenez un identifiant personnel. Créez un dossier avec des images de cette personne afin que toutes les images contiennent le visage de cette personne. Vous pouvez utiliser la fonction detectFaceOnImages dans reconnaissance.py qui vous montre sur quelles photos le visage est détecté. Maintenant, exécutez la commande:

addFacesToPerson('dossier avec images', 'ID de personne que vous avez obtenu après la commande précédente', 'fff-fff')

Ensuite, nous devons former notre service en entrant les éléments suivants:

PersonGroup.trainPersonGroup('fff-fff')printResJson(PersonGroup.getPersonGroupTrainingStatus('fff-fff'))

Maintenant, notre groupe est formé et est prêt à identifier une personne.

Pour vérifier la personne sur l'image, vous pouvez:

Face.checkPerson(image, 'fff-fff')

En réponse, vous obtiendrez une liste de candidats et la probabilité qui figure sur la photo.

Remarque: à chaque fois que vous ajoutez des visages à une personne ou à un groupe, vous devez entraîner le groupe !

Étape 5: Configuration Node-Red

Configuration nœud-rouge
Configuration nœud-rouge

Description de l'étape: Dans cette étape, nous allons créer un flux Node-Red qui vous informera de la violation d'accès à votre réfrigérateur =)

Si votre Raspberry Pi fonctionne sur Raspbian Jessie November 2015 ou une version ultérieure, vous n'avez pas besoin d'installer le Node-Red, car il est déjà préinstallé. Vous avez juste besoin de le mettre à jour. Veuillez utiliser le manuel ici.

Maintenant, nous devons installer le nœud Twilio sur le nœud rouge, afin que nous puissions déclencher un message texte. Ouvrir le terminal et taper:

cd ~/.node-rednpm installer node-red-node-twilio

En savoir plus sur le nœud Twilio ici. Après cela, exécutez le Node-Red en tapant dans le terminal:

nœud-rouge

Ensuite, allez sur: https://127.0.0.1:1880/ - si vous ouvrez le navigateur sur votre Raspberry Pihttps://{raspberry_pi_ip}:1880/ - si vous souhaitez ouvrir l'éditeur Node-Red depuis un autre ordinateur

Pour connaître l'adresse IP de raspberry pi, utilisez cette instruction.

Vous devez maintenant trouver le nœud Twilio dans la liste des nœuds de votre éditeur Node-Red (généralement, il apparaît après le groupe « social »).

Il est temps de créer le flux !

Remarque: vous pouvez utiliser mon flux attaché à cette étape, mais n'oubliez pas de configurer les nœuds: email, twitter et twilio. Lisez à ce sujet plus tard.

Notre flux commence par le nœud « notifier » qui accepte la requête POST de notre programme principal avec des données sur la violation d'accès (un exemple de données peut être trouvé dans le nœud de commentaire « à propos de la réception d'objets »). Ce nœud répond immédiatement avec le message « Ok », afin que le programme principal sache que les données ont été reçues (Flux: /notify > réponse avec Ok > réponse). Le nœud vert en bas avec le nom msg.payload est là à des fins de débogage: si quelque chose ne fonctionne pas, vous pouvez l'utiliser.

Du premier nœud (/notify) les données se sont propagées vers "Data Topic" et "Image Topic" où les sujets "data" et "image" ont été ajoutés respectivement.

Dans le nœud "compiler", nous recevons des données (que nous obtenons lors de la première étape) avec le sujet "données" et une image avec le sujet "image" (l'image est tirée de /home/pi/image.jpg). Ces deux messages doivent être compilés en un seul objet, mais les deux objets sont reçus à des moments différents ! Pour gérer cela, nous utiliserons la fonctionnalité « contexte » qui nous permet de stocker des données entre les appels de fonction.

L'étape suivante consiste à vérifier si une personne de notre liste d'accès ou s'il s'agit d'un étranger (nœud checkConditions). Il y a un champ "trustedPerson" dans les données que nous recevons: "true" signifie que nous connaissons cette personne, mais qu'elle a violé l'autorisation d'accès, "false" signifie que la personne est un étranger.

Lorsque le résultat est « vrai », nous envoyons une notification à twitter, twilio et e-mail; lorsque le résultat est « faux » - uniquement e-mail et twilio. Nous créons un objet pour e-mail avec un message, une image jointe et un sujet d'e-mail, un objet pour twilio avec un message. Pour Twitter, nous ajoutons des données à un objet si "trustedPerson" est vrai. Envoyez ensuite ces trois objets à trois nœuds différents.

Remarque: Si le nœud suivant ne doit pas recevoir de message, nous lui envoyons simplement « null ».

Il est temps de configurer les nœuds pour la notification !

Twitter Ajoutez le nœud "twitter" au flux. Ouvrez-le par double clic. Cliquez sur le crayon à côté de « ID Twitter ». Cliquez ensuite sur "Cliquez ici pour vous authentifier avec Twitter". Accédez à votre compte Twitter et donnez à Node-Red les autorisations nécessaires.

EmailAjouter un nœud "email" au flux. Si vous n'utilisez pas Gmail, vous devrez modifier les données dans les champs suivants - "Serveur" et "Port" (vous pouvez trouver quel serveur et quel port vous devez utiliser sur les pages d'aide de votre agent de messagerie), sinon ne les modifiez pas des champs.

  • À > adresse e-mail à laquelle les messages seront envoyés
  • ID utilisateur > connexion à partir de votre e-mail (peut-être le même que le champ "À")
  • Mot de passe > mot de passe de votre compte de messagerie
  • Nom > nom de ce nœud

Twilio Allez sur https://www.twilio.com/try-twilio et créez un compte. Vérifiez-le. Allez sur https://www.twilio.com/console. Cliquez sur "Numéros de téléphone" (grande icône #) et créez un numéro gratuit. Si vous êtes en dehors des États-Unis, vous devez ajouter des autorisations GEO, accédez à https://www.twilio.com/console/sms/settings/geo-pe… et ajoutez votre pays.

Maintenant, allez dans l'éditeur Node-Red, ajoutez le nœud Twilio, double-cliquez dessus pour configurer et remplissez tous les champs:

  • Identifiants > Utiliser les identifiants locaux
  • Twilio > modifier

    • Compte SID > prendre d'ici
    • De > tapez le numéro virtuel que vous avez créé
    • Jeton > prendre d'ici
    • Nom > Twilio
  • Sortie > SMS
  • À > votre numéro de téléphone
  • Nom > nom de ce nœud.

Cliquez sur Déployer

Votre flux est maintenant prêt ! Vous pouvez le tester en envoyant une requête POST avec l'objet spécifié !

Étape 6: Compilation de l'ensemble du projet

Compiler l'ensemble du projet
Compiler l'ensemble du projet
Compiler l'ensemble du projet
Compiler l'ensemble du projet

Description de l'étape: Dans cette étape, nous allons assembler toutes les pièces et les faire fonctionner comme un système séparé.

Par cette étape, vous devez:

  1. Configurer l'ancien smartphone comme caméra IP
  2. Avoir des capteurs fonctionnels
  3. Formation de l'API Face de Microsoft
  4. Flux Node-Red configuré

Maintenant, nous devons améliorer le code que nous avons écrit à l'étape 2. Plus précisément, la fonction process() qui est appelée lorsque la personne ouvre la porte. Dans cette fonction, nous effectuerons les opérations suivantes:

  1. Obtenez l'image de la caméra ip et enregistrez-la dans "/home/pi/" avec le nom "image.jpg" (fonction "fromIpCam" dans le fichier "getImage")
  2. Obtenez le nom de la personne sur cette image (fonction « checkPerson » dans le fichier « recognition »)
  3. Vérifier l'autorisation d'accès pour cette personne (fonction « vérifier » dans le fichier « accès »)
  4. Basé sur le résultat de la fonction « vérifier » le message de composition
  5. Envoyer un message composé à Node-Red (fonction "toNodeRed" dans le fichier "sendData")

Remarque: pour voir le code complet des fonctions mentionnées, veuillez télécharger le fichier zip joint à cette étape.

À propos de la fonction "fromIpCam". Cette fonction envoie la requête GET à votre caméra IP, obtient une image focalisée en réponse et l'enregistre dans le chemin que vous avez spécifié. Vous devez fournir l'adresse IP de la caméra à cette fonction.

À propos de la fonction « checkPerson ». La fonction obtient le chemin d'accès à l'image et au groupe dans lequel vous souhaitez rechercher une personne à partir de la photo en tant que paramètres. Premièrement, il détecte un visage sur l'image fournie (fichier Face.py, fonction « détecter »). En réponse, il obtient l'identifiant si le visage a été détecté. Ensuite, il appelle la fonction « identifier » (fichier Face.py) qui trouve des personnes similaires dans le groupe spécifié. En réponse, il obtient un identifiant de personne si la personne est trouvée. Ensuite, appelez la fonction "person" (fichier Person.py) avec l'ID de la personne comme paramètre, la fonction "person" renvoie la personne avec l'ID spécifié, nous obtenons le nom de la personne et le renvoyons.

À propos de la fonction « vérifier ». Cette fonction est placée dans le fichier « access » où se place également « access list » en tant que variable globale (vous pouvez la modifier à votre guise). Obtenir le nom de la personne de la fonction précédente, la fonction « vérifier » compare cette personne avec la liste d'accès et renvoie le résultat.

Remarque: le projet complet est joint à l'étape suivante.

Étape 7: Conclusion

Dans cette étape, j'ai joint le projet complet que vous devez décompresser et placer sur votre Raspberry Pi.

Pour faire fonctionner ce projet, exécutez le fichier "main.py".

Si vous contrôlez Raspberry Pi via SSH, vous devez exécuter deux programmes à partir d'un seul shell: le programme python et Node-Red. Tapez dans le terminal ce qui suit:

nœud-rouge

Appuyez sur « Ctrl + Z » et tapez:

travaux

Vous avez vu le processus Node-Red. Regardez l'ID du processus et tapez:

bg

Maintenant, Node-Red doit commencer à travailler en arrière-plan. Ensuite, allez dans le répertoire avec votre projet et exécutez le programme principal:

python3 main.py

Remarque: n'oubliez pas de modifier la clé dans les fichiers python (étape 4) et les informations d'identification dans le flux Node-Red (étape 5)

Terminé! Votre réfrigérateur est en sécurité !

J'espère que vous avez apprécié cet intraitable ! N'hésitez pas à laisser votre avis en commentaires.

J'apprécierais si vous votez pour mon projet =)

Merci!

Conseillé: