Оглавление:

ОТСЛЕЖИВАНИЕ ЛИЦА С ПОМОЩЬЮ ARDUINO !!!: 7 шагов
ОТСЛЕЖИВАНИЕ ЛИЦА С ПОМОЩЬЮ ARDUINO !!!: 7 шагов

Видео: ОТСЛЕЖИВАНИЕ ЛИЦА С ПОМОЩЬЮ ARDUINO !!!: 7 шагов

Видео: ОТСЛЕЖИВАНИЕ ЛИЦА С ПОМОЩЬЮ ARDUINO !!!: 7 шагов
Видео: Питон + компьютерное зрение + ардуино (python + opencv + arduino) 2024, Ноябрь
Anonim
ОТСЛЕЖИВАНИЕ ЛИЦА С ПОМОЩЬЮ ARDUINO !!!
ОТСЛЕЖИВАНИЕ ЛИЦА С ПОМОЩЬЮ ARDUINO !!!

В предыдущем руководстве я рассказал, как вы можете общаться между Arduino и Python с помощью модуля pyserial и управлять светодиодом. Если вы этого не видели, посмотрите здесь: СВЯЗЬ МЕЖДУ ARDUINO И PYTHON!

И как вы можете определить цвет объекта и отслеживать его на экране, посмотрите здесь: ОПРЕДЕЛЕНИЕ ЦВЕТА С ПОМОЩЬЮ OPENCV И PYTHON.

В этом руководстве я покажу вам, как отслеживать лица с помощью Arduino и Python и заставлять камеру следовать за лицом. Это может показаться трудным, но поверьте мне, это не так. Все, что вам нужно, - это базовые знания Arduino и Python.

Итак, приступим …

Шаг 1. Вещи, которые вам понадобятся:

Вещи, которые вам понадобятся
Вещи, которые вам понадобятся
Вещи, которые вам понадобятся
Вещи, которые вам понадобятся
Вещи, которые вам понадобятся
Вещи, которые вам понадобятся

Требования минимальные. Здесь я предоставил список всего, что вам нужно:

Требования к оборудованию:

  • Arduino UNO (Amazon США / Amazon EU)
  • Веб-камера (Amazon US / Amazon EU)
  • Сервоприводы x 2 (Amazon US / Amazon EU)
  • Макетная плата (Amazon US / Amazon EU)
  • Комплект сервопривода панорамирования и наклона (Amazon US / Amazon EU)

Требования к программному обеспечению:

  1. Python 2.7 (должен быть установлен, в ОС Linux он обычно предустановлен)
  2. OpenCV (вы можете загрузить его отдельно или установить с помощью pip install. Подробнее)
  3. pyserial (можно установить с помощью pip)
  4. тупой.
  5. Haarcascade.

После того, как все будет собрано, мы можем перейти к этапу установки …

Шаг 2: Настройка среды Python:

Настройка среды Python
Настройка среды Python
Настройка среды Python
Настройка среды Python
Настройка среды Python
Настройка среды Python

Установка Python:

Итак, сначала нам нужно запустить Python 2.7. Для этого сначала загрузите и установите python 2.7.14. Чтобы проверить, правильно ли он установлен, перейдите к: Windows Search >> Введите "IDLE" >> Нажмите Enter. Должна появиться оболочка Python.

ИЛИ

В строке поиска введите «CMD» и нажмите Enter, чтобы открыть командную строку. В CMD введите >> python и нажмите Enter, должен отобразиться интерфейс Python.

Если вы видите ошибку в CMD, не паникуйте, вам, вероятно, нужно установить переменную среды. Вы можете следовать этому руководству здесь, чтобы настроить переменную среды.

Установка pyserial, OpenCV и numpy в python:

Для установки этих модулей мы будем использовать pip install, Сначала откройте CMD и введите следующие коды: -

pip install serial

pip install opencv-python> pip install numpy

эти команды установят необходимые модули. Теперь мы можем перейти к кодированию…

Шаг 3: скрипт Python:

Скрипт Python
Скрипт Python

Прежде чем приступить к написанию кода, первое, что нужно сделать, это создать новую папку, так как весь код должен храниться в той же папке. Так что создайте новую папку, назовите ее как хотите. и загрузите "Haarcascade" снизу и вставьте его в папку.

Теперь откройте блокнот и напишите приведенный ниже скрипт. Сохраните его как «face.py» в той же папке, что и haarcascade. (Вы можете скачать код, который я предоставил в файле ниже):

# импортировать все необходимые модули

