Pan/Tilt Face Tracking avec le raspberry pi
Avec quelques efforts, j'ai découvert que contrôler deux servomoteurs pour permettre à une webcam de faire un panoramique/inclinaison tout en suivant un visage en temps réel à l'aide du raspberry pi n'est pas aussi impossible qu'il y paraît au premier abord. Avec quelques ajustements minutieux et une optimisation du code, j'ai pu permettre au pi de suivre deux servos tout en exécutant la détection de visage OpenCV à 320 × 240 à la recherche d'un profil droit, d'un profil gauche et d'une face frontale et en ajustant les servos plus rapidement qu'une fois par seconde .
Étape 1 :Acquérir le matériel.
Choses nécessaires :
Un raspberry pi — Le modèle A fonctionnera bien, j'ai le modèle B d'origine qui a les mêmes spécifications que le nouveau modèle A (moins le réseau).
Un support panoramique/inclinable
Deux servos
Un câble plat GPIO
Une webcam compatible Pi – J'ai utilisé un Logitech C210
En supposant que vous ayez déjà un Raspberry Pi et une webcam, le matériel supplémentaire vous coûtera environ 25 $
Étape 2 :Préparez votre Raspberry Pi.
Assurez-vous que vous utilisez la version officielle de RaspbianOS (la version hard-float) et qu'elle est à jour.
Vous souhaiterez peut-être overclocker votre raspberry pi. Je l'ai fait à 800mhz. Plus vous montez haut, plus la reconnaissance faciale sera rapide, mais moins votre pi sera stable.
Installez OpenCV pour python :sudo apt-get install python-opencv
Obtenez le merveilleux servodriver servoblaster pour raspberry pi par Richard Hirst :ici
Vous pouvez télécharger tous les fichiers sous forme d'archive zip et les extraire dans un dossier quelque part sur le pi.
Pour installer le pilote de servoblaster, ouvrez un terminal et un CD dans le répertoire où vous avez extrait les fichiers de servoblaster
exécutez la commande :make install_autostart
Vous voudrez peut-être faire expirer le servoblaster et arrêter d'envoyer des signaux au servo après une seconde s'il n'est pas déplacé.
Pour ce faire, ajoutez la ligne suivante à /etc/modules :servoblaster idle_timeout=1000
démarrez servoblaster avec la commande suivante :sudo modprobe servoblaster
La tâche suivante consiste à faire fonctionner la caméra comme prévu :
Tout d'abord, merci beaucoup à Gmoto d'avoir trouvé cela et de l'avoir signalé, c'était le dernier élément du « pi » pour que tout fonctionne correctement ; vous devez ajuster certains paramètres dans le module uvcvideo pour que tout fonctionne correctement.
À savoir, exécutez ces commandes :
rmmod uvcvideo
modprobe uvcvideo nodrop=1 timeout=5000 bizarreries=0x80
Vous devrez l'exécuter à chaque redémarrage si vous prévoyez d'exécuter le programme de suivi du visage, ou bien ajouter les paramètres à /etc/modules comme vous l'avez fait avec le réglage du délai d'attente du servoblaster.
Étape 3 :Assemblez votre gréement
Construisez les supports pan/tilt selon les instructions et fixez les servos.
Fixez votre appareil photo en haut du support (je viens d'utiliser du ruban adhésif) et branchez-le sur votre port usb Raspberry Pi.
J'étais capable de l'alimenter sans concentrateur USB, mais vous voudrez peut-être obtenir un concentrateur USB alimenté et passer par là.
Étape 4 : Connecter les servos
Servoblaster considère que le servo-0 est tout ce qui est connecté au GPIO 4 et le servo-1 est tout ce qui est connecté au GPIO-17.
Les servos ont trois fils, un est rouge qui est Vin/positif, un est marron ou noir qui est la masse/négatif et l'autre est le contrôle.
à l'aide du câble en nappe (et dans mon cas, un fil de connexion coincé dans les trous), connectez le fil de commande de chaque servomoteur à la broche correcte. Le code suppose que le servo-0 contrôlera le mouvement gauche-droite et que le servo-1 contrôlera le mouvement de haut en bas de la caméra ; alors connectez-les de cette façon.
Maintenant, il semblerait logique que le Vin des servos provienne des broches 5v du GPIO et que la masse des servos provienne des broches de masse du GPIO, mais cela n'a pas fonctionné dans mon cas car j'ai utilisé un servo plus grand pour la base. Le gros servo a tiré plus de puissance que le pi ne voulait donc fournir. Cependant, j'ai pu alimenter mon plus petit servo d'inclinaison sans problème. De plus, Richard Hirst, qui a fabriqué le servoblaster, semble impliquer qu'il peut piloter plusieurs petits servos avec le GPIO 5v. J'ai également appris qu'il y a des fusibles dans ma version du pi qui ont été supprimés plus tard en rapport avec ces broches d'alimentation. Mon instinct me dit que vous pouvez alimenter deux servos plus petits à partir de ces broches sur un pi plus récent. Si vous ne pouvez pas, voici ce que vous devrez faire :
Vous aurez besoin d'une sorte de source d'alimentation externe capable de supporter une charge lourde de 5v-6v :j'ai utilisé celle intégrée dans un arduino, mais n'importe quelle source d'alimentation de 5 volts devrait faire l'affaire; les servos sont évalués jusqu'à 6v. La broche 5v sur une alimentation d'ordinateur, un chargeur mural 5v-6v, certaines piles en parallèle ; c'est comme tu veux. Une fois que vous avez votre source externe, connectez simplement les lignes positive et négative des servos aux côtés positif et négatif de votre source d'alimentation, puis connectez la masse (négative) de votre source d'alimentation externe à une broche de masse sur le Raspberry Pi GPIO.
Étape 5 :Exécutez le programme
J'ai joint le script python à cet article, il s'appelle PiFace.py pour l'exécuter simplement sur CD à son emplacement dans le terminal et tapez :python PiFace.py
Voici quelques vidéos de moi en action.
Pour plus de détails :Suivi de visage Pan / Tilt avec le raspberry pi
Processus de fabrication
- Lire la température avec DS18B20 | Raspberry Pi 2
- Surveillance de la température sur le Raspberry Pi
- Mesure de la température avec RASPBERRY PI
- Contrôle de la température avec Raspberry Pi
- L'intégration des données du capteur avec le microprocesseur Raspberry Pi
- Capteur de suivi de ligne avec RPi
- Détection de foudre avec un Raspberry Pi
- Suivi de la boule Raspberry Pi
- Avertisseur d'eau Raspberry Pi 2 avec t cobbler plus