- Komponen Diperlukan
- Memasang OpenCV di Raspberry Pi
- Cara Mengesan Bahagian Wajah menggunakan dlib
- Memprogramkan Raspberry Pi untuk Pengesanan Landmark Muka
- Menguji Pengecam Bahagian Wajah
Pengesanan mercu tanda wajah adalah proses mengesan pelbagai bahagian pada wajah seperti Kening, Mata, Hidung, Mulut, dan Rahang. Terdapat banyak aplikasi yang menggunakan teknik pengesanan Landasan Muka.
Sebelum ini kami membangun sistem pengenalan wajah menggunakan OpenCV, hari ini kami akan menggunakan OpenCV yang sama dengan Raspberry Pi untuk pengesanan tanda wajah. Modul pengesan mercu tanda muka yang telah dilatih dari perpustakaan dlib akan digunakan untuk mengesan lokasi struktur wajah utama pada wajah dan python OpenCV akan digunakan untuk menggambarkan bahagian muka yang dikesan.
Komponen Diperlukan
Komponen Perkakasan
- Raspberry Pi 3
- Modul Kamera Pi
Perisian dan Perkhidmatan Dalam Talian
- OpenCV
- Dlib
- Python3
Sebelum meneruskan Pengesanan Landasan Raspberry Pi 3 ini , pertama, kita perlu memasang OpenCV, imutils, dlib, Numpy, dan beberapa pergantungan lain dalam projek ini. OpenCV digunakan di sini untuk pemprosesan gambar digital. Aplikasi Pemprosesan Imej Digital yang paling biasa adalah pengesanan objek, Pengecaman Wajah, dan penghitungan orang.
Untuk mengetahui lebih lanjut mengenai cara menghubungkan kamera Pi dengan Raspberry Pi, ikuti tutorial kami sebelumnya.
Memasang OpenCV di Raspberry Pi
Di sini perpustakaan OpenCV akan digunakan untuk pengimbas Raspberry Pi QR. Untuk memasang OpenCV, pertama, kemas kini Pi Raspberry.
sudo apt-get kemas kini
Kemudian pasang kebergantungan yang diperlukan untuk memasang OpenCV pada 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
Selepas itu, pasang OpenCV di Raspberry Pi menggunakan arahan di bawah.
pip3 memasang opencv-contrib-python == 4.1.0.25
Kami sebelum ini menggunakan OpenCV dengan Raspberry pi dan membuat banyak tutorial mengenainya.
- Memasang OpenCV pada Raspberry Pi menggunakan CMake
- Pengecaman Muka Masa Nyata dengan Raspberry Pi dan OpenCV
- Pengiktirafan Plat Lesen menggunakan Raspberry Pi dan OpenCV
- Anggaran Ukuran Orang Ramai Menggunakan OpenCV dan Raspberry Pi
Kami juga telah membuat siri tutorial OpenCV bermula dari peringkat pemula.
Memasang imutil : imutil digunakan untuk melaksanakan beberapa fungsi pemprosesan gambar yang diperlukan seperti terjemahan, putaran, pengubahan ukuran, kerangka, dan menampilkan gambar Matplotlib dengan lebih mudah dengan OpenCV. Oleh itu, pasang imutil menggunakan arahan di bawah:
pip3 memasang imutil
Memasang dlib: dlib adalah toolkit moden yang mengandungi algoritma Pembelajaran Mesin dan alat untuk masalah dunia nyata. Gunakan arahan di bawah untuk memasang dlib.
pip3 pasang dlib
Memasang NumPy : NumPy adalah perpustakaan teras untuk pengkomputeran saintifik yang mengandungi objek array n-dimensi yang kuat, menyediakan alat untuk mengintegrasikan C, C ++, dll.
Pip3 pasang numpy
Cara Mengesan Bahagian Wajah menggunakan dlib
Kami akan menggunakan alat pengesan mercu tanda muka perpustakaan dlib yang telah dilatih untuk mengesan lokasi koordinat 68 (x, y) yang memetakan struktur wajah di wajah. peramal mercu tanda wajah dlib dilatih pada set data iBUG 300-W. Gambar yang mengandungi indeks dari 68 koordinat diberikan di bawah:
Memprogramkan Raspberry Pi untuk Pengesanan Landmark Muka
Kod python yang lengkap untuk Pengecaman Bahagian Wajah dengan pengesan mercu tanda muka yang dilatih dlib diberikan di hujung halaman. Di sini kami menerangkan beberapa bahagian penting kod untuk pemahaman yang lebih baik.
Jadi, seperti biasa, mulakan kod dengan memasukkan semua perpustakaan 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 mulakan objek kamera dan tetapkan resolusi pada (640, 480) dan kadar bingkai pada 30 fps
kamera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Sekarang pada baris seterusnya, gunakan penghurai argumen untuk memberikan jalan ke ramalan tanda muka.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-prediktor", diperlukan = Betul, tolong = "jalan peramal landmark wajah") args = vars (ap.parse_args ())
Pada baris seterusnya, mulailah pengesan wajah terlatih dlib berasaskan HOG dan muatkan ramalan tanda muka muka yang dilatih.
pengesan = dlib.get_frontal_face_detector () peramal = dlib.shape_predictor (args)
Kemudian gunakan fungsi capture_continuous untuk mula menangkap bingkai dari kamera Raspberry Pi.
untuk bingkai dalam kamera.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 kekunci papan kekunci 'S' untuk menangkap bingkai tertentu. Kemudian ubah saiz gambar yang ditangkap dan ubah menjadi skala kelabu.
jika kunci == ord ("s"): image = imutils.resize (gambar, lebar = 400) kelabu = cv2.cvtColor (gambar, cv2.COLOR_BGR2GRAY)
Gunakan fungsi pengesan perpustakaan dlib untuk mengesan wajah dalam gambar yang diambil.
rects = pengesan (kelabu, 1)
Ambil gambar di mana pengesanan wajah dilakukan, tentukan mercu tanda wajah, dan ubah 68 titik menjadi susunan NumPy. Lingkarkan setiap kawasan muka secara individu.
untuk (i, rect) dalam bilangan (rektum): bentuk = peramal (kelabu, tepat) bentuk = face_utils.shape_to_np (bentuk)
Kemudian, ambil salinan gambar asal dan gunakan untuk gelung untuk menarik nama bahagian muka pada gambar. Warna teks akan menjadi merah, anda boleh mengubahnya menjadi 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 melihat bahagian muka yang dikesan dan menggunakan fungsi lukisan OpenCV untuk melukis bulatan pada bahagian muka ini. Anda boleh mengikuti Dokumen OpenCV ini untuk maklumat lebih lanjut mengenai fungsi Lukisan
untuk (x, y) dalam bentuk: cv2.circle (clone, (x, y), 1, (0, 0, 255), -1)
Sekarang pada baris seterusnya, kita akan mengekstrak setiap bahagian muka sebagai gambar yang terpisah dengan mengira kotak pengikat koordinat bahagian muka tertentu. Gambar yang diekstrak akan diubah saiznya menjadi 250 piksel.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = gambar roi = imutils.resize (roi, lebar = 250, inter = cv2.INTER_CUBIC)
Sekarang di baris terakhir kod, paparkan bahagian muka dengan nama mereka dan gambar bahagian yang terpisah. Gunakan kekunci ESC untuk menukar kawasan wajah.
cv2.imshow ("ROI", roi) cv2.imshow ("Gambar", klon) cv2.waitKey (0)
Menguji Pengecam Bahagian Wajah
Untuk menguji projek, buat direktori dan arahkan ke sana menggunakan perintah di bawah ini:
mkdir face-part-detector cd face-part-detector
Sekarang muat turun fail shape_predictor_68_face_landmarks.dat dari pautan ini, dan kemudian ekstrak dan salin fail shape_predictor_68_face_landmarks.dat di dalam pustaka ini, dan kemudian buka fail baru bernama det.py dan tampal kod yang diberikan di bawah.
Sekarang lancarkan kod python menggunakan arahan di bawah:
python3 detect.py --shape-prediktor bentuk_predictor_68_face_landmarks.dat
Anda akan melihat tetingkap yang menunjukkan paparan langsung dari kamera anda. Kemudian tekan kekunci 'S' untuk memilih bingkai dari siaran langsung. Anda akan melihat titik merah di kawasan mulut anda. Gunakan kekunci ESC untuk melihat bahagian muka yang lain.
Kod python lengkap dan video demonstrasi diberikan di bawah.