· Hakan Çelik · OpenCV / Nesne Tespiti · 3 dk okuma
Haar Cascade ile Yüz Tespiti

OpenCV Serisi 59/64
- 1. Boya Fırçası Olarak Fare
- 2. Canny Kenar Algılama
- 3. Görüntü Geçişleri
- 4. Görüntü Piramitleri
- 5. Görüntülerde Aritmetik İşlemler
- 6. Görüntülerle İlgili Temel İşlemler
- 7. Görüntünün Geometrik Dönüşümleri
- 8. Görüntüyü Yumuşatma - ( Smoothing Images )
- 9. Histogramlar
- 10. Konturler ( Contours )
- 11. Morfolojik Dönüşümler
- 12. Opencv Nedir Ve Kurulumu
- 13. Opencv Resim Işlemleri
- 14. Opencv Video Işlemleri
- 15. Opencv'de Çizim Fonksiyonları
- 16. Performans Ölçüm Ve Geliştirme Teknikleri
- 17. Renk Alanlarını Değiştirme
- 18. Renk Paleti Olarak Parça Çubuğu ( Trackbar )
- 19. Resim Eşikleme
- 20. Şablon Eşleştirme
- 21. Hough Doğru Dönüşümü
- 22. Hough Daire Dönüşümü
- 23. Fourier Dönüşümü
- 24. Histogram Eşitleme
- 25. 2B Histogramlar
- 26. Histogram Geri Projeksiyonu
- 27. Kontur Özellikleri
- 28. Kontur Nitelikleri
- 29. Konturlerle Daha Fazla İşlev
- 30. Kontur Hiyerarşisi
- 31. GrabCut ile Etkileşimli Ön Plan Çıkarma
- 32. Watershed Algoritması ile Görüntü Segmentasyonu
- 33. Özellikleri Anlamak
- 34. Harris Köşe Tespiti
- 35. Shi-Tomasi Köşe Dedektörü ve İzlenecek İyi Özellikler
- 36. SIFT'e Giriş (Ölçek Değişmez Özellik Dönüşümü)
- 37. SURF'e Giriş (Hızlandırılmış Sağlam Özellikler)
- 38. Köşe Tespiti için FAST Algoritması
- 39. BRIEF — İkili Sağlam Bağımsız Temel Özellikler
- 40. ORB (Yönlü FAST ve Döndürülmüş BRIEF)
- 41. Özellik Eşleştirme
- 42. Özellik Eşleştirme + Nesneleri Bulmak için Homografi
- 43. Meanshift ve Camshift ile Nesne Takibi
- 44. Optik Akış
- 45. Arka Plan Çıkarma
- 46. Kamera Kalibrasyonu
- 47. Poz Tahmini
- 48. Epipolar Geometri
- 49. Stereo Görüntülerden Derinlik Haritası
- 50. k-En Yakın Komşuyu Anlamak
- 51. kNN ile El Yazısı OCR
- 52. SVM'yi Anlamak
- 53. SVM ile El Yazısı OCR
- 54. K-Ortalamalar Kümeleme'yi Anlamak
- 55. OpenCV'de K-Ortalamalar Kümeleme
- 56. Görüntü Gürültü Giderme
- 57. Görüntü Onarımı (Inpainting)
- 58. Yüksek Dinamik Aralık (HDR) Görüntüleme
- 59. Haar Cascade ile Yüz Tespiti
- 60. pip ile OpenCV Kurulumu
- 61. Ubuntu'da OpenCV-Python Kurulumu
- 62. Fedora'da OpenCV-Python Kurulumu
- 63. Windows'ta OpenCV-Python Kurulumu
- 64. OpenCV-Python Bağlayıcıları Nasıl Çalışır?
Haar Cascade ile Yüz Tespiti
Hedefler
- Haar cascade sınıflandırıcılarını kullanarak yüz tespiti yapmayı öğreneceğiz
- OpenCV’deki cv.CascadeClassifier kullanımını göreceğiz
Teori
Nesne Tespiti, Paul Viola ve Michael Jones’un 2001 tarihli “Rapid Object Detection using a Boosted Cascade of Simple Features” makalesiyle önerilen makine öğrenmesi tabanlı bir yaklaşım kullanır. Bu, iyi eğitilmiş bir nesne tespiti için çok sayıda pozitif görüntü (yüz görüntüleri) ve negatif görüntü (yüz içermeyen görüntüler) gerektiren bir cascade fonksiyondur.
Haar Özellikleri
Algoritmanın ilk aşaması Haar özelliklerinin toplanmasıdır. Her özellik komşu dikdörtgen bölgelerden piksel yoğunluklarının toplamını çıkaran tek bir değerdir. Siyah ve beyaz dikdörtgenlerden oluşan çeşitli kernel boyutları ile bu özellikler hesaplanır.
Integral Görüntü
Bu özelliklerin hesaplanmasını hızlandırmak için integral görüntü tekniği kullanılır. Integral görüntü, her piksel için o piksele kadar sol üst köşedeki tüm piksellerin toplamını içerir. Bu sayede herhangi bir dikdörtgenin piksel toplamı sabit sürede (4 referans noktası ile) hesaplanabilir.
AdaBoost
Hesaplanan Haar özelliklerinden en iyi olanları seçmek için AdaBoost algoritması kullanılır. 24x24 piksellik bir pencerede 160.000’den fazla özellik hesaplanabilir. Ancak bunların büyük çoğunluğu gereksizdir. AdaBoost, bu özelliklerden yalnızca en etkili ~6000 tanesini seçer.
Cascade Sınıflandırıcı
Tüm 6000 özelliği her pencereye uygulamak yavaştır. Cascade sınıflandırıcı yaklaşımı, özellikleri aşamalara ayırır. Bir aşama başarısız olursa, o pencere hemen reddedilir ve işlem durur. Böylece potansiyel olmayan bölgeler için gereksiz hesaplama yapılmaz.
OpenCV’de Yüz Tespiti
OpenCV, yüz tespiti için eğitilmiş birçok cascade XML dosyasıyla birlikte gelir. Bunlar opencv/data/haarcascades/ klasöründe yer alır.
import numpy as np
import cv2 as cv
face_cascade = cv.CascadeClassifier(cv.data.haarcascades + 'haarcascade_frontalface_default.xml')
eye_cascade = cv.CascadeClassifier(cv.data.haarcascades + 'haarcascade_eye.xml')
img = cv.imread('sachin.jpg')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
cv.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
eyes = eye_cascade.detectMultiScale(roi_gray)
for (ex, ey, ew, eh) in eyes:
cv.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2)
cv.imshow('img', img)
cv.waitKey(0)
cv.destroyAllWindows()Sonuç aşağıdaki gibi görünecektir — yüzler mavi, gözler yeşil dikdörtgenlerle işaretlenir.
Gerçek Zamanlı Yüz Tespiti (Kamera)
Kameradan gerçek zamanlı yüz tespiti yapmak için:
import numpy as np
import cv2 as cv
face_cascade = cv.CascadeClassifier(cv.data.haarcascades + 'haarcascade_frontalface_default.xml')
eye_cascade = cv.CascadeClassifier(cv.data.haarcascades + 'haarcascade_eye.xml')
cap = cv.VideoCapture(0)
while True:
ret, img = cap.read()
if not ret:
break
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
cv.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
eyes = eye_cascade.detectMultiScale(roi_gray)
for (ex, ey, ew, eh) in eyes:
cv.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2)
cv.imshow('img', img)
if cv.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv.destroyAllWindows()
Hakan Çelik


