Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Система отслеживания лица в реальном времени: Arduino + OpenCV (Python)

Компоненты и материалы

КомпонентКоличество
Arduino UNO1
Веб-камера (мини)1
Микросервоприводы2
Pan-Tilt крепление (готовый комплект или самодельное)1
Макетная плата1

Программное обеспечение

О проекте

Продолжение уроков: ранее было управление LED и цветовым трекингом. Теперь — лицевой трекинг: камера на pan-tilt следует за лицом.

Требуются базовые знания Arduino и Python.

Шаг 1: Установка Python и библиотек

  1. Установите Python 2.7.14. Проверка: Win+R → IDLE или cmd → python.
  2. Если ошибка — добавьте Python в PATH.
  3. В командной строке:
    > pip install serial
    > pip install opencv-python
    > pip install numpy
    

Шаг 2: Python-скрипт (face.py)

Создайте папку, положите туда haarcascade_frontalface_default.xml и файл face.py:

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

# Порт Arduino (замените COM5 на свой)
arduino = serial.Serial('COM5', 9600)
time.sleep(2)
print("Connected to Arduino...")

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)

while True:
    ret, img = cap.read()
    cv2.resizeWindow('img', 500, 500)
    # Перекрёстные линии для визуализации центра
    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)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = img[y:y+h, x:x+w]

        # Центр прямоугольника
        xx = int(x + (x + w)) / 2
        yy = int(y + (y + h)) / 2
        center = (xx, yy)
        print("Center:", center)

        # Посылка в Arduino: "XYZ"
        data = "X{0:d}Y{1:d}Z".format(int(xx), int(yy))
        print("Output:", data)
        arduino.write(data.encode())

    cv2.imshow('img', img)
    if cv2.waitKey(30) & 0xFF == 27: break  # Esc

cap.release()
cv2.destroyAllWindows()

Шаг 3: Скетч Arduino (servo.ino)

#include <Servo.h>

Servo servoVer; // Вертикаль (пин 5)
Servo servoHor; // Горизонталь (пин 6)

int x, y, prevX, prevY;

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

void updatePosition() {
  if (prevX != x || prevY != y) {
    // Маппинг координат камеры (600×450) на углы серв
    int servoX = map(x, 600, 0, 70, 179);
    int servoY = map(y, 450, 0, 179, 95);
    servoX = constrain(servoX, 70, 179);
    servoY = constrain(servoY, 95, 179);

    servoHor.write(servoX);
    servoVer.write(servoY);
    prevX = x; prevY = y;
  }
}

void loop() {
  if (Serial.available() > 0) {
    if (Serial.read() == 'X') {
      x = Serial.parseInt();
      if (Serial.read() == 'Y') {
        y = Serial.parseInt();
        updatePosition();
      }
    }
    while (Serial.available() > 0) Serial.read(); // очистка буфера
  }
}

Шаг 4: Механика Pan-Tilt

Готовый дешёвый комплект или самодельный из дерева/пластика/3D-печати.

Шаг 5: Подключение

Система отслеживания лица в реальном времени: Arduino + OpenCV (Python)

Шаг 6: Тестирование

  1. Загрузите скетч, закройте Arduino IDE (порт освободится).
  2. Запустите face.py в IDLE (F5).
  3. Через пару секунд откроется окно камеры, лицо будет в прямоугольнике, сервы начнут следить.
  4. Закрепите камеру на pan-tilt — она будет двигаться за лицом.

Производственный процесс

  1. Создание удалённого датчика температуры на Raspberry Pi и Python — пошаговое руководство
  2. Распознавание лиц в реальном времени на Raspberry Pi — полное руководство
  3. Автоматизированное визуальное отслеживание объектов на Raspberry Pi и OpenCV
  4. Создание DTMF-декодера на Arduino без внешних микросхем
  5. Создание потрясающей системы Ambilight для монитора на Arduino
  6. Надежная система учета рабочего времени на Arduino с RFID и Python
  7. Создание ультразвукового левитатора на Arduino: пошаговое руководство
  8. Умный вольтметр на Arduino и смартфоне — простое DIY-проект
  9. IoT-монитор пульса в реальном времени на Arduino и MAX30100
  10. Веб-сервер на Arduino Uno WiFi: управление LED через браузер