Table des matières:

Sonnette avec reconnaissance faciale : 7 étapes (avec photos)
Sonnette avec reconnaissance faciale : 7 étapes (avec photos)

Vidéo: Sonnette avec reconnaissance faciale : 7 étapes (avec photos)

Vidéo: Sonnette avec reconnaissance faciale : 7 étapes (avec photos)
Vidéo: Comment faire une IDENTIFICATION BIOMÉTRIQUE par le visage avec cette IA | Reconnaissance Faciale #2 2024, Septembre
Anonim
Sonnette avec reconnaissance faciale
Sonnette avec reconnaissance faciale

Motivation

Récemment, il y a eu une vague de vols dans mon pays qui visent des personnes âgées à leur domicile. Habituellement, l'accès est accordé par les occupants eux-mêmes puisque les visiteurs les convainquent qu'ils sont des soignants/infirmiers. C'est juste au-delà des mots, à quel point ces histoires me font ressentir de la colère et de la tristesse. La maison devrait être votre premier refuge et encore plus si vous êtes déjà dans une position vulnérable lorsque vous êtes à l'extérieur. C'est dans cet esprit que j'ai lancé ce projet.

informations générales

Le système de sonnette est principalement conçu pour les personnes âgées ou malvoyantes et son fonctionnement est assez simple. En bref, l'interrupteur de la sonnette déclenche la caméra pour obtenir des images. Ensuite, les visages dans les images sont détectés et mis en correspondance avec une liste blanche et une liste noire. L'occupant obtient un retour visuel clair grâce à un affichage clair des feux de circulation. Ainsi, le voyant vert, jaune ou rouge indique que la ou les personnes sont respectivement sur la liste blanche, inconnue du système ou sur la liste noire. Si la lumière jaune ou rouge est déclenchée, la photo est envoyée par un bot Telegram pour informer/avertir un proche ou un gardien.

Niveau d'expertise

Le projet a été mis en place pour des passionnés particulièrement curieux d'utiliser la vision par ordinateur et l'intelligence artificielle. Cette instructable est écrite pour un public de débutants, alors ne vous inquiétez pas si vous n'avez aucune expérience ! De plus, le projet peut également être intéressant pour les fabricants plus expérimentés, car le pipeline est organisé de manière à ce que vous puissiez l'étendre avec vos propres idées de vision par ordinateur et de reconnaissance faciale sans trop de tracas.

Étape 1: Matériaux

Matériaux
Matériaux

Liste de produits avec les exigences minimales:

Produit Relier Commenter
Framboise Pi 3b RPi Link montre RPi 4 car il a des performances bien meilleures et un prix presque égal à celui du RPi 3b.
Micro SD Amazone Une carte micro SD de 16 Go ou plus fera l'affaire. Mais les cartes de 16 Go sur Amazon sont désormais à peu près au même prix que les cartes de 32 Go.
Caméra Raspberry Pi Amazone La caméra v1 est moins chère, mais la v2 est meilleure et sera prise en charge plus longtemps.
Câble flexible FPC 15 broches Amazone La durée dépend en fait des circonstances de la réalisation de ce projet. Si vous voulez juste construire un prototype, le câble flexible d'origine fera l'affaire.
Alimentation 5v micro usb Adafruit Celui-ci n'a jamais laissé tomber! Grande qualité. (pas sur la photo)
Boutons d'arcade avec LED intégrée Amazone Choisissez la taille que vous voulez, mais la conception CAO est basée sur des boutons de 60 mm
Résistances Amazone Vous avez juste besoin de quelques résistances de 1k et 100 ohms. Les 1/4W normaux conviennent.
Condensateurs 0,1 uF Amazone Trois condensateurs sont nécessaires. (pas sur la photo)
Fils de raccordement / Câble ruban AmazonAmazon Si vous voulez économiser de l'argent, vous pouvez également utiliser un vieux câble plat de lecteur de disquette (voir photo).
Tube rétractable / Ruban électrique AmazonAmazon

Les outils nécessaires:

Outil Indispensable? Commenter
Fer à souder Oui
Multimètre Oui
Pince à dénuder Oui Ou vous pouvez utiliser un couteau/des ciseaux.
Découpeur laser Non
Imprimante 3D Non
Pinces Non Utile pour garder la boîte ensemble dans la phase de test.

Remarques:

Pour augmenter l'accessibilité du projet, j'ai décidé de le développer à l'aide d'un Raspberry Pi 3b. Bien que cela augmente l'accessibilité, cela diminue les capacités de l'application car les RPi ne sont pas si rapides. Si vous recherchez un ordinateur monocarte plus rapide, vous voudrez peut-être jeter un œil au NVIDIA Jetson Nano

Étape 2: Câblage

Câblage
Câblage
Câblage
Câblage
Câblage
Câblage

Le diagramme schématique est le plus informatif pour cette étape et est assez explicite. Si vous débutez en électronique, vous pouvez utiliser l'image de la légende. La valeur du composant (le cas échéant) est indiquée dans le schéma de principe. Les photos peuvent aider à voir comment je construis le circuit. Fondamentalement, j'ai connecté tous les composants aussi près que possible du bouton d'arcade, ce qui donne un aperçu clair de ce qui se passe.

Remarques:

  • J'aime vraiment utiliser des connecteurs de câble plat, car ils sont beaucoup plus robustes que l'utilisation de fils de liaison simples.
  • Comme suggéré, j'ai utilisé un câble plat récupéré d'un vieil ordinateur. C'est un peu délicat car vous devrez affirmer manuellement la configuration du câble. Dans ce projet par exemple, j'ai découvert que certains trous étaient connectés les uns aux autres (probablement utilisés comme terre pour l'application d'origine). Par conséquent, j'ai dû acheter un autre câble plus tard comme vous pouvez le voir sur les photos.

Étape 3: Construire le boîtier

Construire le boîtier
Construire le boîtier
Construire le boîtier
Construire le boîtier
Construire le boîtier
Construire le boîtier
Construire le boîtier
Construire le boîtier

Boîtier de caméra

De nombreux boîtiers pour la picamera peuvent être téléchargés gratuitement sur Internet. J'ai donc choisi de ne pas réinventer la roue et de choisir un boîtier basique mais sympa sur Internet: thingverse.com - Boîtier/boîtier pour appareil photo Raspberry pi. (Cri au designer VGer.)

Boîtier de feu de circulation

Pour le boîtier des feux de circulation, j'ai conçu une petite boîte dans Autodesk Fusion 360 (qui est téléchargeable gratuitement, voir Remarques) qui s'adapte à tout le matériel. Dans la pièce jointe, vous pouvez trouver le fichier que j'ai envoyé à mon entreprise de découpe laser locale. Ainsi, la conception est basée sur une épaisseur de plaque de 6 mm. Cependant, si vous souhaitez ajuster les choses, vous pouvez accéder à toutes sortes de formats de fichiers en utilisant ce lien. Comme le montrent les photos, vous pouvez également utiliser une boîte en carton si vous n'avez pas accès à un cutter laser. J'ai utilisé la boîte en carton sur la photo pour le prototypage et cela fonctionne à merveille.

Le montage est assez simple:

  1. Montez les commutateurs Arcade.
  2. Assurez-vous de garder les fils de la sonnette libres.
  3. Connectez le câble plat au RPi.
  4. Vissez le RPi sur le panneau inférieur.
  5. Connectez les fils de la sonnette à un connecteur de fil et montez-le également sur le panneau inférieur.
  6. Connectez la Picamera au RPi.
  7. Percez un trou dans l'un des panneaux latéraux pour le fil de commutation de la sonnette et le fil d'alimentation RPi.

Le connecteur de fil est utilisé comme point de montage pour les fils du commutateur de sonnette, de sorte qu'il puisse être fixé ultérieurement à une sonnette existante. Tout est maintenant en place et peut être collé. Cependant, vous voudrez peut-être d'abord terminer les étapes suivantes, pour vous assurer que tout fonctionne comme il est censé être.

Remarques:

Autodesk Fusion 360 est disponible gratuitement pour les amateurs ! Si vous souhaitez obtenir votre copie, visitez ce lien: autodesk.com - Fusion 360 For Hobbyists. Il y a certains termes, alors assurez-vous de les lire et de les appliquer. C'était mon premier projet avec Fusion 360 et je n'ai pas beaucoup d'expérience dans l'utilisation de logiciels de CAO, mais je dois dire que j'aime beaucoup le logiciel et tous les outils supplémentaires fournis avec Fusion 360

Étape 4: Configuration de la caméra

Configuration de la caméra
Configuration de la caméra
Configuration de la caméra
Configuration de la caméra
Configuration de la caméra
Configuration de la caméra

Il est supposé que vous avez installé Raspbian et qu'il fonctionne en mode GUI. Si vous n'avez pas encore installé Raspbian, vous pouvez suivre cet article: raspberrypi.org - Installation des images du système d'exploitation. Si vous démarrez Raspbian, vous devriez voir un bureau comme indiqué sur les images.

Configurons la caméra sur le RPi et voyons si cela fonctionne ! La méthode décrite ici provient directement de raspberrypi.org - Documentation. Tout d'abord, mettons à jour les derniers packages (y compris le firmware de l'appareil photo) en exécutant les commandes suivantes dans une fenêtre de terminal (voir photos):

mise à jour sudo apt

sudo apt mise à niveau complète

Ensuite, la caméra doit être activée à l'aide de la commande suivante:

sudo raspi-config

Dans le menu, allez à 5. Options d'interfaçage -> Caméra P1. Choisissez d'activer la caméra et redémarrez le RPi en exécutant:

redémarrer

La caméra devrait maintenant être configurée correctement. Il peut être testé en ouvrant une fenêtre de terminal et en exécutant:

raspistill -v -o /home/pi/test.jpg

L'image est enregistrée dans: /home/pi.

Étape 5: Configuration de Docker

Configuration de Docker
Configuration de Docker
Configuration de Docker
Configuration de Docker
Configuration de Docker
Configuration de Docker
Configuration de Docker
Configuration de Docker

Pour éviter les erreurs de dépendance et d'installation, j'ai décidé de créer une image Docker personnalisée pour ce projet (voir wikipedia.org - Docker). Si vous n'avez jamais utilisé ou entendu parler de Docker, pas de soucis, je vais vous expliquer étape par étape comment l'utiliser dans ce projet. En fait, c'est super facile ! Si vous souhaitez exécuter ce projet sur une installation locale (plutôt que dans un conteneur Docker), je vais vous donner quelques conseils. Mais il est fortement recommandé d'utiliser l'image Docker. Après tout, je l'ai construit pour vous permettre d'exécuter facilement ce projet !

Qu'est-ce que Docker ?

Remarque: cette partie fournit des informations générales sur Docker, qui peuvent être ignorées si vous souhaitez simplement exécuter le code.

Ce projet est la première fois que j'utilise Docker et c'est tout simplement génial ! Peut-être avez-vous entendu parler de virtualenv ou d'Anaconda pour Python ? Eh bien, Docker est assez similaire dans le sens où vous pouvez facilement gérer les versions de package et exécuter différentes versions de Python sur un système hôte en utilisant un environnement différent (ou un conteneur comme on l'appelle dans Docker). Mais, comparé à virtualenv et Anaconda, Docker est bien plus puissant car il n'est pas limité à contenir uniquement des packages Python. En effet, dans un conteneur Docker, vous pouvez installer et gérer également les packages d'un système d'exploitation souhaité. Par exemple, considérons un site Web que vous souhaitez migrer qui exécute un framework Web Python (par exemple Django) avec une base de données (par exemple MySQL). Sans conteneur Docker, vous devrez installer tous les packages sur le nouveau serveur, un processus très sujet aux erreurs et aux bogues. D'un autre côté, lorsque votre site Web a été créé dans Docker, la migration est fondamentalement aussi simple que de déplacer le ou les fichiers image vers le nouveau serveur et de les exécuter. Comme vous pouvez l'imaginer, Docker est également très utile pour les projets sur Instructables;) ! Si vous souhaitez en savoir plus sur Docker, consultez leur site Web: docker.org - Docker: Enterprise Container Platform. Maintenant, commençons par utiliser Docker !

Installer Docker

Installez Docker en exécutant:

curl -sSL https://get.docker.com | sh

Ensuite, l'utilisateur est ajouté au groupe d'utilisateurs « docker », qui fournit les droits d'exécution de Docker. Ceci est fait par:

sudo usermod -aG docker $USER

Maintenant, vous devriez pouvoir exécuter Docker. Cela peut être validé en exécutant l'image hello-world:

docker run hello-world

Enfin, extrayons l'image Docker qui contient toutes les dépendances nécessaires pour exécuter les scripts Python de sonnette. Ce processus peut prendre un certain temps car l'image est assez grande (~1,5 Go). Exécuter:

docker pull erientes/sonnette

Remarque: le Dockerfile se trouve sur le référentiel de sonnette sur Github. Maintenant, tout est prêt pour exécuter les scripts de sonnette, qui seront discutés à l'étape suivante.

Installation locale

Encore une fois, je recommanderais fortement d'utiliser l'image Docker au lieu d'une installation locale. Mais pour terminer ce didacticiel, je vais maintenant décrire certaines des étapes que j'ai suivies pour l'installation locale.

Pour pouvoir exécuter le code, la version python doit être >= 3.5 (j'ai utilisé python 3.5.3) et les packages suivants doivent être installés:

  • reconnaissance de visage
  • pic-camera
  • numpy
  • Oreiller
  • python-telegram-bot
  • RPi. GPIO

Ce lien est très utile: Github - Installez dlib et face_recognition sur un Raspberry Pi. Cependant, il y a quelques mises en garde ici: 1) Pillow a besoin d'au moins Python 3.5, qui ne sera pas installé en suivant cette méthode. 2) De plus, tous les packages nécessaires au projet de sonnette ne seront pas installés en suivant cette méthode. Cependant, vous devriez pouvoir l'installer en utilisant simplement pip3.

Étape 6: Exécuter les scripts de sonnette

Exécution des scripts de sonnette
Exécution des scripts de sonnette
Exécution des scripts de sonnette
Exécution des scripts de sonnette
Exécution des scripts de sonnette
Exécution des scripts de sonnette

Obtenez les scripts

Les scripts peuvent être téléchargés manuellement à partir de: github.com - Erientes/doorbell. Ou si vous avez installé Git, exécutez:

git clone

Créer des alias

Maintenant, pour nous faciliter la vie, créons des alias pour exécuter les scripts. Exécuter:

feuillet ~/.bashrc

Ajoutez les lignes suivantes et enregistrez le fichier:

alias doorbell_run='docker run --privileged -v /home/pi/doorbell:/doorbell -w /doorbell -it erientes/doorbell python $1'

alias doorbell_login='docker run --privileged -v /home/pi/doorbell:/doorbell -w /doorbell -it erientes/doorbell bash'

Tester les scripts

Pour tester si tout est bien installé, ouvrez un nouveau terminal et exécutez:

doorbell_run examples/0_test_installation.py

Le résultat devrait simplement être un message dans la fenêtre du terminal indiquant « L'installation de la sonnette s'est terminée avec succès ! ». Pour tester si la caméra est accessible par le conteneur Docker, exécutez:

doorbell_run examples/1_test_camera.py

En exécutant 1_test_camera.py, une photo sera prise et enregistrée sous le nom 'test.jpg', qui se trouve dans /home/pi/doorbell. Enfin, les drivers de LED peuvent être testés en exécutant:

doorbell_run examples/2_test_voicehat_drivers.py

Lorsque ce script est en cours d'exécution, la LED du commutateur d'arcade doit répondre lorsque le bouton est enfoncé.

Exécuter des scripts de sonnette

Pour exécuter les scripts Doorbell, vous devez d'abord obtenir les informations d'identification du bot Telegram. Installez Telegram sur votre téléphone et accédez à telegram.me - Botfather. Démarrez une conversation et entrez:

/nouveaubot

