Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Construisez un Système de Suivi Visage en Temps Réel avec Arduino et OpenCV

Composants et fournitures

Composant Quantité
Arduino UNO 1
Webcam (mini USB) 1
Micro-servomoteurs 2
Kit Pan-Tilt (support orientable) 1
Plaque d'essai (breadboard) 1

Applications et services en ligne

À propos du projet

Dans un tutoriel précédent, j'ai montré la communication Arduino-Python via pyserial pour piloter une LED. Ensuite, la détection de couleur et suivi d'objet avec OpenCV. Ici, nous allons détecter et suivre un visage : la caméra (montée sur le Pan-Tilt) suivra automatiquement votre visage. Plus simple qu'il n'y paraît !

Étape 1 : Prérequis

Matériel : Arduino UNO, Webcam, 2 microservos, Breadboard, Kit Pan-Tilt.

Logiciel : Python 2.7, OpenCV, pyserial, numpy, fichier haarcascade_frontalface_default.xml.

Étape 2 : Installation environnement Python

  1. Installez Python 2.7.14. Vérifiez : python dans l'invite de commande.
  2. Si erreur, configurez la variable d'environnement PATH.
  3. Installez les modules :

> pip install pyserial
> pip install opencv-python
> pip install numpy

Étape 3 : Script Python (face.py)

Créez un dossier, placez-y haarcascade_frontalface_default.xml et le script ci-dessous :


import numpy as np
import serial
import time
import sys
import cv2

# Port série Arduino (adaptez 'COM5')
arduino = serial.Serial('COM5', 9600)
time.sleep(2)
print("Connecte a l'Arduino...")

# Classifieur Haar Cascade
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

# Capture vidéo
cap = cv2.VideoCapture(0)

while True:
    ret, img = cap.read()
    cv2.resizeWindow('img', 500, 500)
    
    # Repères visuels
    cv2.line(img, (500, 250), (0, 250), (0, 255, 0), 1)
    cv2.line(img, (250, 0), (250, 500), (0, 255, 0), 1)
    cv2.circle(img, (250, 250), 5, (255, 255, 255), -1)
    
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3)
    
    for (x, y, w, h) in faces:
        cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 5)
        
        # Centre du rectangle détecté
        xx = int(x + w/2)
        yy = int(y + h/2)
        center = (xx, yy)
        
        print("Centre du rectangle :", center)
        
        # Envoi vers Arduino : format "XYZ"
        data = "X{0:d}Y{1:d}Z".format(xx, yy)
        print("Output = '" + data + "'")
        arduino.write(data.encode())
    
    cv2.imshow('img', img)
    
    # Échap pour quitter
    if cv2.waitKey(30) & 0xFF == 27:
        break

cap.release()
cv2.destroyAllWindows()

Étape 4 : Code Arduino (servo.ino)


#include <Servo.h>

Servo servoVer;  // Vertical (tilt)
Servo servoHor;  // Horizontal (pan)

int x, y;
int prevX, prevY;

void setup() {
  Serial.begin(9600);
  servoVer.attach(5);  // Broche 5
  servoHor.attach(6);  // Broche 6
  servoVer.write(90);  // Position centrale
  servoHor.write(90);
}

void Pos() {
  if (prevX != x || prevY != y) {
    // Mapping coordonnées image (600x450) -> angles servo
    int servoX = map(x, 600, 0, 70, 179);
    int servoY = map(y, 450, 0, 179, 95);
    
    // Limites mécaniques
    servoX = constrain(servoX, 70, 179);
    servoY = constrain(servoY, 95, 179);
    
    servoHor.write(servoX);
    servoVer.write(servoY);
  }
}

void loop() {
  if (Serial.available() > 0) {
    if (Serial.read() == 'X') {
      x = Serial.parseInt();
      if (Serial.read() == 'Y') {
        y = Serial.parseInt();
        Pos();
      }
    }
    // Vide le buffer
    while (Serial.available() > 0) Serial.read();
  }
}

Étape 5 : Mécanisme Pan-Tilt

Kit prêt à l'emploi utilisé (peu cher, facile à monter). Vous pouvez aussi le fabriquer (bois, plastique, impression 3D).

Construisez un Système de Suivi Visage en Temps Réel avec Arduino et OpenCV

Étape 6 : Connexions

Construisez un Système de Suivi Visage en Temps Réel avec Arduino et OpenCV

Câblage simple :

Étape 7 : Test

  1. Vérifiez le câblage et téléversez le sketch Arduino.
  2. Fermez l'IDE Arduino (libère le port COM).
  3. Lancez face.py avec IDLE (F5).
  4. La fenêtre vidéo s'ouvre, le visage est détecté, les servos le suivent.
  5. Fixez la webcam sur le Pan-Tilt pour qu'elle bouge avec les servos.

J'espère que vous avez aimé et appris quelque chose de nouveau. Merci !

Fichiers joints

Processus de fabrication

  1. Construire un capteur de température distant avec Raspberry Pi et Python – Guide étape par étape
  2. Reconnaissance faciale en temps réel sur Raspberry Pi – Guide complet
  3. Suivi d'objets automatisé par vision avec Raspberry Pi et OpenCV
  4. Construire un décodeur DTMF avec un Arduino seul – Aucun CI supplémentaire nécessaire
  5. Créer un système Ambilight spectaculaire pour moniteur avec Arduino
  6. Système de pointage RFID fiable avec Arduino et Python (base de données phpMyAdmin)
  7. Construire un dispositif de lévitation ultrasonique avec Arduino – Guide étape par étape
  8. Construire un Voltmètre Intelligent avec Arduino et Smartphone – Projet DIY Facile
  9. Moniteur de Fréquence Cardiaque IoT en Temps Réel avec Arduino et MAX30100