Anasayfa / Genel bir bakış / Cv2 İle Yüz Tanıma ve Belirleme

Cv2 İle Yüz Tanıma ve Belirleme

Yüz belirleme ya da nesne tanıma, derin öğrenmenin gelişmesi ve ciddi çalışmaların literatüre katılmasıyla son zamanlarda önemli bir konu haline gelmiştir. Günlük hayatımızda çok fazla kullanılan yüz belirleme (face detection) algoritmaları aslında derin ağlarla eğitilen modellerin, yüz hatlarını bulmasıyla çalışır. Kişilerin yüz hatlarına göre biyometrik çıkarımlar yapma işlemidir. CNN (Convolutional Neural Network), ImageNet, Opencv vs ise bu alanda kullanılan en yaygın algoritmaların (kütüphanelerin) başında gelmektedir. Görüntü işlemede oldukça başarılı olan CNN (Evrişimsel Sinir Ağları) (Kim, 2017), Yapay Sinir Ağı tabanlı olup, özelleşmiş bir derin öğrenme mimarisine sahiptir (Kılınç, Başepmez, 2018). Görüntüden öznitelik araması yapılmaktadır. Günümüzde fotoğraf makinalarının odaklanmasında, güvenlik noktalarında ya da bazı yeni nesil akıllı cep telefonlarının tuş kilidinin açmasında yüz belirleme akla gelen ilk örneklerdir.

Görüntü işleme; herhangi bir görüntünün netliğini artırma, görüntü üzerinde bulunan herhangi bir nesnenin elde edilebilmesi ya da nesnelerin tanımlanabilmesi gibi birçok amaçla kullanılmaktadır. Herhangi bir resmin yazılım aracılığıyla kullanılabilmesi için sayısallaştırılması gerekmektedir. Sayısallaştırma; resimde bulunan renklerin sayısal değerlerle ifade edilmesidir. [A. Eldem, H. Eldem, A. Palalı].

CNN algoritması aslında fotoğraflardaki her bir pixele odaklanarak 128 – 64 – 32- 16 vs şeklinde küçük boyutlara indirger. Son katmana kadar devam eden bu süreçte, görüntü bir matris formatına çevrilir. Son adımda araştırmacı istediği formatta çıktı alır.

Yüz tanıma sistemlerinin çalışma mantığı diğer biometrik tanıma sistemleriyle bire bir aynıdır. Yüz tanıma sisteminin temelinde her insanın farklı ve benzersiz bir yaratılışa sahip olması yatmaktadır. Bunu biraz açacak olursak, tıpkı parmak izinde olduğu gibi yüz yapısında da insana özgü olan benzersiz kalıtımsal özellikler vardır. Ancak yüzdeki bu benzersiz yapının varlığı insanlarca pek bilinmez. Her insanın bir yüz yapısı vardır, yüzlerin simetrisi olarak bilinen ve alın, burun T bölgesi ve çene olmak üzere 3 ana bölgeden oluşan bu hatların matematiksel oranı insanın doğumundan ölümüne kadar her anında aynıdır. Bu hatların bilgisayar ortamında 3 boyutlu olarak fotoğraflanması ve alınan verinin birkaç güvenlik protokolü ile şifrelenerek yapılan eşleştirmeyle yüz tanıma işlemi yapılmış olur. Bilgisayar ortamında yapılan bu biometrik eşleştirme sonucu yüz yapısı bilgisayar içindeki veritabanındaki yüzlerle karşılaştırılır ve uyumlu yüz yapısına sahip kişinin istenilen yere istenilen şekilde erişimine izin verilir [Kaynak: http://www.artelektronik.com/yuz-tanima-sistemleri-yuz-tanima-ozelligi-nedir.html]. Çıktı olarak genellikle kişi belirleme (güvenlik), nesne tanıma ve sınıflandırma gibi konular olabilir.

Yüz tanıma algoritmaları genel yapı itibariyle ikiye ayırabiliriz. Bunlardan birincisi resimler üzerinden yapılan yüz tanıma tekniği, diğeri ise hareketli bir görüntü üzerinden yüz tanıma tekniğidir. Bu iki teknolojide günümüzde onlarca yerde kullanılmaktadır. Bunlara örnek olarak birçok ülkenin kullanıma başladığı pasaport kontrolündeki yüz taramaları ve mobese kameraları gibi ülke çapında kullanılan kameralarda Interpol’ün yapmış olduğu yüz tanımlama uygulaması gösterilebilir [Kaynak: Torun ve diğ., 2007, A.Varol, B.Cebe] .

Bu yazımda sizlere detaya girmeden kısa bir uygulama yapmayı planlıyorum. Açık kaynak kodlu bir kütüphane olan cv2, bu çalışmada tercih edilen görüntü işleme kütüphanesi olmuştur.

Kaynak: RaghavPrabhu

GPU’ların (Grafik İşlemci Ünitesi) güçlenmesiyle CNN algoritmaları çok daha hızlı çalışmaya başlamıştır. Özellikle büyük hacimde denetimli (etiketlenmiş) verilerden özellik saptayan (pattern detection) derin sinir ağları, veri bilimine ya da yapay zekaya yeni bir soluk getirmiştir.

Yüz burnun tam ortasından ikiye bölündüğünde oluşan iki parça neredeyse bir birinin simetriğidir, burun iki gözün altında yer alır, iki adet göz bulunur, burun ağız ile 2 gözün ortasındadır gibi bir çok temel öznitelikten ve bilinenden yararlanılır. OpenCV içerisinde yer alan ve nesne tanıma bölümünde işlenilen Haar-Cascade algoritması buna bir örnektir, bu algoritma ile görüntü içerisindeki yüzler tespit edilebilir, yine OpenCV içerisinde yeralan SIFT bu yönteme örnek gösterilebilir. İki boyutlu verileri için oldukça sık kullanılan bu yöntem üç boyutlu veriler içinde uygulanabilmektedir. Sinir Ağları ile yüz tanımayı da bu kategoride ele alabiliriz [Kaynak].

Sinir Ağlarını kullanmak için çok fazla veriye ihtiyaç duyulur. Tanınmasını istenen kişilerin yüzleri sinir ağına eğitim verisi olarak girilir ve sinir ağı (genellikle CNN) verisetinde yer alan yüzler üzerinde baskın öz nitlikleri belirleyerek bir sınıflandırma yapar. Girdi olarak verilen yüz sinir ağına girdiğinde bakılması gereken öz nitelikler eğitim ile belirlendiği için hızlı bir şekilde yüzün hangi sınıta olduğu belirlenir. Veri tabanına eklenen her kişinin yüzü artık ayrı bir sınıf olmuştur geriye kalan ise girdi olarak verilen yüzün hangi sınıfta olduğudur [Kaynak].

Kaynak: Gradient-Based Learning Applied to Document Recognition, Yann LeCun

Geleneksel algoritmalar iki farklı temele dayanır;

  • Geometrik (özellik tabanlı) Yaklaşım
  • Fotometrik (görünüm tabanlı) Yaklaşım

Fiziksel ya da geometrik yaklaşımda amaç, değişebilen özellikleri kullanmaktır. Bu da yüz özelliklerinin yapılandırılmasına dayanır. Göz, burun, ağız gibi yüzde ilk olarak konumlandırılan yerlerine, birbirlerine olan mesafelerine, açılarına göre farklı sınıflandırmalara dayanır. Bu yaklaşım, yüzün tanımlanmasının ardından ilk olarak alınan pozlama görüntüsü ile karşılaştırma yapılırken, olabilecek herhangi bir gölge, aydınlatma değişiklikleri ya da pozlamalardan kaynaklı oluşabilecek farklılıklardaki yer işaretlerinin tespitine dayanır. Bunun yanında görünüm tabanlı yaklaşımda, tüm yüzün şablonu kullanılır [Kaynak].

Örnek bir algoritma yapısı. Bu yazıda sizlerle beraber kısaca fotoğraftan yüz-göz tanıma yapacağız.

Dijital görüntülerde insan yüzlerini tanımlayan çeşitli uygulamalarda kullanılan bir bilgisayar teknolojisidir. Yüz tespiti ayrıca insanların görsel bir sahnede yüzleri bulup yüzleştirdikleri psikolojik süreci de ifade eder (Wikipedia). Yüz tanıma algoritmaları şunlardır;

  • PCA (Temel Bileşenler Analizi)
  • ICA (Bağımsız Bileşenler Analizi)
  • LDA (Doğrusal Ayrımcılık Analizi)
  • EP (Evrimsel İzleme)
  • EBGM (Elastic Brunch Graph Matching)
  • Kernel Metodu
  • Trace Dönüşümü
  • AAM (Aktif Görünüm Modeli)
  • 3-D Yüz Tanıma
  • Bayes Çerçevesi
  • SVM (Destek Vektör Makinesi)
  • HMM (Gizli Markov Modelleri)

UYGULAMA

Bu ay uygulama konusu olarak sizlerle beraber Python üzerinden kısaca fotoğraflardan kişilerin yüzünü ve gözlerini belirlemeye çalışacağız. “cv2” kütüphanesini kullanacağımız bu uygulamada, daha önceden eğitilmiş olan modeli programa okutarak yeni bir test seti yükleyeceğiz. Böylece yüzümüzü ve gözlerimizi (ya da kaslarımızı / siz ne görmek istiyorsanız) belirlemiş olacağız.

import cv2
import sys

fotograf = cv2.imread("foto.jpeg")
gray = cv2.cvtColor(fotograf, cv2.COLOR_BGR2GRAY) 

yuz_belirleme = cv2.CascadeClassifier("data\haarcascade_frontalface_alt.xml")
goz_belirleme = cv2.CascadeClassifier("data\haarcascade_eye.xml")

yuz = yuz_belirleme.detectMultiScale(
    gray, 
    scaleFactor=1.075, 
    minNeighbors=5, 
    minSize=(15, 15))

for (x,y,w,h) in yuz: 
    cv2.rectangle(
    fotograf, 
    (x,y), 
    (x+w,y+h), 
    (255,0,0),
    2) 

    roi_gray = gray[y:y+h, x:x+w] 
    roi_color = fotograf[y:y+h, x:x+w] 
      
    eyes = goz_belirleme.detectMultiScale(roi_gray) 
    for (ex,ey,ew,eh) in eyes: 
        cv2.rectangle(
        roi_color, 
        (ex,ey), 
        (ex+ew,ey+eh), 
        (0,255,0), 
        1)

print("[INFO] {0} Yüz Bulundu! Bulunan Yüz Sayısı = ".format(len(yuz)))

for (x, y, w, h) in yuz:
    cv2.rectangle(
    fotograf,
    (x, y), 
    (x + w, y + h), 
    (0,0,255), 
    2)

durum = cv2.imwrite(foto2.jpg', fotograf)
print("[ Bilgi Mesajı… ] Görsel kaydedildi: ", durum)

Ve Sonuç…

İyi Eğlenceler 🙂

Yazımı sonlandırmadan önce günümüzde Yapay Zekanın önemini tekrar vurgulamak istiyorum. Yapay Sinir Ağları tabanlı (ya da diğer algoritmalar) Makine ya da Derin Öğrenme algoritmaları ile yapılabilecekler sadece insan beyninin hayal gücüyle sınırlı. Günümüz teknolojilerinde aklımıza gelen hemen hemen hepsinde bir şekilde yapay sinir ağları gibi makine öğrenmesi algoritmaları kullanılmaktadır. Gelecek 5 – 10 yıl içinde adını duymadığımız meslekler, departmanlar ve bölümler olacaktır ama veri okur yazarlığı bilmeyen kişiler geleceği planlayanlar arasında olamayacak ve zamanla biteceklerdir.

Gelecekte verinin bize fısıldadığı cümleleri anlayamayan, verinin karakterini algılayamayan kişiler ya da meslek grupları bitecek veya olduğu yerde kalacaktır. O yüzden veri okur yazarlığı konusunda kendimizi hep geliştirme çabası içinde olmalıyız. Bu uygulamada sizlerle bilgisayar ya da telefon kameralarının yüzümüze nasıl odaklandığını (belirlediğini) ve ayırdığını görmüş olduk.

Varsayımlarınızın sağlanması dileğiyle,

Veri ile kalın, hoşça kalın…

Utku Kubilay Çınar

KAYNAKÇA

  • A. Eldem, H. Eldem, A. Palalı / BEÜ Fen Bilimleri Dergisi 6(2), 44-48, 2017
  • A.Varol, B.Cebe, http://asafvarol.com/makaleler/icits11.pdf
  • Torun, B.,Yurdakul, M., Duygulu, P. (2007), Benzer yüzlerin bulunması, Bilgisayar Mühendisliği, Bilkent Üniversitesi

Hakkında Utku Kubilay ÇINAR

YTÜ - Yüksek Lisans Doğuş Teknoloji - Data Scientist

GÖZ ATMAK İSTEYEBİLİRSİNİZ

Pratik Bilgiler, Pratik Komutlar-2

1. Scala’da boşluklardan kelimeleri ayırma "one two three".split("\\s+") Özellikle birden fazla boşluk varsa ” ” …

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir