Python ile Yüz Tanıma Uygulaması

GİRİŞ

Gelişmekte olan teknoloji ile birlikte ihtiyaç ve imkanlara göre biyometrik sistemler gelişme göstermiştir. Çoğunlukla güvenlik amaçlı kullanılan biyometrik sistemler kullanm ihtiyacına göre farklılıklar göstermek ile birlikte kullanılan yönteme göre ihtiyaç duyulabilecek donanım ve yazılım yüklü bir maliyet gerektirebilir. Günümüzde yaygın olarak kullanılan veya bilinen biyometrik sistemler; parmak izi,yüz,el geometrisi,iris,dna gibi çeşitli biyometrik özelliklere dayanan sistemlerdir. Bu yazıda bu biyometrik sistemlerden yüz tanıma sistemi ele alınacak ve kodlanacaktır.

YÜZ TANIMA

Yüz tanıma, görüntü işleme teknikleri kullanılarak bir görüntünün analizi sonucunda ve desen karşılaştırımı yapıldıktan sonra belirli bir kişiyi tanımlayan biyometrik uygulamadır. Yüz tanıma genellikle güvenlik alanında kullanılır.

Yüz tanıma sistemleri “faceprints” denilen insan yüzündeki 80 belirli noktanın analizi sonucunda ortaya çıkan sayısal kodlar ile çalışırlar. Bu belirli noktalar:

· Elmacık kemikleri,

· Göz çukurlarının derinliği,

· Burun uzunluk ve genişliği gibi kişiye özel özelliklerin tümünü içerir.

Bu sayısal kodlar yada değerler daha önceden veritabanına işlenmiş sayısal değerler ile karşılaştırılarak yüz tanıma sistemi gerçekleşebilir.

Yüz Tanıma Sisteminin Dezavantajları

Yüz tanıma sistemlerinin birçok avantajı olduğu gibi dezavantajlarıda vardır. En büyük dezavantajı insan yüzünün zaman içerisindeki değişimidir.Bir insanın yüzü yaşın ilerlemesiyle biyolojik değişime uğrar ve yüz ölçülerindeki değişim sistemin başarısızlığını arttırır. Diğer bir etken, bir kaza veya herhangibir olay sonucunda yüzde gelecebilecek gözle görülür bir değişim sonucunda bu yine sistemin başarısızlığını arttırır. Günümüz teknolojisindeki bilgi güvenliğinin önemini düşünürsek eğer,yüz tanıma kişi bazlı önemli derecede güvenlik zaafiyetine sebebiyet verir.

Yüz Tanıma’nın Aşamaları

Yüz tanıma işlemleri üç aşamadam oluşmaktadır. Bu aşamalar, veri seti oluşturma,sistemin eğitilmesi ve yüz tanıma.

Veri Seti Oluşturma

Bu aşamada yüz veritabanına kaydedilecek verilerin elde edilmesi aşamasıdır. Bu aşamada, bir kamera yardımı ile yüz örneği alınacak bireyin farklı açılardan yüzünün görüntüsü belirli frame aralıklarıyla çekilerek bir veritabanına kaydedilir. Bu aşamada yüzün net bir şekilde görünüyor olması ve ortam ışığı gibi etkenlere dikkat edilmelidir.Veri setinin oluşturulması oldukça önemli bir adımdır.

Sistemin eğitilmesi

Veri seti oluşturulduktan sonra belirli yöntemlerle oluşturulan veri setleri sisteme öğretilir. Eğitim yapılması,veri setlerinin bir sonraki adımda karşılaştırılabilir hale getirilmesi,kaydedilen yüz değerlerinin tanıma aşamasında kullanılması içindir.

Yüz tanıma

Veri setlerinin oluşturulması ve sistemin eğitilmesi aşamasından sonra son aşama yüz tanıma aşamasıdır. Bu aşamada, oluşturulan veri setlerinin sisteme eğitilmiş hallerinin tanıma adımındaki gelen girdi yüz değerleriyle karşılaştırılarak yüz karşılaştırılması yapılan bireyin tanınması ya da tanınmaması sonucuna varılır.

KODLAMA

Kodlama aşamasında Python dili kullanarak bir yüz tanıma uygulaması yazılacaktır. Bu uygulamada “haar-cascade” yöntemi ve “open-cv” kütüphanesi kullanılacaktır.

Opencv , Intel tarafından geliştirilen bilgisayar görme uygulamaları için ortak bir altyapı oluşturmak adına yazılmış açık kaynak görüntü işleme kütüphanesidir.

Haar-cascade, görüntü işlemede çok kullanışlı olan,resim veya video içerisindeki nesne tespiti için kullanılan bir sınıflandırıcıdır.

İlk aşamada veri seti oluşturmak gerekir. Öncelikle “open-cv” ve “os” kütüphaneleri import edilir.

Kamera bir değişkene tanımlanır ve aktif edilir. Yüz tespiti için open-cv kütüphanesiyle cascade sınıflandırıcısı bir değişkene atanır.

Yüz veri seti oluşturulacak kişi için bir kullanıcı adı yada isim girilmesi için bir değişken tanımlanarak bu değişkene girdi dışarıdan alınır ve alınan değer adında “dataset” dizini altında bir dosya oluşturulur.

Kamerada yakalanan yüz bir çerçeve ile tanımlanarak gri katmana çevrilir ve yüz bir çerçeve içine alınarak gösterilir. Yakalanan her frame oluşturulan dosya adı altında sıralı şekilde kaydedilir. ”ESC” tuşuna basılması yada 50 tane frame yakalanması halinde işlem sonlandırılır.

İşlemin sonlandırılmasının ardından kamera pasif edilir ve tüm pencereler kapatılır.

Böylece veri elde etme aşaması tamamlanmış olur.

Eğitim aşamasında scriptimize “opencv” ,”numpy” , “Pillow” ,”os” ve “json” kütüphaneleri eklenir.

Eğitim için kullanacağımız yöntem “LBP yöntemi” ve cascade sınıflandırıcısı birer değişkene tanımlanır.

Oluşturulan veri setlerinin yolları alınır ve dizinlere gidilerek her kullanıcı için oluşturulmuş dosyalar numaralandırılır ve label başlıklarına karşılık birer id numarası atanır. Bu idler bir diziye alınır ve “ids.json” adında bir dosyaya atılır.

Diziye atılan idler yüz örneklerine denk gelen label başlıklarıyla eşleşip yeni bir “numpy” dizisine atılır. Yüz verisine karşılık gelen id geldiğinde direk olarak girilen label başlığının görüntülenmesi için numpy dizisi şeklinde kullanılmıştır.

Eğitimin son adımında ise oluşturulan bu veriler eğitilir ve “trainer.yml” adında bir dosyaya kaydedilir.

Böylece eğitim adımı tamamlanmıştır. Veriler artık yüz tanıma adımı için hazır hale gelmiştir.

Son aşamada yüzün tanınması, girdi verileri ile veri tabanındaki verilerin karşılaştırılarak sonucunun döndürülmesi işlemi yapılacaktır. Veriseti oluşturma ve eğitim adımlarındaki gibi ilk olarak kütüphaneleri import edilir.

Ardından cascasde sınıflandırıcısı,kullanılacak yöntem olan LBP tanıyıcı olarak birer değişkene atanır,eğitim kısmında oluşturduğumuz “trainer.yml” dosyası okunur ve yüzün tanınması aşamasında kime ait olduğunu belirtecek yazı için bir font seçilir.

Eğitim aşamasında label değerlerine karşılık gelerek oluşturulmuş id değeleri bu aşamada “ids.json” dosyasından okunarak “dictionary” adında bir diziye atanır.

“ids.json” dosyasından okuduğumuz değerleri “dictionary” dizisinde isimler ve onlara karşılık gelen idler olarak ayrı tutar. Oluşturulmuş olan “names” değişkenine “dictionary” dizisindeki isimler atanır.

Yüz tanınması kısmında asıl kod parçacığı olan kısma gelinmiş olur. Burada kamera aktif edildikten sonra alınan görüntü griye dönüştürülür. Çünkü veri seti aşamasında oluşturulan veri setleride aynı şekilde griye dönüştürülmüştü.Ardından yüzün görüntüde yakalanması için değerler bir değişkene atılır. Bu satırdaki “scaleFactor” değeri görüntü boyutunun küçültme oranıdır yani ölçeklendirme boyutudur. ”minNeighbors” ise bir yüzü çerçeve içerisinde almak için gerekli komşuluk sayısıdır ve bu sayı genelde 3 veya 5 olarak seçilir.

Değişkenlerin tanımlanmasının ardından çerçeve boyutlandırılması yapılır ve renk değerleri ayarlanır. Ardından griye dönüştürülmüş görüntü veri setinden okunan veri değerleriyle oranlanır. Belirlenen bir oran değerinden küçük bir oranla eşleşen değerlere denk gelen isim ekranda gösterilir,eğer eşleşmiyor ise “bilinmiyor” olarak gösterilir.

İsim eşleşmesi gösterildikten sonra artık programın sonlanması gerekir. Burada kamera penceresinin adı “KAMERA” olaran tanımlanmıştır. Kamera penceresinin sonlanması için “ESC” tuşuna basılması gerektiği ve waitkey değeri yani gecikme değeri olarak 10 (10ms) tanımlanmıştır.

Son olarak aktif edilmiş olan kameranın pasif hale getirilir ve açık olan tüm pencereler kapatılır.

Programın çalıştırılıp test edilmesi sonucundaki çıktı aşağıdaki gibidir.

Bu yazıda Python dilinde open-cv kütüphanesini ve cascade sınıflandırıcısını kullanarak bi yüz tanıma uygulaması yaptık. Bir dahaki yazıda görüşmek üzere…

--

--