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.
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].
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
merhaba yüzün tamamı olmadıgı zaman özellikle kalabalık fotolardan kişinin kulagı cıkmayıp yüzünün kalan kısmı oldugu gibi durumlarda yüzü tanımıyor. Ne önerirsiniz?
Furkan Bey merhaba,
Öncelikle birden fazla yüzü/nesneyi algılamada R-CNN algoritması sıklıkla kullanılmakta. İsterseniz rcnn algoritmasını bir araştırın derim. Sorunuza gelecek olursam, modeli eğitirken model sizin kulağınızı görmediyse, yan açıdan sizi tanımayacaktır. Modele ne verirseniz onu tanır. Kendimden örnek verecek olursam, ben ilk eğittiğim modelde tüm resimlerim gözlüklüydü ve bu yüzden model beni gözlüksüz tanımıyordu 🙂 Umarım yardımcı olabilmişimdir. Teşekkür ederim ilginiz için.
Merhaba ben yüz tanıma işlemini gerçekleştiriyorum ama benim ek olarak yapmak istediğim yüzü tanınan kişiyi id ve ismi ile veri tabanına(sql ile) tablo oluşturup bu bilgileri tabloya nasıl yüklerim. Yardımcı olursanız çok sevinirim.
Merhaba, açıkçası sorunuzun cevabını ben de bilemiyorum. Yüz tanıma işlemlerini yaparken, modeli eğitmek için öncelikle kameranın karşısına geçiyorsunuz ve fotoğrafınızı çekiyor (ya da siz yüklüyorsunuz) ve model bunu öğreniyor. Model, bu fotoğraftaki kişi XX/XY’dir diyor ve bunu harddiskte ya da bir yerde saklıyor (train fotoğrafları ve id’yi). Fakat sizin sorduğunuz bu unique id’yi alıp sql’e taşıması… Şu an için bunun cevabını bilemiyorum. Öğrenirsem sizlere yardımcı olacağım İlhami Bey. Teşekkür ederim.
Biraz araştırdım ve aşağıdaki videoları izlemenizi öneririm.
https://www.youtube.com/watch?v=6gWS2CdtZrs
https://www.youtube.com/watch?v=tBP3orL7bIo
merhaba ilhami bey benim de lisans tezim sizinkine benzer ben de yüz tanıma yapacağım yani örnek verecek olursam diyelim ki ben yüzümü kamera ile okuttum sonra veritabanında kayıtlı olan verilerle karşılaştırsın ve o kişi ben isem yani sistemde kayıtlı isem tanısın eğer kayıtlı değilsem tanımasın bununla ilgili epeydir araştırıyorum da sizin yardım edeceğiniz önerebileceğiniz bir şey var mı acaba teşekkür ederim şimdiden
merhaba lisans öğrencisiyim henüz yeni başladım ve maske tanıma sistemi projesi yapacağım. haar cascade algoritmasını anlamaya çalışıyorum. internetteki kodlara baktığımda var olan bir .xml dosyasını kullanarak buradan belirli işlemler ile varlık ya da yokluk sonucu buluyor, tespit yapıyor. Burada genelde kodlara baktığımda hep hazır .xml dosyalarını kullanıyorlar. şimdi anlamadığım kısım şu ; .xml dosyasını yaratmak, oluşturmakmı haarcascade algoritması oluyor yoksa bu hazır .xml dosyalarını kullanarak tespit yapmak mı haarcascade algoritması oluyor ?
mail adresim : abdulsamet.ocsoy@gmail.com
Lütfen mail adresimden bilgilendirebilirmisiniz.
iyi çalışmalar…
Merhaba Abdulsamet,
Mailinize geri dönüş yaptım. Teşekkür ederim.
Merhaba, bir Cnn projesi geliştirmekteyim. Webcam üzerinden kişi ve duygu analizi yapmak istiyorum. Ancak haarcascade algoritması ile ilgili yukarıda yazılan gibi hazır olarak mı kullanmam gerekiyor yoksa oluşturmalı mıyım? Bunun yanı sıra kişileri ve duyguları nasıl tanımlamam gerektiği konusunda kafam karışık.
Mail: aleynaoral1998@hotmail.com
Acaba iletişime geçip sorularım ile ilgili yanıt verebilir misiniz?
Şimdiden teşekkürler.
Aleyna Merhaba,
Aşağıdaki linkleri incelemeni öneririm.
https://www.youtube.com/watch?v=DtBu1u5aBsc
https://www.youtube.com/watch?v=QSTnwsZj2yc
Teşekkür ederim.
Merhaba, Utku mail üzerinden dönüş yapabilirsen danışmak istediğim bir kaç sorunum var.
Hasan35senturk@hotmail.com