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

Pelacakan Wajah Menggunakan Arduino

Komponen dan persediaan

Arduino UNO
× 1
kamera web
× 1
Servo mikro
× 2
Pan-Tilt
× 1
Breadboard (generik)
× 1

Aplikasi dan layanan online

Python 2.7
OpenCV

Tentang proyek ini

Dalam tutorial sebelumnya, saya membagikan bagaimana 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 suatu objek dan melacaknya di layar, lihat di sini:DETEKSI WARNA MENGGUNAKAN OPENCV DAN PYTHON.

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

Jadi mari kita mulai...

Langkah 1:Hal yang Anda Butuhkan

Persyaratannya minimal. Di sini saya telah menyediakan daftar bagian dari semua yang Anda butuhkan:

Persyaratan Perangkat Keras:

  • Arduino UNO (Anda dapat menggunakan papan lain )
  • Web Cam ( Webcam Mini)
  • Servos x 2 (Saya akan menggunakan servo mikro tetapi Anda dapat menggunakan Servo Standar)
  • Breadboard (Untuk pembuatan prototipe)
  • Perangkat Miring Pan Servo (Anda dapat membuatnya jika mau)

Persyaratan Perangkat Lunak:

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

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

Langkah 2:Menyiapkan Lingkungan Python

Memasang Python:

Jadi pertama-tama kita perlu menjalankan dan menjalankan Python 2.7. Untuk melakukan ini, unduh terlebih dahulu dan Instal python 2.7.14. Untuk memeriksa apakah sudah terpasang dengan benar Goto :Windows Search>> Ketik "IDLE">> Tekan Enter. Shell Python akan muncul.

ATAU

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

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

Menginstal 'pyserial', 'OpenCV" dan "numpy" dengan Python:

Untuk menginstal modul ini kita akan menggunakan 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 bisa pindah ke bagian coding...

Langkah 3:Skrip Python

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

Sekarang buka notepad dan tulis skrip yang diberikan di bawah ini, Simpan sebagai 'face.py' di folder yang sama dengan haarcascade. (Anda bisa mendownload kode yang sudah saya sediakan filenya di bawah ini) :

#import semua modul yang diperlukan
import numpy sebagai np
import serial
waktu impor
import sys
import cv2
#Setup Jalur komunikasi untuk arduino (Sebagai ganti 'COM5' letakkan port yang terhubung dengan arduino Anda)
arduino =serial.Serial('COM5', 9600)
time.sleep(2)
print("Connected to arduino...")
#mengimpor Haarcascade untuk deteksi wajah
face_cascade =cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
#Untuk merekam aliran video dari webcam.
cap =cv2.VideoCapture(0)
#Baca gambar yang diambil, ubah ke gambar Gray dan temukan wajah
sementara 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)
abu-abu =cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face =face_cascade.detectMultiScale(abu-abu, 1.3)
#deteksi wajah dan buat persegi panjang di sekelilingnya.
for (x,y,w,h) pada wajah:
cv2.rectangle(img,(x,y),(x+w,y+h),( 0,255,0),5)
roi_gray =abu-abu[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))
# Pusat roi (Persegi Panjang)
xx =int(x+(x+h))/2
yy =int(y+(y+w))/2
print (xx)
print (yy)
center =(xx,yy)
# mengirim data ke arduino
print("Pusat Persegi Panjang adalah :", center)
data ="X{0:d}Y{1:d}Z".format(xx, yy)
print ("output ='" +data+ "'")
arduino.write( data)
#Menampilkan aliran.
cv2.imshow('img',img)
#Tekan 'Esc' untuk menghentikan eksekusi
k =cv2.waitKey(30) &0xff
if k ==27:
break

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

haarcascade_frontalface_default.xml face.py

Langkah 4:Kode Arduino

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

(File yang dapat diunduh diberikan di bawah.)

#include
Servo servoVer; //Servo Vertikal
Servo ServoHor; //Servo Horizontal
int x;
int y;
int prevX;
int prevY;
void setup()
{
Serial .begin(9600);
servoVer.attach(5); //Pasang Servo Vertikal ke Pin 5
servoHor.attach(6); //Lampirkan Servo Horizontal ke 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 :-

Saya telah menggunakan kit yang tersedia untuk Pan-Tilt. Jika mau, Anda dapat membuatnya sendiri menggunakan kayu/Plastik atau bahkan cetakan 3D.

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

Langkah 6:Membuat Koneksi

Sirkuit ini cukup sederhana. Cukup pasang dua servos ke arduino.

  • Vertikal ke Pin 5
  • Horisontal ke Pin 6
  • Daya ke +5V
  • Berdasarkan GND

Periksa diagram sirkuit untuk referensi.

Langkah 7:Menguji

  • Setelah semuanya selesai, hal terakhir yang harus dilakukan adalah menguji apakah berhasil. Untuk menguji terlebih dahulu, pastikan servo terhubung dengan benar ke arduino dan sketsa diunggah.
  • Setelah sketch diupload pastikan untuk menutup IDE agar port bebas untuk terhubung ke python.
  • Sekarang buka 'face.py' dengan Python IDLE dan tekan 'F5' untuk menjalankan kode. Ini akan memakan waktu beberapa detik untuk terhubung ke arduino dan kemudian Anda akan dapat melihat jendela streaming web cam. Sekarang kode akan mendeteksi wajah Anda dan servos akan melacaknya.
  • Servo harus bergerak saat Anda memindahkan objek. Sekarang cukup tempelkan kamera ke servo sehingga kamera akan bergerak bersama servo.

Harap Anda menyukainya. dan pelajari sesuatu yang baru.

Terima kasih!

Kode

  • servo.ino
  • Cuplikan kode #2
  • Cuplikan kode #3
servo.inoArduino
Kesalahan saat membuka file.
Cuplikan kode #2Teks biasa
#import semua modul yang diperlukanimport numpy sebagai npimport serialimport timeimport sysimport cv2#Setup Jalur komunikasi untuk arduino (Sebagai ganti 'COM5' letakkan port yang terhubung dengan arduino Anda)arduino =serial.Serial('COM5', 9600 ) time.sleep(2)print("Connected to arduino...")#mengimpor Haarcascade untuk face detectionface_cascade =cv2.CascadeClassifier('haarcascade_frontalface_default.xml')#Untuk merekam aliran video dari webcam.cap =cv2.VideoCapture (0)#Baca gambar yang diambil, ubah ke gambar Abu-abu dan temukan wajahsementara 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) abu-abu =cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) wajah =face_cascade.detectMultiScale(abu-abu, 1.3)#deteksi wajah dan buat persegi panjang di sekelilingnya. untuk (x,y,w,h) pada wajah:cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),5) roi_gray =abu-abu[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)) # Pusat roi (Persegi Panjang) xx =int(x+(x+h))/2 yy =int(y+(y+w))/2 print (xx) print (yy) center =(xx,yy)# pengiriman data ke arduino print("Pusat Persegi Panjang adalah :", center) data ="X{0:d}Y{1:d}Z".format(xx, yy) print ("output ='" +data+ "' ") arduino.write(data)#Menampilkan aliran. cv2.imshow('img',img)#Tekan 'Esc' untuk menghentikan eksekusi k =cv2.waitKey(30) &0xff jika k ==27:break
Cuplikan kode #3Teks biasa
#includeServo servoVer; //Servo Servo Vertikal servoHor; //Servoint Horizontal x;int y;int prevX;int prevY;void setup(){ Serial.begin(9600); servoVer.attach(5); //Lampirkan Servo Vertikal ke Pin 5 servoHor.attach(6); //Lampirkan Servo Horizontal ke 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 =peta(y, 450, 0, 179, 95); servoX =min(servoX, 179); servoX =maks(servoX, 70); servoY =min(servoY, 179); servoY =maks(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. Sensor Suhu Python dan Raspberry Pi
  2. Real-Time Face Recognition:Proyek End-to-End
  3. Pelacakan Objek Penglihatan Otomatis
  4. Decoder DTMF Hanya Menggunakan Arduino
  5. Membuat Monitor Ambilight Menggunakan Arduino
  6. Sistem Kehadiran Menggunakan Arduino dan RFID dengan Python
  7. Mesin ULTRASONIC LEVITATION Menggunakan ARDUINO
  8. Voltmeter DIY Menggunakan Arduino dan Smartphone
  9. Pemantau Detak Jantung Menggunakan IoT
  10. WebServerBlink Menggunakan Arduino Uno WiFi