Kas 272018
 
3.498 kez okundu

OpenCV ile Yüz Saptama

opencv ile yüz saptamaBir önceki -ilk- yazımı tasarlarken bir “yüz saptama” (face detection) örneği vermeyi planlamıştım. Ama sonra fikrimi değiştirip, daha basit bir örnekle yetindim.

Oysa şimdi görüyorum ki, bu yazıları okuyan/okuyacak bir çok arkadaş için o yazı biraz basit kalmış olabilir.

O yüzden “yüz saptama” kodlarını da hemen paylaşayım istedim.

Bu amaçla cv2.CascadeClassifier() metodunun kullanacağı haarcascade_frontalface_default.xml dosyasına ihtiyacımız olacak. Bu dosyayı https://github.com/opencv/opencv/tree/master/data/haarcascades adresinden indirebilirsiniz. Aynı adreste sadece “yüz saptama” değil, pek çok beden parçasını tanımaya yönelik dosya mevcut. Gerek duyduğunuzda onları da bu adresten indirebilirsiniz.

Şimdilik sadece haarcascade_frontalface_default.xml dosyasını indirip, çalışma klasörümüzün içinde oluşturacağımız Cascades isimli klasöre kopyalayalım.

Yeni kodlarımız aşağıda. (Orijinal kodları https://www.hackster.io/mjrobot/real-time-face-recognition-an-end-to-end-project-a10826 adresinde bulabilirsiniz.)

Kodlarımızın büyük bölümünü bir önceki yazımda paylaşmıştım.

Öncelikle yeni indirdiğimiz dosyayı kullanıyor ve oluşan nesneyi faceCascade değişkenine atıyoruz.

Görüntümüz yine öntanımlı webcam üzerinden geliyor ve bu görüntüyü 640×480 olarak yeniden boyutlandırıyoruz.

Sonsuz döngümüzün içinde her görüntü karesini img değişkenine aktarıyor, sonra bu görüntünün gri bir kopyasını oluşturarak gray değişkeninde saklıyoruz.

Grileştirme, “kenar saptama” (edge detection) gibi işlemleri kolaylaştıran bir yaklaşımdır. İşlenecek veri miktarını azaltarak değişim hızının artmasını sağlar.

Görüntümüzün içinde birden fazla “yüz” olabilir. faceCascade.detectMultiScale() metoduyla yakaladığımız tüm yüzleri faces değişkeninde saklıyor ve bu yüzlere ait kareleri bir döngü içinde görüntümüzün üzerine işliyoruz.

Dikkat ederseniz, yüz bilgileri (x,y,w,h) şeklinde dönüyor. Yani sol üst köşenin koordinatları (x,y), genişlik w ve yükseklik h.

İstersek aynı işlemleri gray görüntümüze de uygulayabiliriz. (İlgili satırlardaki # işaretlerini kaldırmanız yeterlidir. Böylece hem renkli, hem de gri görüntülerimiz olur.)

Sonsuz döngümüz yine ‘Esc’ veya ‘q’ butonlarına basıldığında kırılıyor.

Döngü kırıldığında “cap” nesnesini serbest bırakıyor ve belleği temizliyoruz.

Peki sadece webcam ile çalışmamız zorunlu mu?

Elbette hayır!

Görüntüleri bir video dosyasından da alabiliriz. Sadece aşağıdaki gibi bir değişiklik yapmak yeterlidir:

Kullanacağınız video dosyasını ya çalışma klasörüne koyun, ya da tam adresini vermeyi unutmayın.

Bu yazıyı araya sıkıştırdım. O yüzden de “kurulum” bilgilerini bir sonraki yazıya ötelemiş oldum.

Beni izlemeye devam edin.

Ahmet Aksoy