Pengenalan Wajah Real-Time pada Raspberry Pi – Panduan Ujung ke Ujung
Tutorial ini memandu Anda dalam membangun sistem pengenalan wajah real-time pada Raspberry Pi menggunakan OpenCV dan Pi-Cam. Dari pengaturan hardware hingga pelatihan recognizer, setiap langkah disajikan dengan cuplikan kode yang jelas dan tips praktis.
Di bawah ini Anda akan melihat demonstrasi langsung Pi-Cam mendeteksi wajah secara real-time.
Proyek ini mengandalkan perpustakaan open-source OpenCV, yang dioptimalkan untuk kinerja real-time. Meskipun kita akan fokus pada Raspberry Pi yang menjalankan Raspbian, kode yang sama berjalan di macOS dan Windows dengan hanya penyesuaian minor.
3 Fase
Alur kerja pengenalan wajah lengkap dapat dibagi menjadi tiga tahap yang berbeda:
Deteksi Wajah & Pengumpulan Data
Pelatihan Recognizer
Pengenalan Wajah Real-Time
Diagram di bawah meringkas fase-fase ini.
Langkah 1: Bill of Materials
Komponen esensial:
Raspberry Pi 3 – $32,00
Modul Kamera Mini OV5647 5-MPx 1080p – $13,00
Langkah 2: Menginstal OpenCV 3
Kami merekomendasikan mengikuti panduan Adrian Rosebrock untuk instalasi OpenCV 3 yang bersih di Raspbian Stretch. Setelah tutorial, aktifkan lingkungan virtual Python yang khusus:
source ~/.profile workon cv
Setelah di dalam lingkungan, verifikasi versi Python dan instalasi OpenCV:
python >>> import cv2 >>> cv2.__version__
Anda seharusnya melihat nomor versi seperti 3.3.0 atau lebih baru.
Langkah 3: Menguji Kamera Anda
Jika kamera tidak terdeteksi, aktifkan driver dengan:
sudo modprobe bcm2835-v4l2
Cuplikan Python berikut membuka stream Pi-Cam, menampilkannya dalam warna dan grayscale, dan membaliknya secara vertikal (sesuaikan jika orientasi kamera Anda berbeda):
import numpy as np import cv2 cap = cv2.VideoCapture(0) cap.set(3, 640) cap.set(4, 480) while True: ret, frame = cap.read() frame = cv2.flip(frame, -1) gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.imshow('frame', frame) cv2.imshow('gray', gray) if cv2.waitKey(30) & 0xff == 27: break cap.release() cv2.destroyAllWindows()
Jalankan dengan python simpleCamTest.py (tersedia di GitHub proyek). Tekan ESC untuk keluar.
Langkah 4: Deteksi Wajah
Klasifikasi Haar Cascade OpenCV adalah pendekatan pembelajaran mesin yang ringan untuk mendeteksi wajah. Unduh berkas XML yang telah dilatih sebelumnya (haarcascade_frontalface_default.xml) dan letakkan di folder Cascades. Skrip berikut menunjukkan deteksi wajah real-time dengan kotak pembatas:
import cv2 faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml') cap = cv2.VideoCapture(0) cap.set(3, 640) cap.set(4, 480) while True: ret, img = cap.read() img = cv2.flip(img, -1) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = faceCascade.detectMultiScale( gray, scaleFactor=1.2, minNeighbors=5, minSize=(20, 20) ) for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2) cv2.imshow('video', img) if cv2.waitKey(30) & 0xff == 27: break cap.release() cv2.destroyAllWindows()
Parameter detectMultiScale mengontrol sensitivitas: scaleFactor mengurangi ukuran gambar setiap iterasi, minNeighbors menyaring false positive, dan minSize menetapkan wajah terkecil yang dapat terdeteksi.
Contoh Tambahan
Jelajahi opsi deteksi lebih banyak di GitHub proyek:
Mengumpulkan dataset yang berlabel esensial untuk pelatihan. Buat folder proyek (misalnya, FacialRecognitionProject) dan subdirektori dataset:
mkdir FacialRecognitionProject cd FacialRecognitionProject mkdir dataset
Unduh berkas Haar Cascade ke root proyek. Lalu jalankan 01_face_dataset.py untuk menangkap 30 gambar wajah per pengguna:
import cv2 import os cam = cv2.VideoCapture(0) cam.set(3, 640) cam.set(4, 480) face_detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') face_id = input('\nMasukkan ID pengguna (angka) dan tekan → ') print('\n[INFO] Menginisialisasi pengambilan wajah. Lihat ke kamera…') count = 0 while True: ret, img = cam.read() img = cv2.flip(img, -1) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_detector.detectMultiScale(gray, 1.3, 5) for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2) count += 1 cv2.imwrite(f'dataset/User.{face_id}.{count}.jpg', gray[y:y+h, x:x+w]) cv2.imshow('image', img) if cv2.waitKey(100) & 0xff == 27 or count >= 30: break if count >= 30: break cam.release() cv2.destroyAllWindows() print('\n[INFO] Keluar dari Program dan membersihkan.')
Setiap gambar bernama User.{id}.{count}.jpg (misalnya, User.1.4.jpg). Sesuaikan jumlah sampel sesuai kebutuhan.
Langkah 6: Pelatih
Menggunakan gambar yang dikumpulkan, latih recognizer wajah OpenCV. Model yang dihasilkan disimpan sebagai berkas .yml di folder trainer. Lihat skrip pelatihan lengkap di repositori proyek untuk detail implementasi.