- Gerekli Bileşenler
- OpenCV'yi Raspberry Pi'ye Yükleme
- Dlib kullanarak Yüz Bölümlerini Algılama
- Ahududu Pi'yi Yüzde Dönüm Noktası Tespiti için Programlama
- Yüz Parçası Tanıyıcıyı Test Etme
Yüzdeki işaretlerin tespiti, Kaşlar, Gözler, Burun, Ağız ve Çene gibi yüzdeki çeşitli kısımların tespit edilmesi işlemidir. Facial Landmark algılama tekniklerini kullanan birçok uygulama vardır.
Daha önce OpenCV kullanarak bir Yüz tanıma sistemi oluşturduk, bugün aynı OpenCV'yi yüz işareti tespiti için Raspberry Pi ile kullanacağız. Yüzdeki temel yüz yapılarının konumunu tespit etmek için dlib kitaplığından önceden eğitilmiş bir yüz dönüm noktası dedektörü modülü kullanılacak ve algılanan yüz parçalarını görselleştirmek için python OpenCV kullanılacaktır.
Gerekli Bileşenler
Donanım bileşenleri
- Ahududu Pi 3
- Pi Kamera Modülü
Yazılım ve Çevrimiçi Hizmetler
- OpenCV
- Dlib
- Python3
Bu geçmeden önce Ahududu Pi 3 Yüz Landmark Algılama , öncelikle, biz bu projede OpenCV, imutils, dlib, Numpy ve bazı diğer bağımlılıklar yüklemeniz gerekir. OpenCV, burada dijital görüntü işleme için kullanılır. Dijital Görüntü İşlemenin en yaygın uygulamaları nesne algılama, Yüz Tanıma ve insan sayacıdır.
Raspberry Pi ile Pi kameranın nasıl arayüzleneceği hakkında daha fazla bilgi edinmek için önceki eğitimlerimizi izleyin.
OpenCV'yi Raspberry Pi'ye Yükleme
Burada OpenCV kütüphanesi Raspberry Pi QR tarayıcı için kullanılacaktır. OpenCV'yi kurmak için önce Raspberry Pi'yi güncelleyin.
sudo apt-get güncellemesi
Ardından OpenCV'yi Raspberry Pi'nize yüklemek için gerekli bağımlılıkları kurun.
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-testi -y
Bundan sonra, aşağıdaki komutu kullanarak OpenCV'yi Raspberry Pi'ye kurun.
pip3 kurulum opencv-katkıda-python == 4.1.0.25
Daha önce OpenCV'yi Raspberry pi ile kullandık ve üzerinde birçok öğretici oluşturduk.
- OpenCV'yi CMake kullanarak Raspberry Pi'ye yükleme
- Raspberry Pi ve OpenCV ile Gerçek Zamanlı Yüz Tanıma
- Raspberry Pi ve OpenCV kullanarak Plaka Tanıma
- OpenCV ve Raspberry Pi Kullanarak Kalabalık Boyutu Tahmini
Başlangıç seviyesinden başlayarak bir dizi OpenCV öğreticisi de oluşturduk.
Yükleme imutils : imutils böyle çevirme, döndürme, yeniden boyutlandırma, skeletonize ve OpenCV ile daha kolay Matplotlib görüntüleri göstermek gibi birkaç gerekli görüntü işleme fonksiyonlarını yürütmek için kullanılır. Öyleyse aşağıdaki komutu kullanarak imutils yükleyin:
pip3 imutils yükle
Dlib kurulumu: dlib , gerçek dünya sorunları için Makine Öğrenimi algoritmalarını ve araçlarını içeren modern araç setidir. Dlib'i kurmak için aşağıdaki komutu kullanın.
pip3 kurulum dlib
Yükleme numpy : NumPy , güçlü bir n-boyutlu dizi nesnesi içeren bilimsel hesaplama için çekirdek kütüphane C, C ++, vs. entegre etmek için araçlar sağlar
Pip3 numpy yükleyin
Dlib kullanarak Yüz Bölümlerini Algılama
Yüzdeki yüz yapılarına eşlenen 68 (x, y) koordinatlarının konumunu tespit etmek için dlib kütüphanesinin önceden eğitilmiş yüz işareti algılayıcısını kullanacağız. dlib yüz işaret belirleyicisi, iBUG 300-W veri kümesine göre eğitilmiştir. 68 koordinatın dizinlerini içeren bir görüntü aşağıda verilmiştir:
Ahududu Pi'yi Yüzde Dönüm Noktası Tespiti için Programlama
Dlib’in önceden eğitilmiş yüz işareti algılayıcısı ile Yüz Parçaları Tanıma için eksiksiz python kodu sayfanın sonunda verilmiştir. Burada daha iyi anlaşılması için kodun bazı önemli kısımlarını açıklıyoruz.
Bu nedenle, her zamanki gibi, gerekli tüm kitaplıkları ekleyerek kodu başlatın.
imutils'den import face_utils np olarak içe aktar argparse import imutils import dlib import cv2 picamera.array import picamera import PiCamera
Ardından kamera nesnesini başlatın ve çözünürlüğü (640, 480) ve kare hızını 30 fps olarak ayarlayın
kamera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Şimdi sonraki satırlarda, yüzün dönüm noktası tahmincisine giden yolu sağlamak için bağımsız değişken ayrıştırıcısını kullanın.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-prediktör", required = True, help = "yüz simgesi tahmin yolu") args = vars (ap.parse_args ())
Sonraki satırlarda, HOG tabanlı dlib'in önceden eğitilmiş yüz dedektörünü başlatın ve önceden eğitilmiş yüz işareti tahmin cihazını yükleyin.
detektör = dlib.get_frontal_face_detector () tahminci = dlib.shape_predictor (değiştirgeler)
Ardından, Raspberry Pi kameradan kareleri yakalamaya başlamak için capture_continuous işlevini kullanın.
camera.capture_continuous (rawCapture, format = "bgr", use_video_port = True) içindeki çerçeve için: image = frame.array cv2.imshow ("Frame", image) key = cv2.waitKey (1) & 0xFF rawCapture.truncate (0)
Belirli bir kareyi yakalamak için klavye 'S' tuşunu kullanın. Ardından yakalanan görüntüyü yeniden boyutlandırın ve gri tonlamaya dönüştürün.
anahtar == ord ("s") ise: resim = imutils.resize (resim, genişlik = 400) gray = cv2.cvtColor (resim, cv2.COLOR_BGR2GRAY)
Yakalanan görüntüdeki yüzleri algılamak için dlib kitaplığının algılayıcı işlevini kullanın.
rects = dedektör (gri, 1)
Yüz algılamanın yapıldığı resmi çekin, yüzdeki yer işaretlerini belirleyin ve 68 noktayı NumPy dizisine dönüştürün. Yüz bölgelerinin her birinin üzerinde ayrı ayrı döngü yapın.
numaralandırmadaki (i, rect) için (rects): şekil = tahminci (gri, dikdörtgen) şekil = face_utils.shape_to_np (şekil)
Daha sonra, orijinal resmin bir kopyasını alıp kullanmak için resmin üzerine yüz kısmının ismini çizmeye döngü. Yazı rengi kırmızı olacak, RGB değerlerini değiştirerek onu başka bir renge değiştirebilirsiniz.
face_utils.FACIAL_LANDMARKS_IDXS.items () içindeki (name, (i, j)) için: clone = image.copy () cv2.putText (clone, name, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
Şimdi, tespit edilen yüz bölümlerinin üzerinden geçeceğiz ve bu yüz bölümlerinde daireler çizmek için OpenCV çizim işlevini kullanacağız. Çizim işlevleri hakkında daha fazla bilgi için bu OpenCV Belgesini takip edebilirsiniz.
(x, y) şeklinde: cv2.circle (klon, (x, y), 1, (0, 0, 255), -1)
Şimdi sonraki satırlarda, belirli bir yüz parçasının koordinatlarının sınırlayıcı kutusunu hesaplayarak her yüz parçasını ayrı bir görüntü olarak çıkaracağız. Çıkarılan görüntü 250 piksel olarak yeniden boyutlandırılacaktır.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = image roi = imutils.resize (roi, width = 250, inter = cv2.INTER_CUBIC)
Şimdi kodun son satırlarında, yüz bölümlerini isimleriyle ve o bölümün ayrı bir görüntüsüyle görüntüleyin. Yüz bölgesini değiştirmek için ESC tuşunu kullanın.
cv2.imshow ("ROI", roi) cv2.imshow ("Resim", klon) cv2.waitKey (0)
Yüz Parçası Tanıyıcıyı Test Etme
Projeyi test etmek için bir dizin oluşturun ve aşağıdaki komutları kullanarak ona gidin:
mkdir yüz parçası dedektörü cd yüz parçası dedektörü
Şimdi bu bağlantıdan shape_predictor_68_face_landmarks.dat dosyasını indirin ve ardından bu kitaplık içindeki shape_predictor_68_face_landmarks.dat dosyasını çıkartın ve kopyalayın ve ardından saptama.py adlı yeni bir dosya açın ve aşağıda verilen kodu yapıştırın.
Şimdi aşağıdaki komutu kullanarak python kodunu başlatın:
python3 detect.py --shape-prediktör shape_predictor_68_face_landmarks.dat
Kameranızdan canlı görüntüyü gösteren bir pencere göreceksiniz. Ardından canlı yayından bir kare seçmek için 'S' tuşuna basın. Ağız bölgenizde kırmızı noktalar göreceksiniz. Diğer yüz kısımlarını görmek için ESC tuşunu kullanın.
Tam python kodu ve tanıtım videosu aşağıda verilmiştir.