import numpy as np import serial import time import sys import cv2 #Setup Путь связи для arduino (вместо 'COM5' укажите порт, к которому подключен ваш arduino) arduino = serial. Serial ('COM5', 9600) time.sleep (2) print («Подключено к arduino…») # импорт Haarcascade для распознавания лиц face_cascade = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') # Для захвата видеопотока с веб-камеры. cap = cv2. VideoCapture (0) # Прочитать захваченное изображение, преобразовать его в серое изображение и найти лица, пока 1: 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) в лицах: 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] arr = {y: y + h, x: x + w} print (arr) print ('X: '+ str (x)) print (' Y: '+ str (y)) print (' x + w: '+ str (x + w)) print (' y + h: '+ str (y + h)) # Центр рентабельности (прямоугольник) xx = int (x + (x + h)) / 2 yy = int (y + (y + w)) / 2 print (xx) print (yy) center = (xx, yy) # отправка данных в arduino print ("Center of Rectangle is:", center) data = "X {0: d} Y {1: d} Z".format (xx, yy) print ("output = '" + data + "'") arduino.write (data) # Отобразить поток. cv2.imshow ('img', img) # Нажмите 'Esc', чтобы завершить выполнение k = cv2.waitKey (30) & 0xff if k == 27: break

Как только это будет сделано, переходите к написанию кода для Arduino …

Шаг 4: Код Arduino:

Код Arduino
Код Arduino

После того, как скрипт python будет готов, нам понадобится скетч Arduino для управления сервоприводом. Обратитесь к приведенному ниже коду, вставьте его в Arduino IDE и сохраните как servo.ino в той же папке, что и face.py и haarcascade. загрузите код и переходите к следующему шагу, чтобы установить соединения.

(Загружаемый файл приведен ниже)

#включают

Servo servoVer; // Вертикальный сервопривод ServoHor; // Горизонтальный сервопривод int x; int y; int prevX; int prevY; void setup () {Serial.begin (9600); servoVer.attach (5); // Присоединяем вертикальный сервопривод к выводу 5 servoHor.attach (6); // Присоединяем горизонтальный сервопривод к выводу 6 servoVer.write (90); servoHor.write (90); } void Pos () {if (prevX! = x || prevY! = y) {int servoX = map (x, 600, 0, 70, 179); int servoY = карта (y, 450, 0, 179, 95); servoX = мин (servoX, 179); servoX = max (servoX, 70); servoY = min (servoY, 179); servoY = max (servoY, 95); servoHor.write (servoX); servoVer.write (сервоY); }} void loop () {если (Serial.available ()> 0) {если (Serial.read () == 'X') {x = Serial.parseInt (); если (Serial.read () == 'Y') {y = Serial.parseInt (); Pos (); }} пока (Serial.available ()> 0) {Serial.read (); }}}

Шаг 5: Механизм панорамирования-наклона: -

Механизм панорамирования и наклона
Механизм панорамирования и наклона
Механизм панорамирования и наклона
Механизм панорамирования и наклона

Я использовал готовый комплект для Pan-Tilt. Если вы хотите, вы можете сделать его самостоятельно из дерева / пластика или даже напечатать его на 3D-принтере.

Тот, который я использовал, довольно дешевый, и его очень легко собрать. Тем не менее, если вам нужны инструкции о том, как это сделать, вы можете найти их здесь.

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

Установление связей
Установление связей
Установление связей
Установление связей

Схема довольно проста. Просто подключите два сервопривода к Arduino.

  1. Вертикально к выводу 5
  2. По горизонтали к выводу 6
  3. Питание до + 5В
  4. Земля на GND

Обратитесь к принципиальной схеме для справки.

Шаг 7: ТЕСТИРОВАНИЕ:

  • После того, как все будет сделано, последнее, что нужно сделать, это проверить, работает ли оно. Для тестирования сначала убедитесь, что сервоприводы правильно подключены к Arduino и скетч загружен.
  • После загрузки скетча обязательно закройте IDE, чтобы порт был свободен для подключения к python.
  • Теперь откройте «face.py» с помощью Python IDLE и нажмите «F5», чтобы запустить код. Подключение к Arduino займет несколько секунд, после чего вы должны увидеть окно, транслирующее веб-камеру. Теперь код обнаружит ваше лицо, и сервоприводы будут отслеживать его.
  • Сервопривод должен двигаться, когда вы перемещаете объект. Теперь просто прикрепите камеру к сервоприводам, чтобы она двигалась вместе с сервоприводами.

Спасибо.

Рекомендуемые: