Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Membangun Sistem Pelacakan Wajah Real-Time dengan Arduino & OpenCV

Komponen dan perlengkapan

Membangun Sistem Pelacakan Wajah Real-Time dengan Arduino & OpenCV
Arduino UNO
×1
Web cam
×1
Servo mikro
×2
Pan-Tilt
×1
Membangun Sistem Pelacakan Wajah Real-Time dengan Arduino & OpenCV
Papan roti (umum)
×1

Aplikasi dan layanan online

Python 2.7
Membangun Sistem Pelacakan Wajah Real-Time dengan Arduino & OpenCV
OpenCV

Tentang proyek ini

Dalam tutorial sebelumnya, saya telah membagikan cara Anda dapat berkomunikasi antara Arduino dan Python menggunakan modul 'pyserial' dan mengontrol LED. Jika Anda belum melihatnya, periksa di sini: KOMUNIKASI ANTARA ARDUINO & PYTHON!

Dan bagaimana Anda dapat mendeteksi warna objek dan melacaknya di layar, periksa di sini: DETEKSI WARNA MENGGUNAKAN OPENCV DAN PYTHON.

Dalam tutorial ini, saya akan menunjukkan kepada Anda cara melacak wajah menggunakan Arduino dan Python dan membuat kamera mengikuti wajah. Ini mungkin terdengar sulit tetapi percayalah itu tidak, Semua yang Anda butuhkan adalah pengetahuan dasar tentang Arduino dan Python.

Jadi mari kita mulai...

Langkah 1: Hal yang Anda Butuhkan

Persyaratannya minimum. Di sini saya telah memberikan daftar bagian dari semua yang Anda butuhkan:

Persyaratan Perangkat Keras:

  • Arduino UNO (Anda dapat menggunakan papan lain)
  • Web Cam (Web Cam Mini)
  • Servo x 2 (Saya akan menggunakan servo mikro tetapi Anda dapat menggunakan Servo Standar)
  • Papan roti (Untuk prototipe)
  • Kit Pan Tilt Servo (Anda dapat membuat satu jika Anda ingin)

Persyaratan Perangkat Lunak:

  • Python 2.7 (Harus terinstal, OS Linux biasanya sudah terinstal sebelumnya)
  • OpenCV (Anda dapat mengunduhnya secara terpisah atau menginstal menggunakan 'pip install' Dijelaskan lebih lanjut)
  • pyserial (Dapat diinstal dengan pip)
  • numpy.
  • Haarcascade.

Setelah semuanya terkumpul kita dapat melanjutkan ke Langkah Instalasi...

Langkah 2: Menyiapkan Lingkungan Python

Menginstal Python:

Membangun Sistem Pelacakan Wajah Real-Time dengan Arduino & OpenCV
Membangun Sistem Pelacakan Wajah Real-Time dengan Arduino & OpenCV
Membangun Sistem Pelacakan Wajah Real-Time dengan Arduino & OpenCV

Jadi pertama-tama kita perlu Python 2.7 berjalan. Untuk ini pertama-tama unduh dan Instal python 2.7.14. Untuk memeriksa apakah terinstal dengan benar Goto : Pencarian Windows >> Ketik "IDLE" >> Tekan Enter. Python Shell seharusnya muncul.

ATAU

Dalam pencarian ketik 'CMD' dan tekan enter untuk membuka Command Prompt. Di CMD ketik >> python dan tekan enter, Antarmuka Python seharusnya ditampilkan.

Jika Anda melihat kesalahan di CMD, Jangan panik Anda mungkin perlu mengatur variabel lingkungan. Anda dapat mengikuti tutorial iniDi sini untuk mengatur Variabel Lingkungan.

Menginstal 'pyserial', 'OpenCV' dan 'numpy' dalam Python:

Untuk menginstal modul ini kita akan menggunakan pip install,

Pertama buka CMD dan ketik kode berikut:-

>pip install serial
>pip install opencv-python
>pip install numpy

perintah ini akan menginstal modul yang diperlukan. Sekarang kita dapat melanjutkan ke bagian pengkodean...

Langkah 3: Skrip Python

Membangun Sistem Pelacakan Wajah Real-Time dengan Arduino & OpenCV

Sebelum memulai menulis kode hal pertama yang perlu dilakukan adalah membuat folder baru karena semua kode perlu disimpan dalam folder yang sama. Jadi buat folder baru, beri nama apa pun yang Anda inginkan. dan unduh 'Haarcascade' dari bawah dan tempelkan di folder tersebut.

Sekarang buka notepad dan tulis skrip yang diberikan di bawah, Simpan sebagai 'face.py' di folder yang sama dengan haarcascade. (Anda dapat mengunduh kode yang saya sediakan file di bawah) :

#import all the required modules
import numpy as np
import serial
import time
import sys
import cv2
#Setup Communication path for arduino (In place of 'COM5' put the port to which your arduino is connected)
arduino = serial.Serial('COM5', 9600)
time.sleep(2)
print("Connected to arduino...")
#importing the Haarcascade for face detection
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
#To capture the video stream from webcam.
cap = cv2.VideoCapture(0)
#Read the captured image, convert it to Gray image and find faces
while 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)
#detect the face and make a rectangle around it.
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]
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))
# Center of roi (Rectangle)
xx = int(x+(x+h))/2
yy = int(y+(y+w))/2
print (xx)
print (yy)
center = (xx,yy)
# sending data to arduino
print("Center of Rectangle is :", center)
data = "X{0:d}Y{1:d}Z".format(xx, yy)
print ("output = '" +data+ "'")
arduino.write(data)
#Display the stream.
cv2.imshow('img',img)
#Hit 'Esc' to terminate execution
k = cv2.waitKey(30) & 0xff
if k == 27:
break

Setelah ini selesai, lanjutkan untuk menulis kode untuk Arduino...

haarcascade_frontalface_default.xmlface.py

Langkah 4: Kode Arduino

Membangun Sistem Pelacakan Wajah Real-Time dengan Arduino & OpenCV

Setelah skrip Python siap kita perlu sketsa Arduino untuk mengontrol servo. Lihat kode di bawah, tempelkan di Arduino IDE dan simpan sebagai 'servo.ino' di folder yang sama dengan face.py dan haarcascade. unggah kode dan lanjutkan ke langkah selanjutnya untuk membuat koneksi.

(File yang dapat diunduh diberikan di bawah.)

#include<servo.h>
Servo servoVer; //Vertical Servo
Servo servoHor; //Horizontal Servo
int x;
int y;
int prevX;
int prevY;
void setup()
{
Serial.begin(9600);
servoVer.attach(5); //Attach Vertical Servo to Pin 5
servoHor.attach(6); //Attach Horizontal Servo to Pin 6
servoVer.write(90);
servoHor.write(90);
}
void Pos()
{
if(prevX != x || prevY != y)
{
int servoX = map(x, 600, 0, 70, 179);
int servoY = map(y, 450, 0, 179, 95);
servoX = min(servoX, 179);
servoX = max(servoX, 70);
servoY = min(servoY, 179);
servoY = max(servoY, 95);

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();
}
}
while(Serial.available() > 0)
{
Serial.read();
}
}
}
servo.ino

Langkah 5: Mekanisme Pan-Tilt :-

Membangun Sistem Pelacakan Wajah Real-Time dengan Arduino & OpenCV

Saya telah menggunakan kit yang tersedia dengan mudah untuk Pan-Tilt. Jika Anda ingin Anda dapat membuatnya sendiri menggunakan kayu/Plastik atau bahkan mencetak 3D.

Yang saya gunakan cukup murah, dan sangat mudah untuk dirakit. Namun jika Anda ingin petunjuk cara melakukannya, Anda dapat menemukannya di sini.

Langkah 6: Membuat Koneksi

Membangun Sistem Pelacakan Wajah Real-Time dengan Arduino & OpenCV
Membangun Sistem Pelacakan Wajah Real-Time dengan Arduino & OpenCV

Rangkaian cukup sederhana. Cukup pasang dua servo ke arduino.

  • Vertikal ke Pin 5
  • Horizontal ke Pin 6
  • Daya ke +5V
  • Ground ke GND

Periksa diagram rangkaian untuk referensi.

Langkah 7: Pengujian

  • Setelah semuanya selesai hal terakhir yang perlu dilakukan adalah menguji apakah berfungsi. Untuk menguji pertama-tama pastikan servo terhubung dengan baik ke arduino dan sketsa diunggah.
  • Setelah sketsa diunggah pastikan untuk menutup IDE sehingga port bebas untuk terhubung ke python.
  • Sekarang buka 'face.py' dengan Python IDLE dan tekan 'F5' untuk menjalankan kode. Akan membutuhkan beberapa detik untuk terhubung ke arduino dan kemudian Anda seharusnya dapat melihat jendela streaming web cam. Sekarang kode akan mendeteksi wajah Anda dan servo akan melacaknya melacaknya.
  • Servo harus bergerak saat Anda memindahkan objek. Sekarang cukup pasang kamera ke servo sehingga akan Bergerak bersama servo.

Semoga Anda menyukainya. dan belajar sesuatu yang baru.

Terima kasih!

Kode

  • servo.ino
  • Cuplikan kode #2
  • Cuplikan kode #3
servo.inoArduino
Error opening file.
Cuplikan kode #2Teks biasa
#import all the required modules import numpy as np import serial import time import sys import cv2 #Setup Communication path for arduino (In place of 'COM5' put the port to which your arduino is connected) arduino = serial.Serial('COM5', 9600) time.sleep(2) print("Connected to arduino...") #importing the Haarcascade for face detection face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') #To capture the video stream from webcam. cap = cv2.VideoCapture(0) #Read the captured image, convert it to Gray image and find faces while 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) #detect the face and make a rectangle around it. 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] 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)) # Center of roi (Rectangle) xx = int(x+(x+h))/2 yy = int(y+(y+w))/2 print (xx) print (yy) center = (xx,yy) # sending data to arduino print("Center of Rectangle is :", center) data = "X{0:d}Y{1:d}Z".format(xx, yy) print ("output = '" +data+ "'") arduino.write(data) #Display the stream. cv2.imshow('img',img) #Hit 'Esc' to terminate execution k = cv2.waitKey(30) & 0xff if k == 27: break 
Cuplikan kode #3Teks biasa
#include<servo.h> Servo servoVer; //Vertical Servo Servo servoHor; //Horizontal Servo int x; int y; int prevX; int prevY; void setup() { Serial.begin(9600); servoVer.attach(5); //Attach Vertical Servo to Pin 5 servoHor.attach(6); //Attach Horizontal Servo to Pin 6 servoVer.write(90); servoHor.write(90); } void Pos() { if(prevX != x || prevY != y) { int servoX = map(x, 600, 0, 70, 179); int servoY = map(y, 450, 0, 179, 95); servoX = min(servoX, 179); servoX = max(servoX, 70); servoY = min(servoY, 179); servoY = max(servoY, 95); 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(); } } while(Serial.available() > 0) { Serial.read(); } } } 

Proses manufaktur

  1. Membuat Sensor Suhu Jarak Jauh dengan Raspberry Pi dan Python – Panduan Langkah demi Langkah
  2. Pengenalan Wajah Real-Time pada Raspberry Pi – Panduan Ujung ke Ujung
  3. Pelacakan Objek Berbasis Visi Otomatis dengan Raspberry Pi dan OpenCV
  4. Membangun DTMF Decoder Hanya Menggunakan Arduino – Tidak Perlu IC Tambahan
  5. Buat Sistem Ambilight Monitor Menakjubkan dengan Arduino
  6. Sistem Absensi RFID berbasis Arduino yang Andalkan dengan Python
  7. Buat Alat Levitasi Ultrasonik dengan Arduino – Panduan Langkah demi Langkah
  8. Buat Voltmeter Cerdas dengan Arduino & Smartphone – Proyek DIY Mudah
  9. Pemantau Detak Jantung IoT Real-Time dengan Arduino & MAX30100
  10. Arduino Uno WiFi Web Server: Nyalakan/Matikan LED Melalui Browser