EmguCV ile Yüz Tanıma Uygulaması

Daha önce yüz tanımaya giriş yapıp, OpenCV içerisindeki yüz tanıma algoritmalarına değinip ve JavaCV ile örnek bir yüz tanıma projesi geliştirmiştik. Bu yazıda ise Microsoft dot net için geliştirilen EmguCV kütüphanesi ile yüz tanıma uygulaması geliştireceğiz. Öncelikle okumadıysanız aşağıdaki bağlantılardan daha önceki yazıları okumanızı öneririm.

Geliştireceğimiz örnek uygulama da, kamera aygıtından veya dosya sisteminden okunan video üzerinde yüzleri tespit edeceğiz, eğer yüz sisteme kayıt edilecekse çalışma dizininde oluşturduğumuz faces klasörü içerisine bitmap olarak kaydedilecek, yüze id değeri verilecek ve FaceList metin dosyasına id değeri ve resmin adı kayıt edilecek. Kayıt edilen yüzler karşılaştırma için Eigenfaces algoritmasının eğitilmesinde kullanılacak. Eğitim sonrası tespit edilen yüzler eğitilmiş algoritma aracılığıyla karşılaştırılacak ve bir sonuç üretilecektir. Eşleşen kayıt var ise tanıma işlemi tamamlanmış olacaktır. Yüz tespiti için haar cascade yöntemi kullanılacak ve haarcascade_frontalface_default eğitim dosyası kullanılacaktır.

Proje içerisinde kullanılan GetFacesList() metodu, dosya sisteminde yer alan ve yüzlerin kayıt edildiği text dosyasını okumakta ve eğitim işlemini gerçekleştirmektedir. ProcessFrame() metodu, daha önceki örneklerden de aşina olduğunuz üzere VideoCapture ile alınan frame’in gri renk uzayına çevrilmesi (Algoritmalar gri renk uzayında çalışmaktadırlar ve gri renk uzayına sahip görüntüler RGB görüntülere göre daha hızlı işlenir.) işlenmesi, haar cascade ile yüzlerin tespit edilmesi  işlemlerinden sorumludur. FaceRecognition() metodu, eigenfaces algoritması ile tespit edilen yüzün kayıtlı yüzler ile eşleştirilmesi ve id verisini bulmaktan sorumludur. Algoritmaya yeni bir yüz ekleneceğinde, o anki tespit edilen yüz alınarak verilen id ile kaydedilmekte ve algoritma eğitme işlemi tekrardan başlatılmaktadır. Uygulama çalıştığında varsayılan olan kamera aygıtı ile başlar, isterseniz bir video dosyası belirterek video üzerinden yüz tanıma yapabilirsiniz. Proje içerisinde yer alan static Config sınıfı aracılığıyla, haar cascade dizini, yüz kayıt dizini, görüntü uzantısı, tarama sıklığı ve aktif kamera aygıtı gibi ayarları değiştirebilirsiniz. Proje C# ile geliştirilmiş bir WPF projesidir, kaynak kodları aşağıdaki bağlantıda yer alan Github adresimden indirebilirsiniz. İhtiyaç duyabileceğiniz EmguCV ve OpenCV sistem kütüphaneleri (dll) kaynak kod içerisinde mevcuttur.

Github Bağlantısı: https://github.com/mesutpiskin/FaceDetectionAndRecognition. Uygulamanın demosunu aşağıdaki videodan izleyebilirsiniz.


Yararlanılan Kaynaklar

  • http://www.emgu.com/forum/viewtopic.php?t=3413
  • http://www.emgu.com/wiki/index.php/Tutorial