Saisissez un nom et un nom d'utilisateur pour le bot. Après cela, vous recevrez le jeton d'accès. Copiez cette valeur dans le fichier 'credentials_telegram_template.py' dans /home/pi/doorbell et enregistrez-la dans un nouveau fichier nommé 'credentials_telegram.py'. Enfin, démarrez une conversation avec le bot que vous venez de créer en cliquant sur le lien que Botfather vous fournit.

Enfin, exécutons la sonnette avec reconnaissance faciale:

sonnette_run main.py

Remarques:

Si vous voulez en savoir plus sur le fonctionnement du code, consultez les commentaires dans les scripts eux-mêmes. Si vous avez une question sur le code, veuillez me contacter via Github

Étape 7: Utilisation de la sonnette

Image
Image
Utiliser la sonnette
Utiliser la sonnette
Utiliser la sonnette
Utiliser la sonnette

Exécutons le script de sonnette en exécutant:

sonnette_run main.py Après le chargement des packages, les scripts deviennent inactifs. Il y a essentiellement 2 choses qui peuvent arriver:

  1. Quelqu'un sonne à la porte.
  2. Quelqu'un est ajouté à la liste blanche.

Quelqu'un sonne à la porte

Dans ce cas, le script commencera à prendre des photos jusqu'à ce qu'il prenne une photo dans laquelle un visage est détecté. Après détection, certaines méthodes du package python 'face_recognition' sont appelées pour calculer un codage 128 du visage. Ensuite, l'encodage obtenu est comparé aux encodages dans whitelist.csv et blacklist.csv. Les résultats possibles donnent la réponse suivante:

En liste blanche ? En liste noire ? Réponse
Oui Non Le voyant vert s'allume.
Oui Oui Le voyant jaune s'allume. La caméra de la sonnette envoie des photos au robot Telegram avec une icône orange. Cet état peut se produire si quelqu'un a été ajouté aux deux listes. Par exemple, quand quelqu'un était le bienvenu au début, mais a ensuite été mis sur liste noire.
Non Non Le voyant jaune s'allume. La caméra de la sonnette envoie des photos au robot Telegram avec une icône orange.
Non Oui Le voyant rouge s'allume. La caméra de la sonnette envoie des photos au robot Telegram avec une icône rouge.

Quelqu'un est ajouté à la liste blanche

Pour ajouter quelqu'un à la liste blanche, appuyez sur le bouton jaune du feu de circulation lorsque la sonnette est en veille. Tout d'abord, le voyant jaune s'allumera. Si le voyant vert clignote 3 fois, le visage de la personne est ajouté avec succès à la liste blanche. Si le voyant vert ne clignote pas 3 fois, la tentative a échoué. Dans ce cas, appuyez à nouveau sur le bouton jaune. Vous pouvez facilement vérifier si cela a réussi en sonnant à la porte et en vérifiant si le feu vert est passé.

Comment ajouter quelqu'un à la liste noire ?

Évidemment, les personnes mal intentionnées ne passeront pas pour nous donner une photo de leur visage. Ainsi, à la place, vous pouvez ajouter des images de personnes notoires que (par exemple) la police a publiées dans le dossier img/blacklist. Toutes les heures, ce dossier est vérifié pour de nouvelles images. S'il y a une nouvelle image, l'encodage du visage est calculé et ajouté à blacklist.csv. L'image est ensuite renommée et déplacée dans le dossier /img/blacklist/encoded.

Remarques:

  • L'utilisation des scripts en se connectant au RPi offre beaucoup plus de contrôle et d'informations, mais le contrôle et les informations de base peuvent être obtenus en utilisant uniquement l'affichage des feux de circulation.
  • La reconnaissance faciale est implémentée en utilisant le package python 'face_recognition'. Ce package est basé sur Dlib qui contient un algorithme de reconnaissance faciale de pointe, qui effectue une précision de 99,38% sur le benchmark Labeled Faces in the Wild (source: dlib.net - High Quality Face Recognition with Deep Metric Learning).
Concours de technologie d'assistance
Concours de technologie d'assistance
Concours de technologie d'assistance
Concours de technologie d'assistance

Premier prix du concours de technologies d'assistance

Conseillé: