Yüz algılama, düşündüğünüzden çok daha kolay ve bu kullanışlı Python kitaplığı bunu kanıtlıyor.

Python Kullanarak Yüzler Nasıl Tespit Edilir?

Snapchat’in yüzünüze çeşitli filtreleri nasıl doğru bir şekilde uyguladığını hiç merak ettiniz mi? Akıllı telefonunuz, yüz özelliklerinizi kullanarak kilidi açıldığında sihir mi yapıyor? Hayır, sadece Yüz Algılama’yı çalışırken izliyorsunuz.

Yüz Algılama, dijital bir görüntü veya videodaki insan yüzlerini tanımlayabilen bir Yapay Zeka teknolojisidir. Efsanevi Haar Cascade algoritması ile 25 satırdan az kodla gerçek zamanlı bir yüz algılama programını nasıl oluşturabileceğinizi keşfedin.

Haar Çağlayanı Nedir?

Haar Cascade, Paul Viola ve Michael Jones tarafından resim veya videolardaki yüzleri algılamak için tanıtılan bir nesne algılama algoritmasıdır. Kademeli bir işlev, daha sonra başka ortamlarda herhangi bir nesneyi veya yüzü tanımlamak için kullanılabilecek birçok olumlu ve olumsuz görüntü kullanılarak eğitilir. Bu eğitilmiş dosyalar OpenCV GitHub deposunda mevcuttur .

Kayan pencere yaklaşımı kullanılarak, sabit boyutlu bir pencere, soldan sağa, yukarıdan aşağıya bir görüntü üzerinde yinelenir. Her aşamada pencere durur ve alanın yüz içerip içermediğini sınıflandırır.

Bir bilgisayarlı görü aracı olan OpenCV, özellikleri sınıflandırmak için önceden eğitilmiş bir Haar Cascade modeliyle çalışır. Her aşama beş özelliği kontrol eder: iki kenar özelliği, iki çizgi özelliği ve bir dört dikdörtgen özelliği.

Bir görüntü yamasından çıkarılan 5 farklı Haar benzeri özellik türü.

Gözlemde göz çevresi yanak bölgesinden daha koyu görünürken burun bölgesi göz bölgesinden daha parlak görünür. Bu özellikleri aşağıdaki şekilde görselleştirebilirsiniz.

Teorik bir yüz modeli

Bu özellikleri ve piksellerin hesaplanmasını kullanan algoritma, 100.000’den fazla veri noktasını tanımlar. Daha sonra doğruluğu artırmak ve alakasız özellikleri atmak için bir Adaboost algoritması kullanabilirsiniz. Birçok yinelemede, bu yaklaşım hata oranını en aza indirir ve kabul edilebilir bir doğruluk elde edene kadar özellik ağırlığını arttırır.

Ancak, belirli bir test durumu başarısız olursa kayan pencere tekniği durur ve hesaplama açısından pahalıdır. Bunu çözmek için, Cascade of Classifiers kavramını uygulayabilirsiniz. Bu yaklaşım, tüm özellikleri tek bir pencerede uygulamak yerine, bunları aşamalı olarak gruplandırır ve uygular.

Pencere ilk aşamada başarısız olursa, işlem onu ​​siler, aksi takdirde devam eder. Bu, gerçekleştirilecek işlem sayısında ciddi bir azalmaya yol açar ve gerçek zamanlı uygulamalar için kullanılabilir hale getirir.

Yüz Algılama İş Akışı

Yüz algılama programınızı oluşturmak için bu algoritmayı izleyin:

  • Haar Basamaklı Ön Yüz Algoritmasını yükleyin.
  • Kamerayı başlatın.
  • Kameradan kareleri okuyun.
  • Renkli görüntüleri gri tonlamaya dönüştürün.
  • Yüz koordinatlarını alın.
  • Bir dikdörtgen çizin ve uygun mesajı koyun.
  • Çıktıyı görüntüleyin.

OpenCV Nedir?

OpenCV, açık kaynaklı bir bilgisayar vizyonu ve makine öğrenimi kitaplığıdır. Çeşitli uygulamalar için 2.500’den fazla optimize edilmiş algoritmaya sahiptir. Bunlar, yüz/nesne algılama, tanıma, sınıflandırma ve daha fazlasını içerir.

Yüz verilerinizin gizliliği ayrı bir endişe kaynağıdır. Google, IBM, Yahoo gibi önde gelen yüzlerce şirket, uygulamalarında OpenCV kullanıyor. Verilerini gizli tutmayı amaçlayan bazı kişiler, yüz tanımadan kaçınmanın yolları olduğunu göstermiştir

OpenCV’yi Python’a kurmak için şu komutu kullanın:

pip install opencv-python

Yüz dedektörünü oluşturmak için şu adımları izleyin:

Bu örnek kod, Haar Cascade algoritma dosyasıyla birlikte bir GitHub deposunda mevcuttur ve MIT Lisansı altında kullanmanız için ücretsizdir.

Haar Cascade Frontal Face Default XML dosyasını indirin ve Python programınızla aynı konuma yerleştirin.

OpenCV kitaplığını içe aktarın.

# importing the required libraries

import cv2

Kolay referans için Haar Cascade Frontal Face algoritma dosyasını saklayın.

# loading the haar case algorithm file into alg variable

alg = “haarcascade_frontalface_default.xml”

OpenCV’ye bir XML dosyası yüklemek için CascadeClassifier sınıfını kullanın.

# passing the algorithm to OpenCV

haar_cascade = cv2.CascadeClassifier(alg)

Videoyu kameradan çekin. Birincil kameranızı kullanmak için VideoCapture() işlevine 0 iletin. Harici bir kamera bağladıysanız, bunun yerine ardışık 1, 2 vb. sayıları kullanabilirsiniz.

Python Kullanarak Yüzler Nasıl Tespit Edilir?

# capturing the video feed from the camera

cam = cv2.VideoCapture(0)

Kamera girişini kare kare okumak için sonsuz bir döngü kurun. read() işlevi iki parametre döndürür . İlk değer, işlemin başarılı olup olmadığını gösteren boolean türündedir. İkinci parametre, birlikte çalışacağınız gerçek çerçeveyi içerir. Bu çerçeveyi img değişkeninde saklayın.

while True:

    _, img = cam.read()

Varsayılan metni Yüz algılanmadı olarak görünecek şekilde ayarlayın . Algılandığında, bu değişkenin değerini güncelleyin.

    text = “Face not detected”

Gerçek dünyadan alınan girdiler BGR formatında renklidir. BGR mavi, yeşil ve kırmızı anlamına gelir. Bu, bilgisayarla görü uygulamaları için çok fazla işlem yaratır. Bunu azaltmak için gri tonlamalı bir biçim kullanın.

    # convert each frame from BGR to Grayscale

    grayImg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Videonun her karesini renkliden gri tonlamaya değiştirmek için COLOR_BGR2GRAY çerçeve ve dönüştürme kodu biçimini cvtColor () öğesine iletin.

Yüzleri algılamak içinDetectMultiScale() kullanın . Bu yöntem girdi olarak üç parametre alır. Birincisi kaynak görüntü, grayImg . İkinci parametre, scaleFactor’dır. Bu, her bir görüntü ölçeğinde görüntü boyutunu ne kadar küçültmeniz gerektiğini belirtir. Ölçekleme faktörü olarak varsayılan 1.3 değerini kullanın. Ölçek faktörü ne kadar yüksek olursa, adım o kadar az olur ve yürütme o kadar hızlı olur. Bununla birlikte, yüzlerin kaybolma olasılığı da daha yüksektir. Üçüncü parametre minNeighbors’dur. Bu, her aday dikdörtgenin onu korumak için kaç komşusu olması gerektiğini belirtir. Değer ne kadar yüksek olursa, yanlış pozitif olma olasılığı o kadar düşük olur, ancak bu aynı zamanda net olmayan yüz izlerinin kaybolması anlamına da gelir.

    # detect faces using Haar Cascade

    face = haar_cascade.detectMultiScale(grayImg, 1.3, 4)

Bir yüz tespit ettiğinizde dört koordinat elde edersiniz. x x koordinatını, y y koordinatını, w genişliği ve h yüksekliği temsil eder. Metni Yüz Algılandı olarak güncelleyin ve bu koordinatları kullanarak bir dikdörtgen çizin. Dikdörtgenin rengi, iki piksel kalınlığında yeşil (BGR) biçimindedir.

    # draw a rectangle around the face and update the text to Face Detected

    for (x, y, w, h) in face:

        text = “Face Detected”

        cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)

İsteğe bağlı olarak metni çıktı konsolunda yazdırın. Kaynak olarak yakalanan çerçeveyi, yukarıdaki metinde elde edilen metni, FONT_HERSHEY_SIMPLEX yazı tipi stilini, yazı tipi ölçeği faktörü 1, mavi rengi, iki piksel kalınlığını ve AA çizgi türünü kullanarak metni ekranda görüntüleyin.

    # display the text on the image

    print(text)

    image = cv2.putText(img, text, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA)

Yüz Algılama başlığını ve resmi içeren pencereyi görüntüleyin. Pencereyi 10 milisaniye boyunca görüntülemek için waitkey() yöntemini kullanın ve bir tuşa basıldığını kontrol edin. Bir kullanıcı Esc tuşuna basarsa (ASCII Değeri 27), döngüden çıkın.

    # display the output window and press escape key to exit

    cv2.imshow(“Face Detection”, image)

    key = cv2.waitKey(10)

    if key == 27:

        break

Son olarak, kamera nesnesini python programından serbest bırakın ve tüm pencereleri kapatın.

cam.release()

cv2.destroyAllWindows()

Haar Kademeli Algoritmasını Kullanarak Yüz Algılamanın Sınırlamaları

Python Kullanarak Yüzler Nasıl Tespit Edilir?

Bu algoritma hafif olmasına, küçük bir model boyutuna sahip olmasına ve hızlı çalışmasına rağmen, birkaç sınırlaması vardır:

  • Gerçek zamanlı bir videoda, yüzün kameranın görüş alanında olması gerekir. Yüz çok uzakta veya çok yakınsa veya çok eğikse, algoritma özellikleri alamaz.
  • Bu bir ön yüz algoritmasıdır, bu nedenle yan görünümleri algılayamazsınız.
  • Yüksek yanlış pozitif sonuçlar. Bir yüz olmasa bile, genellikle alanları yüz olarak algılar.
  • Optimum aydınlatma koşullarına sahip olması gerekir. Aşırı veya loş aydınlatma, algoritmanın doğruluğunu engeller.

Yüz Algılamanın Birçok Uygulaması

Yüz algılama, günümüz dünyasında geniş bir uygulama alanına sahiptir. Akıllı telefonlarda, evlerde, araçlarda ve göçmenlik kontrol noktalarında yüz tanıma için kullanabilirsiniz. Yüz algılama CCTV gözetiminde, sosyal medya filtrelerinde ve sinematografide otomatik yüz takibinde zaten yaygın.

Bu harika teknolojinin sadece başlangıcı. İlerlemelerle kayıp çocukları tespit edebilir, suçluları yakalayabilir ve kimlik hırsızlığı gibi suçları önleyebiliriz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir