Snapchat'in çeşitli filtreleri yüzünüze nasıl doğru bir şekilde uyguladığını hiç merak ettiniz mi? Akıllı telefonunuz, yüz özelliklerinizi kullanarak kilidi açtığında sihir mi yapıyor? Hayır, sadece Yüz Algılama'yı iş başında izliyorsunuz.
Yüz Algılama, dijital görüntü veya videodaki insan yüzlerini tanımlayabilen bir Yapay Zeka teknolojisidir. Efsanevi Haar Cascade algoritması ile 25 kod satırının altında gerçek zamanlı bir yüz algılama programını nasıl oluşturabileceğinizi keşfedin.
Haar Çağlayanı Nedir?
Haar Cascade, resimlerdeki veya videolardaki yüzleri algılamak için Paul Viola ve Michael Jones tarafından tanıtılan bir nesne algılama algoritmasıdır. Bir basamaklı işlev, daha sonra diğer ortamlardaki herhangi bir nesneyi veya yüzü tanımlamak için kullanılabilecek birçok pozitif ve negatif görüntü kullanılarak eğitilir. Bu eğitimli dosyalar şu adreste mevcuttur: OpenCV GitHub deposu.
Kayan pencere yaklaşımı kullanılarak, sabit boyutlu bir pencere bir görüntü üzerinde soldan sağa, yukarıdan aşağıya yinelenir. Her aşamada, pencere durur ve alanın bir yüz içerip içermediğini sınıflandırır.
Bir bilgisayar görme 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.
Gözlemde göz bölgesi yanak bölgesinden daha koyu, burun bölgesi ise göz bölgesinden daha parlak görünmektedir. Bu özellikleri aşağıdaki şekilde görselleştirebilirsiniz.
Bu özellikleri ve piksel hesaplaması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ı artırır.
Ancak, belirli bir test durumu başarısız olursa ve hesaplama açısından pahalıysa kayan pencere tekniği durur. Bunu çözmek için Sınıflandırıcılar Çağlayanı 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 atar, 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 Cascade Ö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öster.
OpenCV Nedir?
OpenCV, açık kaynaklı bir bilgisayarla görme 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şedir. Google, IBM ve Yahoo gibi yüzlerce önde gelen şirket, uygulamalarında OpenCV kullanıyor. Verilerini gizli tutmayı hedefleyen bazı kişiler, yüz tanımadan kaçınmanın yolları var.
OpenCV'yi Python'a yüklemek için şu komutu kullanın:
bip düzenlemek opencv-python
Python Kullanarak Yüz Algılama Programı Nasıl Oluşturulur
Yüz dedektörünü oluşturmak için şu adımları izleyin:
Bu örnek kod, Haar Cascade algoritma dosyasıyla birlikte bir GitHub deposu ve MIT Lisansı kapsamında kullanımınız ücretsizdir.
- İndir Haar Cascade Frontal Yüz Varsayılan XML dosyasını açın ve Python programınızla aynı konuma yerleştirin.
- OpenCV kitaplığını içe aktarın.
# gerekli kitaplıkları içe aktarma
içe aktarmak CV2 - Kolay referans için Haar Cascade Frontal Face algoritma dosyasını saklayın.
# haar case algoritma dosyasını alg değişkenine yükleme
alg = "haarcascade_frontalface_default.xml" - OpenCV'ye bir XML dosyası yüklemek için CascadeClassifier sınıfını kullanın.
# algoritmayı OpenCV'ye geçirme
haar_cascade = cv2.CascadeClassifier (alg) - Videoyu kameradan çekin. 0'a geçmek Video yakalama() birincil kameranızı kullanma işlevi. Harici bir kamera taktıysanız, bunun yerine kullanmak için art arda gelen 1, 2 vb. sayıları kullanabilirsiniz.
# kameradan video akışının yakalanması
kamera = cv2.VideoCapture (0) - Kamera girişini kare kare okumak için sonsuz bir döngü kurun. bu Okumak() işlev 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, çalışacağınız gerçek çerçeveyi içerir. Bu çerçeveyi şuraya kaydedin: img değişken.
sırasındaDoğru:
_, img = cam.read() - Varsayılan metni şu şekilde görünecek şekilde ayarlayın: Yüz algılanmadı. Algılandığında, bu değişkenin değerini güncelleyin.
metin = "Yüz algılanmadı"
- Gerçek dünyadan alınan girdi, BGR formatında renklidir. BGR mavi, yeşil ve kırmızı anlamına gelir. Bu, bilgisayarla görme uygulamaları için çok fazla işlem oluşturur. Bunu azaltmak için gri tonlamalı bir biçim kullanın.
Çerçeve ve dönüştürme kodu biçimini geçirin, RENK_BGR2GRİ, ile cvtColor() videonun her karesini renkliden gri tonlamaya değiştirmek için.# her kareyi BGR'den Gri Tonlamaya dönüştür
grayImg = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY) - Kullanmak DetectMultiScale() yüzleri algılamak için. Bu yöntem girdi olarak üç parametre alır. Birincisi kaynak görüntü, gri resim. İkinci parametre, scaleFactor'dur. Bu, her görüntü ölçeğinde görüntü boyutunu ne kadar küçültmeniz gerektiğini belirtir. Ölçekleme faktörü olarak varsayılan değer olan 1.3'ü kullanın. Ölçek faktörü ne kadar yüksek olursa, o kadar az adım ve yürütme o kadar hızlı olur. Bununla birlikte, eksik yüz olasılığı da daha yüksektir. Üçüncü parametre minkomşulardır. Bu, her aday dikdörtgenin onu tutması için kaç komşu olması gerektiğini belirtir. Değer ne kadar yüksek olursa yanlış pozitif olasılığı o kadar az olur, ancak bu aynı zamanda net olmayan yüz izlerinin kaçırılması anlamına da gelir.
# Haar Cascade kullanarak yüzleri algıla
yüz = haar_cascade.detectMultiScale (grayImg, 1.3, 4) - Bir yüz algıladığınızda, dört koordinat alırsınız. x x koordinatını, y y koordinatını, w genişliği temsil eder ve h yüksekliği temsil eder. Metni şu şekilde güncelleyin: Yüz Algılandı ve bu koordinatları kullanarak bir dikdörtgen çizin. Dikdörtgenin rengi, iki piksel kalınlığında yeşil (BGR) biçimindedir.
# yüzün çevresine bir dikdörtgen çizin ve metni Yüz Algılandı olarak güncelleyin
yüzünde (x, y, w, h) için:
metin = "Yüz Algılandı"
CV2.dikdörtgen(img, (X, y), (X + w, y + H), (0, 255, 0), 2) - İsteğe bağlı olarak çıktı konsolundaki metni yazdırın. Metni, yakalanan çerçeveyi kaynak olarak, yukarıdaki metinden elde edilen metni, yazı tipini kullanarak ekranda görüntüleyin. FONT_HERSHEY_SIMPLEX stili, 1 yazı tipi ölçeği faktörü, mavi renk, iki piksel kalınlığı ve AA çizgi türü.
# resimdeki metni göster
Yazdır(metin)
görüntü = cv2.putText (img, metin, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA) - Başlıklı pencereyi göster Yüz tanıma ve görüntü. Kullan bekleme tuşu() pencereyi 10 milisaniye görüntüleme ve bir tuşa basıp basmadığını kontrol etme yöntemi. Bir kullanıcı düğmesine basarsa Esc tuşu (ASCII Değeri 27), döngüden çıkın.
# çıkış penceresini görüntüleyin ve çıkmak için escape tuşuna basın
cv2.imshow("Yüz tanıma", resim)
anahtar = cv2.waitKey (10)anahtar == 27 ise:
kırmak - Son olarak kamera nesnesini python programından serbest bırakın ve tüm pencereleri kapatın.
kam.serbest bırakmak()
CV2.destroyAllWindows()
Eylemde Python Kullanarak Yüz Algılama
Bir yüz görüntülendiğinde, şöyle bir çıktı görmelisiniz:
Yüz olmadığında, şöyle bir mesaj görürsünüz:
Haar Cascade Algoritmasını Kullanarak Yüz Algılamanın Sınırlamaları
Bu algoritma hafif olmasına, küçük bir model boyutuna sahip olmasına ve hızlı çalışmasına rağmen, birkaç sınırlama vardır:
- Gerçek zamanlı bir videoda, yüzün kamera görüş hattında olması gerekir. Yüz çok uzaksa, çok yakınsa veya çok eğimliyse, algoritma özellikleri yakalayamaz.
- Bu bir ön yüz algoritmasıdır, bu nedenle yandan görünümleri tespit edemezsiniz.
- Yüksek yanlış pozitif sonuçlar. Mevcut 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 çok çeşitli uygulamalara 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 izlemede zaten yaygındır.
Bu harika teknolojinin sadece başlangıcı. İlerlemelerle kayıp çocukları belirleyebilir, suçluları yakalayabilir ve kimlik hırsızlığı gibi suçları önleyebiliriz.