Table des matières:
- Étape 1: Matériaux
- Étape 2: Câblage
- Étape 3: Construire le boîtier
- Étape 4: Configuration de la caméra
- Étape 5: Configuration de Docker
- Étape 6: Exécuter les scripts de sonnette
- Étape 7: Utilisation de la sonnette
Vidéo: Sonnette avec reconnaissance faciale : 7 étapes (avec photos)
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:06
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
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
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
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:
- Montez les commutateurs Arcade.
- Assurez-vous de garder les fils de la sonnette libres.
- Connectez le câble plat au RPi.
- Vissez le RPi sur le panneau inférieur.
- Connectez les fils de la sonnette à un connecteur de fil et montez-le également sur le panneau inférieur.
- Connectez la Picamera au RPi.
- 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
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
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
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
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:
- Quelqu'un sonne à la porte.
- 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).
Premier prix du concours de technologies d'assistance
Conseillé:
Cadre photo OSD avec reconnaissance faciale : 11 étapes (avec photos)
Cadre photo OSD sensible au visage : ce Instructables montre comment créer un cadre photo avec un affichage à l'écran (OSD) sensible au visage. L'OSD peut afficher l'heure, la météo ou d'autres informations Internet que vous souhaitez
Miroir de reconnaissance faciale avec compartiment secret : 15 étapes (avec photos)
Miroir de reconnaissance faciale avec compartiment secret : J'ai toujours été intrigué par les compartiments secrets toujours créatifs utilisés dans les histoires, les films, etc. Alors, quand j'ai vu le concours du compartiment secret, j'ai décidé d'expérimenter l'idée moi-même et de fabriquer un miroir ordinaire qui ouvre un s
Serrure intelligente à reconnaissance faciale avec LTE Pi HAT : 4 étapes
Serrure intelligente à reconnaissance faciale avec LTE Pi HAT: La reconnaissance faciale est de plus en plus utilisée, nous pouvons l'utiliser pour créer une serrure intelligente
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é à reconnaissance faciale pour un réfrigérateur avec Raspberry Pi : En naviguant sur 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 avec d'autres des outils intelligents chez vous ! Par exemple, vous ne pouvez pas définir
Reconnaissance faciale en temps réel : un projet de bout en bout : 8 étapes (avec photos)
Reconnaissance faciale en temps réel : un projet de bout en bout : Lors de mon dernier tutoriel explorant OpenCV, nous avons appris le SUIVI D'OBJETS DE VISION AUTOMATIQUE. Nous allons maintenant utiliser notre PiCam pour reconnaître les visages en temps réel, comme vous pouvez le voir ci-dessous :