- Komponen Diperlukan
- Menginstal OpenCV di Raspberry Pi
- Cara Mendeteksi Bagian Wajah menggunakan dlib
- Memprogram Raspberry Pi untuk Deteksi Landmark Wajah
- Menguji Pengenal Bagian Wajah
Deteksi landmark wajah merupakan proses mendeteksi berbagai bagian wajah seperti Alis, Mata, Hidung, Mulut, dan Rahang. Ada banyak aplikasi yang menggunakan teknik deteksi Facial Landmark.
Sebelumnya kita membangun sistem pengenalan wajah menggunakan OpenCV, hari ini kita akan menggunakan OpenCV yang sama dengan Raspberry Pi untuk deteksi landmark wajah. Modul pendeteksi landmark wajah yang telah dilatih sebelumnya dari pustaka dlib akan digunakan untuk mendeteksi lokasi struktur wajah utama di wajah dan python OpenCV akan digunakan untuk memvisualisasikan bagian wajah yang terdeteksi.
Komponen Diperlukan
Komponen Perangkat Keras
- Raspberry Pi 3
- Modul Kamera Pi
Perangkat Lunak dan Layanan Online
- OpenCV
- Dlib
- Python3
Sebelum melanjutkan dengan ini Raspberry Pi 3 Facial Landmark Detection , pertama, kita perlu menginstal OpenCV, imutils, dlib, Numpy, dan beberapa dependensi lain dalam proyek ini. OpenCV digunakan di sini untuk pemrosesan gambar digital. Aplikasi Pemrosesan Gambar Digital yang paling umum adalah deteksi objek, Pengenalan Wajah, dan penghitung orang.
Untuk mempelajari lebih lanjut tentang cara menghubungkan kamera Pi dengan Raspberry Pi, ikuti tutorial kami sebelumnya.
Menginstal OpenCV di Raspberry Pi
Di sini pustaka OpenCV akan digunakan untuk pemindai QR Raspberry Pi. Untuk menginstal OpenCV, pertama, perbarui Raspberry Pi.
sudo apt-get update
Kemudian instal dependensi yang diperlukan untuk menginstal OpenCV di Raspberry Pi Anda.
sudo apt-get install libhdf5-dev -y sudo apt-get install libhdf5-serial-dev –y sudo apt-get install libatlas-base-dev –y sudo apt-get install libjasper-dev -y sudo apt-get install libqtgui4 –Y sudo apt-get install libqt4-test –y
Setelah itu, instal OpenCV di Raspberry Pi menggunakan perintah di bawah ini.
pip3 instal opencv-contrib-python == 4.1.0.25
Kami sebelumnya menggunakan OpenCV dengan Raspberry pi dan membuat banyak tutorial tentangnya.
- Menginstal OpenCV di Raspberry Pi menggunakan CMake
- Pengenalan Wajah Real-Time dengan Raspberry Pi dan OpenCV
- Pengakuan Plat Lisensi menggunakan Raspberry Pi dan OpenCV
- Estimasi Crowd Size Menggunakan OpenCV dan Raspberry Pi
Kami juga telah membuat serangkaian tutorial OpenCV mulai dari tingkat pemula.
Menginstal imutils : imutils digunakan untuk menjalankan beberapa fungsi pemrosesan gambar yang diperlukan seperti terjemahan, rotasi, pengubahan ukuran, skeletonization, dan menampilkan gambar Matplotlib lebih mudah dengan OpenCV. Jadi instal imutils menggunakan perintah di bawah ini:
pip3 instal imutils
Menginstal dlib: dlib adalah perangkat modern yang berisi algoritme dan alat Pembelajaran Mesin untuk masalah dunia nyata. Gunakan perintah di bawah ini untuk menginstal dlib.
pip3 instal dlib
Menginstal NumPy : NumPy adalah pustaka inti untuk komputasi ilmiah yang berisi objek array berdimensi n yang kuat, menyediakan alat untuk mengintegrasikan C, C ++, dll.
Pip3 menginstal numpy
Cara Mendeteksi Bagian Wajah menggunakan dlib
Kita akan menggunakan detektor landmark wajah yang telah dilatih sebelumnya dari library dlib untuk mendeteksi lokasi koordinat 68 (x, y) yang memetakan ke struktur wajah di wajah. Prediktor landmark wajah dlib dilatih pada set data iBUG 300-W. Gambar yang berisi indeks dari 68 koordinat diberikan di bawah ini:
Memprogram Raspberry Pi untuk Deteksi Landmark Wajah
Kode python lengkap untuk Pengenalan Bagian Wajah dengan detektor landmark wajah terlatih dlib diberikan di akhir halaman. Di sini kami menjelaskan beberapa bagian penting dari kode untuk pemahaman yang lebih baik.
Jadi, seperti biasa, mulai kode dengan memasukkan semua pustaka yang diperlukan.
dari imutils import face_utils import numpy sebagai np import argparse import imutils import dlib import cv2 dari picamera.array import PiRGBArray dari picamera import PiCamera
Kemudian inisialisasi objek kamera dan setel resolusi pada (640, 480) dan kecepatan bingkai pada 30 fps
camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Sekarang di baris berikutnya, gunakan pengurai argumen untuk menyediakan jalur ke prediktor landmark wajah.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-predictor", diperlukan = True, help = "jalur prediktor landmark wajah") args = vars (ap.parse_args ())
Di baris berikutnya, inisialisasi detektor wajah terlatih dlib berbasis HOG dan muat prediktor landmark wajah terlatih.
detektor = dlib.get_frontal_face_detector () prediktor = dlib.shape_predictor (args)
Kemudian gunakan fungsi capture_continuous untuk mulai menangkap bingkai dari kamera Raspberry Pi.
untuk bingkai di camera.capture_continuous (rawCapture, format = "bgr", use_video_port = True): image = frame.array cv2.imshow ("Frame", image) key = cv2.waitKey (1) & 0xFF rawCapture.truncate (0)
Gunakan tombol keyboard 'S' untuk menangkap bingkai tertentu. Kemudian ubah ukuran gambar yang diambil dan ubah menjadi skala abu-abu.
if key == ord ("s"): image = imutils.resize (image, width = 400) grey = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Gunakan fungsi detektor pustaka dlib untuk mendeteksi wajah dalam gambar yang diambil.
rects = detektor (abu-abu, 1)
Ambil gambar tempat deteksi wajah dilakukan, tentukan landmark wajah, dan ubah 68 poin menjadi array NumPy. Ulangi setiap daerah wajah satu per satu.
untuk (i, rect) di enumerate (rects): shape = predictor (abu-abu, rect) shape = face_utils.shape_to_np (shape)
Kemudian, ambil salinan dari gambar asli dan gunakan untuk loop menggambar nama bagian wajah pada gambar. Warna teks akan menjadi merah, Anda dapat mengubahnya ke warna lain dengan mengubah nilai RGB.
untuk (nama, (i, j)) di face_utils.FACIAL_LANDMARKS_IDXS.items (): clone = image.copy () cv2.putText (clone, name, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
Sekarang kita akan mengulang bagian wajah yang terdeteksi dan menggunakan fungsi menggambar OpenCV untuk menggambar lingkaran di bagian wajah ini. Anda dapat mengikuti Dokumen OpenCV ini untuk informasi lebih lanjut tentang fungsi Menggambar
untuk (x, y) dalam bentuk: cv2.circle (clone, (x, y), 1, (0, 0, 255), -1)
Sekarang di baris berikutnya, kita akan mengekstrak setiap bagian wajah sebagai gambar terpisah dengan menghitung kotak pembatas dari koordinat bagian wajah tertentu. Gambar yang diekstrak akan diubah ukurannya menjadi 250 piksel.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = image roi = imutils.resize (roi, width = 250, inter = cv2.INTER_CUBIC)
Sekarang di baris terakhir kode, tampilkan bagian wajah dengan namanya dan gambar terpisah dari bagian itu. Gunakan tombol ESC untuk mengubah wilayah wajah.
cv2.imshow ("ROI", roi) cv2.imshow ("Image", clone) cv2.waitKey (0)
Menguji Pengenal Bagian Wajah
Untuk menguji proyek, buat direktori dan navigasikan ke sana menggunakan perintah di bawah ini:
mkdir detektor bagian wajah cd detektor bagian wajah
Sekarang unduh file shape_predictor_68_face_landmarks.dat dari tautan ini, lalu ekstrak dan salin file shape_predictor_68_face_landmarks.dat di dalam pustaka ini, lalu buka file baru bernama detect.py dan tempel kode yang diberikan di bawah ini.
Sekarang luncurkan kode python menggunakan perintah di bawah ini:
python3 detect.py --shape-predictor shape_predictor_68_face_landmarks.dat
Anda akan melihat jendela yang menunjukkan tampilan langsung dari kamera Anda. Kemudian tekan tombol 'S' untuk memilih bingkai dari streaming langsung. Anda akan melihat titik merah di area mulut Anda. Gunakan tombol ESC untuk melihat bagian wajah lainnya.
Kode python lengkap dan video demonstrasi diberikan di bawah ini.