Python ile Yüz Tespiti Nasıl Yapılır? Haar Cascade Algoritmaları (Video)

ibrahimcanerdogan
3 min readSep 17, 2022

--

Bilgisayarlı Görü Nedir?

Bilgisayarlı görü, dijital görüntüler veya videolardan derinlemesine anlam çıkarmaya çalışan bir çalışma alanıdır. Yapay zekâ ve makine öğrenmesi teknikleriyle birleştiğinde günümüzde birçok endüstri bilgisayarlı görü araştırma ve çalışmalarına yatırım yapıyor.

Günlük Hayatta Karşımıza Nasıl Çıkıyor?

Mesela nesne algılama özelliklerine sahip güvenlik kameralarını bilgisayarlı görünün birçok alanını uygulaması için çalışmalar yürütülüyor. Bir yerde yakalanan hareketlere bağlı olarak kavga olup olmadığını algılayan kameralar bu teknolojileri kullanıyor. Bu kavgayı en yakın polis memuruna sinyal olarak gönderip olayların büyümeden müdahalesini kolaylaştırabiliyor. Veya pandemiyle beraber hayatımızda daha da sık gördüğümüz temassız büyük ateş ölçerler önünde bir yüz tespit ettiğinde aktifleşerek ateş ölçme işlemini yapıyor.

Haar Cascade Nedir?

Python ile OpenCV kütüphanesiyle bir yüz tespit uygulaması yapacağız. Bu işlemi yapmak için “Haar Cascade” algoritmasını kullanacağız. Hem de bu algoritma arkasındaki yapıyı inceleyeceğiz.

Haar Cascade, Paul Viola ve Michael Jones tarafından 2001 yılında yayınlanan makine öğrenmesi nesne algılama algoritmasıdır. Birçok pozitif yani algılanacak nesnenin bulunduğu yerler ve negatif yani nesnenin bulunmadığı görüntüden eğitildiği makine öğrenimi tabanlı bir yaklaşımdır. OpenCV kütüphanesi bize, eğitildikleri görüntülere bağlı olarak kategoriler (yüzler, gözler vb.) halinde düzenlenmiş önceden eğitilmiş Haar Cascade algoritmalar sunar.

Algoritma Nasıl Çalışıyor?

Haar cascade, yukarıdaki filtreleri kullanarak görüntülerden öznitelik çıkarmaktadır. Bu filtrelere “Haar özellikleri” denir.

Filtre özniteliğin çıkarılacağı görsel üzerinde adım adım ilerleyerek beyaz ve siyah kısımların piksel yoğunlukları toplanır. Sonrasında bu iki yoğunluğun toplanıp çıkarılmasıyla oluşan değer özniteliğin değeridir. Sonuç ne kadar yüksekse (yani siyah ve beyaz toplamlar arasındaki fark), o pencerenin ilgili bir özellik olma olasılığı o kadar yüksek olur.

Cascade sınıflandırma, tüm özellikleri bir pencereye uygulamak yerine, özellikleri sınıflandırıcıların farklı aşamalarına göre gruplandırıyor ve tek tek uyguluyor. Bir pencere başarısız olursa (beyaz ve siyah toplamlar arasındaki fark düşüktür) ilk aşama (normalde birkaç özellik içerir), algoritma onu atar: üzerinde kalan özellikleri dikkate almaz. Geçerse algoritma, özelliklerin ikinci aşamasını uygular ve işleme devam eder.

Python ile Nasıl Uygulanıyor?

cv2.CascadeClassifier’a yapılan bir çağrı yüz dedektörümüzü diskten yükler. Ardından girdi resmimizi yükler, yeniden boyutlandırır ve gri tonlamaya dönüştürürüz (gri tonlamalı resimlere Haar basamaklarını uygularız).

import cv2
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
img = cv2.imread("image.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
# cv2.rectangle(image, start_point, end_point, color, thickness)
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

scaleFactor: Her görüntü ölçeğinde görüntü boyutunun ne kadar küçültüldüğü. Bu değer, ölçek piramidini oluşturmak için kullanılır. Görüntüdeki yüzleri birden çok ölçekte algılamak için (bazı yüzler ön plana daha yakın olabilir ve bu nedenle daha büyük olabilir, diğer yüzler daha küçük ve arka planda olabilir, bu nedenle değişen ölçekler kullanılabilir). 1,05 değeri, piramidin her düzeyinde görüntünün boyutunu %5 oranında küçülttüğümüzü gösterir.

minNeighbors: Penceredeki alanın bir yüz olarak kabul edilebilmesi için her pencerenin kaç komşusu olması gerekir. Kademeli sınıflandırıcı, bir yüzün etrafındaki birden çok pencereyi algılayacaktır. Bu parametre, pencerenin bir yüz olarak etiketlenmesi için kaç tane dikdörtgenin (komşu) algılanması gerektiğini kontrol eder.

minSize: Pencerenin minimum boyutunu belirten genişlik ve yükseklik (piksel cinsinden) grubu. Bu boyuttan daha küçük sınırlayıcı kutular yok sayılır. (30, 30) ile başlamak ve oradan ince ayar yapmak iyi bir fikirdir.

Haar cascadeler, DetectMultiScale parametrelerindeki seçiminize çok duyarlı olma eğilimindedir. ScaleFactor ve minNeighbors, en sık ayarlamanız gerekenlerdir. Sonunda yanlış pozitif algılamalar elde ettiğinizde (veya hiç yüz algılanmadığında), DetectMultiScale işlevinize geri dönmeli ve parametreleri deneme yanılma yoluyla ayarlamaya çalışmalısınız.

Uygulama

--

--

ibrahimcanerdogan
ibrahimcanerdogan

Written by ibrahimcanerdogan

Hi, My name is Ibrahim, I am developing ebebek android app within Ebebek. I publish various articles in the field of programming and self-improvement.

No responses yet