ÖZEL EGE LĠSESĠ ÖZYÜZ VE GÖRÜNTÜ ĠġLEME TEKNĠKLERĠ ĠLE SINIF YOKLAMA UYGULAMASI HAZIRLAYAN ÖĞRENCĠLER: SILA AVAR- MEHMET MALLI DANIġMAN ÖĞRETMEN: SELVĠNAZ GÖKALP ĠZMĠR 2013
ĠÇĠNDEKĠLER 1. PROJENĠN AMACI... 3 2. DURUM... 3 3. YÖNTEM... 4 4. GERÇEKLEġTĠRME BĠLGĠSĠ... 9 5. SONUÇ... 11 6. ĠRDELEME... 12 KAYNAKÇA... 12 TEġEKKÜR... 12 2
1. PROJENĠN AMACI Güncel teknolojiler, sınıfta gerçekleģtirilen rutin iģlemleri kolaylaģtırmak ve zaman kaybını önlemek için kullanılabilirler. Rutin olarak yapılan yoklama iģlemlerinde otomasyonun en hızlı ve en doğru sağlanabilme yöntemlerinden birisi, görüntü iģleme teknikleri ile sağlanabilmektedir. OGS/HGS gibi sistemler tarafından tercih nedeni olması da bunu göstermektedir. Hedeflenen, kamera görüntüsünün içinde bulunan yüzün, daha önce kaydedilen yüzlerle karģılaģtırılarak öğrencilerin tanınmasıdır. Tanınan öğrencilerin ders saatindeki yoklamaları bir kayıt dosyasında tutulur. Yazılım kolayca birden fazla sınıfı destekleyebilir. Bu sayede aynı sınıftaki bir sistem farklı derslerin yoklamasını rahatça alabilir. Bu iģlemi yapabilmek için projede, bir web kamerasından alınan görüntülerde, kameraya en yakın yüz bulunur. Bu yüze ait görüntü bilgisi değerleri öncelikle gri seviyeye çevrilir. Daha sonra histogram değerleri eģitlenerek daha önce kayıtlanmıģ görüntülerle ıģıklandırma farkları en aza indirilir. Sınıfa kayıtlı öğrencilerin daha sonra alınmıģ görüntüleri ile karģılaģtırıldıktan sonra, belli bir eģik değeri içinde, kayıtlı görüntülere en yakın öğrenci olarak tanınır. Öğrencilerin hepsi girdiğinde yazılım ders saati ve gününe ait yoklamayı, sınıf yoklama dosyasına ekler. Sınıf yoklama dosyası virgülle ayrılmıģ değerlerden oluģur. Bu sayede MS Excel gibi hesap tablosu yazılımları ile rahatça görüntülenebilir. 2. DURUM Sınıf yoklaması için gerekli olan en önemli bileģen yüzün kime ait olduğunun bulunmasıdır. Bu problem görüntü iģleme konuları içinde önemli bir yer tutmaktadır ve konuyla ilgili çeģitli yöntemler geliģtirilmiģtir [5]. Görüntüden kiģinin tanınmasında birçok zorluk karģımıza çıkmaktadır. Görüntüler iki boyutlu olduğu için kiģinin yüzünün kameraya iz düģümü her zaman aynı açılardan olmayacaktır. Ayrıca, ortamın ıģıklandırılması, yüzün üzerinde parlaklıklar ya da gölgeler oluģturup tanınmayı sağlayacak özellikleri kapatabilir. Diğer yandan kiģinin gülümseme gibi yüz mimikleri de yüzün tanınmasını engelleyebilir. Saçın uzaması, toplanması, gözlük takılması gibi günlük değiģiklikler de iģlemi zorlaģtıran etkiler olarak sayılabilir. Yüz ile kiģiyi tanımak için çeģitli yöntemler geliģtirilmiģtir. Kanade nin çalıģmasında yüzün, göz, burun gibi belirli 16 noktası bulunup, daha sonra bu noktalar arasındaki uzaklıkların oranlarına bakarak kiģinin tanınması %75 oranında mümkün olmuģtur [10]. Brunelli bu noktaları 35 e çıkartarak tanınma oranını %90 a çıkarmıģtır [3]. Bu yöntem ıģıklandırma, yön ve büyüklük gibi dıģ etkilere karģı dayanıklı olsa da, önemli noktaların yöntemi geliģtirilen kiģi tarafından rastgele seçilmektedir. Eğer seçilen özellikler belirleyici değilse yöntem baģarılı olamayacaktır. Çıkarılan özellikleri, yapay sinir ağları ve öğrenme algoritmaları ile de kullanmak mümkündür. Lawrence ev arkadaģlarının çalıģması melez bir yapay zeka çözümü ile %96.2 baģarım elde etmiģtir. Bu çözümde yerel görüntü örnekleme ile bir denetimsiz öğrenme yöntemi olan kendinden düzenlenen haritalar (self-organizing maps) sinir ağı ve evriģimli bir sinir ağı kullanılmıģtır [7]. BaĢka bir çalıģmada Eleyan ve Demirel temel bileģenler analizi metodu ile elde ettikleri özellik vektörlerini bir ileri beslemeli sinir ağı ile sınıflandırmıģlardır. Önyüz yönteminde kullanılan öklid uzaklığı yerine geçen sinir ağı, eski yönteme göre %7 lik bir baģarım artıģı sağlamıģtır [4]. 3
En sık kullanılan yöntemlerden biri de özyüzler olarak bilinen ve kiģilerin diğer kiģilerle aralarındaki farkı istatistiksel olarak tutan, temel bileģenler analizinin kullanıldığı yöntemdir. Bu yöntem, kullanım kolaylığı ve etkili çözümü ile tercih edilen çözüm olmuģtur. Yöntemler dıģında, projemizde gerçekleģtirdiğimiz çalıģmanın ticari muadilleri de mevcuttur. Bunlardan ilki BirleĢik Krallık taki okullarda kullanılan ve 9.000 Sterlin değerinde olan faceregister yazılımıdır. Öğrenciler PIN numaralarını girdikten sonra yüzleri veritabanındaki ile karģılaģtırılır. Daha sonra öğrenci giriģ veya çıkıģ yaptığını belirtir [2]. Benzer bir ürün, cihazlarla herhangi bir temas gerektirmeden yüz ile tanımayı gerçekleģtirmektedir. Yüz tanıma için iki kamera ve kızıl ötesi ıģınları kullanmaktadır. Bu sayede baģarım oranını arttırmaktadır. Okul giriģlerine kurulan bu kamera sistemleri ile öğrenci ve okul görevlilerinin giriģ çıkıģlarını kayıt altına alabilmektedir [6]. 3. YÖNTEM ÇalıĢmamızda kullandığımız Özyüzler yöntemi anlatmadan önce kısaca istatistiksel altyapısına değinmekte fayda vardır [8]. Temel Ġstatistik Denklemleri Elimizde var olan sayısal değerlerin yapısını anlayabilmek için çeģitli yöntemler vardır. Bunlardan ilki, bu değerlerin ortalamasıdır. Bu ortalama değer bize sayısal değerler hakkında bir bilgi vermektedir. Ortalama bulmak için sayıların değerlerinin toplamı, sayı miktarına bölünerek bulunur. Her ne kadar ortalama bize bir fikir verse de, sayıların dağılımı hakkında bilgi vermez. Çünkü bütün değerleri aynı olan bir sayı kümesinin ortalama değeri farklı değerlerden oluģan baģka bir kümeye eģit olabilir. Sayıların ortalama değerden ne kadar dağıldığını görebilmek için standart sapma değeri kullanılır. Standart sapmayı bulmak için yapmak gereken dağılımdaki her değerin standart sapmaya olan uzaklıklarına bakılır. Standart sapmanın kare kökü alınmamıģ hali ise bize varyans değerini verir. Eğer elimizde bir gruba ait iki değer kümesi varsa, bu iki kümenin birbirleriyle olan bağıntılarını bulmak için kovaryans kullanabiliriz. Örnek olarak, öğrencilerin aldıkları notların olduğu küme ile sınava çalıģtıkları saatler arasındaki bağıntı sıfırdan büyük (pozitif) çıkacaktır. Çünkü çalıģma saatleri arttıkça alınan notlar da artacaktır. Eğer iki küme arasındaki kovaryans 4
değeri negatif çıkarsa bağıntıların ters olduğunu, yani biri artarken diğerinin azaldığını anlarız. Eğer kovaryans sıfır çıkarsa iki değer kümesi birbirleriyle bağıntısız kümelerdir deriz. Kovaryans hesaplamak için X ve Y dağılımlarımız olduğunu düģünelim. Ġki dağılımın arasındaki bağıntıları bulmak bu kadar kolay iken, eğer birden fazla dağılımımız, ya da boyutumuz varsa yapmamız gereken kovaryans matrisini kullanabiliriz. Bu matrisin her satır ve sütununa denk gelen dağılımların birbirleri arasındaki kovaryans değerlerini bularak büyük bir kovaryans matrisi oluģturabiliriz. Matrisin soldan sağa köģegenindeki değerler varyans değerlerini oluģturur. Bu matris aynı zamanda simetriktir, çünkü X ve Y dağılımlarının kovaryans değerleri, dağılımların yerleri değiģince değiģmez. Özvektör ve Özdeğerler Özvektörleri anlamadan önce matrislerin geometrik dönüģüm sağlayan özelliklerinden bahsetmeliyiz. Bir noktanın ya da vektörün, belirli bir kartezyen sisteminde bir açıyla döndürmek istersek bunu dönüģüm matrisleri ile yapabiliriz. Bir matrisin özvektörünü bulmak için, bu dönüģümlerden yola çıkarız. Eğer, matrisi bir dönüģüm matrisi olarak görürsek, bu dönüģüm matrisiyle dönüp, tekrar kendi üzerine gelen vektör, o matrisin özvektörüdür. DönüĢüm denklemlerimiz elimizde olduğu için bir vektörü tekrar kendi üzerine getirecek matrisi bulmak kolaydır. Fakat, burada bizim aradığımız, herhangi bir matris ile tam bir dönüģ sağlayacak bir vektördür. Matris ile dönüģ sonrasında, vektörün boyunda bir değiģiklik olabilir. Boyundaki değiģiklik, vektörün yönünü etkilemez. Bu değiģiklik oranı da, matrisin özdeğeridir. Matrislerin boyut sayısı kadar özvektör ve bu özvektörlere karģılık gelen özdeğerleri bulunur. Sayısal örnek vermek gerekirse, aģağıdaki matris iģlemine bakalım. ĠĢlemde en baģtaki matrisin, vektörle çarpıldığında, yine aynı vektörün 4 boyut büyüğünü elde ettiğimizi görürüz. Bu, vektörün, matrisin özvektörü olduğunu gösterir. Matrisin bu özvektöre ait özdeğeri ise 4 tür. Temel BileĢenler Analizi Temel bileģenler analizindeki (TBA) asıl amaç elimizdeki verinin boyutlarını oluģturan bileģenleri bulmaktır. Bu sayede verideki benzerlik ve farklılıkları elde edebiliriz. TBA ile bulunan 5
bileģenlerden bazılarının veri kümesine katkısına az olduğunu görürsek, o boyutu kullanmadan da verinin büyük kısmı hakkında hala fikir sahibi olabiliriz. Bu iģlem sayesinde veri boyutunu düģürmüģ veya kayıplı olarak sıkıģtırmıģ olduğumuzu söyleyebiliriz. Elbette, boyutu sildikten sonra özgün değerlere ulaģma Ģansımızı da kaybetmiģ oluyoruz. Temel bileģenler analizi için kullanacağımız verilerde ilk yapacağımız iģlem, veri boyutlarının her birinin ortalamasını bulmaktır. Daha sonra veri kümesindeki boyutun her değerinden bu ortalama değeri çıkartırız. Bu sayede her değerin ortalamadan ne kadar farklı olduğunu elde ederiz. Elde ettiğimiz bu yeni değerlere düzeltilmiģ değerler diyebiliriz. ġekil 1: Örnek iki boyutlu bir değer kümesinin MATLAB ile oluģturulmuģ temel bileģenleri. Bu iģlemden sonra, boyut sayımıza göre, kovaryans matrisimizi oluģtururuz. Bu kovaryans matrisine ait özvektör ve özdeğerleri buluruz. Buradan elde edeceğimiz vektör ve değer sayısı boyut sayısıyla aynı olacaktır. Özellik vektörlerimizi özvektörler arasından seçeceğiz. Eğer boyutu küçültüp, bazı vektörlerden ve dolayısı ile boyutlardan feragat etmek istersek, özdeğeri küçük olan özvektörleri seçmeyebiliriz. Son iģlem olarak, seçilen özellik vektörlerini düzeltilmiģ değerler ile çarparak, değerleri yalnızca bu seçilmiģ vektörler ile ifade etmiģ oluruz. Bir bakıma, veriyi aralarındaki iliģkiyi göz önüne alarak göstermiģ oluyoruz. 6
Görüntü ĠĢleme Yöntemleri Yüz tanıma çalıģmamızdaki görüntüleri temel bileģenleri kullanan özyüz yöntemine aktarmadan önce, bazı ön iģleme evrelerinden geçirerek, sonuçların daha iyi olmasını sağlayabiliriz [13]. Bu iģlemlerden ilki, kameraların aldığı renkli görüntüleri siyah beyaz görüntülere çevirmek iģlemidir. Bu iģlem sayesinde hem iģlenecek veri azalacaktır, hem de veri içerisindeki renklerden oluģacak özelliklerin yerine Ģekillerin önem kazanması sağlanacaktır. Görüntülerde kullanılan kırmızı-yeģil-mavi (RGB) katmanları, tek seviye olan gri ölçeğe çevrilir. Bunun için katmanların 0 ile 1 arasında değiģen normalize edilmiģ değerleri, ilgili denklem ile gri seviye değerlerine çevrilir. Kırmızı-yeĢil-mavi katmanları için elde edilen bu değerler ağırlıkları oranında toplanarak, gri seviye değerine ulaģılır. Gri seviye görüntü elde edildikten sonra, farklı ıģıklandırmalardan dolayı oluģacak sorunları gidermek için, görüntü histogram eģitleme iģleminden geçirilir. Histogram eģitleme gerçeklenirken hedeflenen, görüntü histogramının birikimli dağılım fonksiyonunu doğrusal hale getirmektir. Bu sayede görüntünün genel karģıtlık değeri artar. IĢığın katkıları bütün görüntülerde aynı seviyeye getirilmiģ olur. Görüntüye son uygulanan iģlem ise yeniden boyutlandırmadır. Bütün görüntülerin aynı boyutlarda olması gerekmektedir. Yeniden boyutlandırma yaparken de çeģitli yöntemler mevcuttur. Bu yöntemlerden biri en yakın ara değer hesaplamadır. Ara değer hesaplama; boyutlandırma sırasında oluģan yeni bir noktanın, var olan noktaların değerleri kullanılarak yaklaģık değerinin hesaplanmasıdır. Haar-benzeri Özellikler Kameradan alınan görüntülerde yalnızca bireyin yüzü olmayacaktır. Görüntü içinde yüzün bulunması da yapılması gereken ön iģleme adımlarından biridir. Bu iģlem için nesne tanımlama iģlemlerinde sık kullanılan, Haar dalgacıklarına benzerlikleri sebebiyle bu adı alan Haar-benzeri Özellikleri kullanılır. Viola ve Jones tarafından geliģtirilen bu yöntem, dikdörtgen bölgelerdeki piksel yoğunluklarını hesaplar ve komģu bölgeler ile aralarındaki farkları hesaplar. Bu fark görüntünün alt kısımlarını kategorize etmek için kullanılır. Örneğin insan yüzlerinde gözlerin olduğu bölge yanaklardan daha koyu olacaktır [12]. Haar-benzeri Özellikler hızlıca hesaplanabildikleri için, sık kullanılan nesneler için eğitilmiģ değerler, görüntü iģleme programlama kütüphaneleri tarafından sunulur. Özyüzler Matthew A. Turk ve Alex P. Pentland, 1991 yılında yayınladıkları Face Recognition Using Eigenfaces baģlıklı makale ile ilk kez özyüzler yöntemini kullanmıģlardır [11]. Yüz tanıma için daha önce kullanılan yöntemlerde yüz üzerinde bulunması gereken belirleyici noktalardan bahsetmiģtik. Bu noktaları yazılımı geliģtiren kiģi belirliyordu ve bu noktaların seçici olup olmaması önceden bilinemiyordu. Turk ve Pentland, denetimsiz bir öğrenme olan temel bileģenler analizini kullanarak, önemli noktaların çıkarılmasını uygulamaya bırakıyorlar. 7
Özyüzler için, temel bileģenler analizinde kullanılan vektörler yerine elimizde iki boyutlu görüntüler vardır. Bu görüntüleri tek boyutlu bir vektör haline getirip, her bireyin görüntüsünü ayrı bir değer kümesi olarak düģünebiliriz. Bu değerlere temel bileģen analizi iģlemlerini uygulayacağız. Her bireyin, gri ölçeğe aktarılmıģ, histogramı eģitlenmiģ ve yeniden boyutlandırılmıģ görüntülerini tek bir vektör haline getiriyoruz. Böylece m yüksekliğinde ve n geniģliğinde bir görüntü, (mn)x1 uzunluğunda bir vektör oluyor. Birey sayısı kadar vektörü birleģtirip, büyük bir görüntü matrisi elde ediyoruz. Bu matris, (mn) lik görüntülerden ve k kadar bireyden oluģuyorsa, boyutları (mn)x(k) oluyor. Bu büyük matrisin satırları görüntülere, kolonları da bireylere denk geliyor. ġekil 2: Örnek veritabanı görüntülerinin iki boyutlu matrislerinden tek boyutlu vektörlere getirilip, hepsinin tek bir matris altında toplanması. D matrisi (mn) satırdan ve k sütundan oluģmaktadır. Temel bileģenler analizi yönteminin adımlarına göre ortalama görüntü oluģturulup, her görüntü bu değerden çıkartılıyor. Elimizde böylece düzeltilmiģ görüntüler kalıyor. Bu adımdan sonra bu matrisin kovaryans matrisi hesaplanıyor. Bu kovaryans matrisinden birey sayısı kadar özdeğer ve özvektörleri hesaplanıyor. Bu değerler bizim özellik vektörlerimiz olacak. Eğer boyut sayısını düģürmek istersek özdeğeri belli bir değerin altındaki özvektörleri almayabiliriz. DüzeltilmiĢ görüntülerin olduğu matrisi, seçilen özvektörler ile çarptığımızda, bireylerin görüntü bilgilerini özvektörler ile temsil etmiģ oluyoruz. Bu görüntülere özyüzler deniyor. Özyüz değerlerini ilgili görüntülerle çarptığımızda da görüntülerin bu yeni uzaydaki izdüģümlerini elde ediyoruz. 8
Bu noktadan sonra amacımız, yeni gelen görüntülere de aynı iģlemleri uygulayıp, elde edilen değeri var olan görüntülerin değerleri ile karģılaģtırmak olacaktır. Yeni görüntünün izdüģümü hangi görüntüye daha yakınsa, bireyin o kiģi olarak tanındığını söyleyebiliriz. Buradaki yakınlık ölçütü ise iki vektörün öklid uzaklığıdır. Dikkat edilmesi gereken nokta, test edilecek her görüntünün en yakın olduğu bir görüntünün olacağıdır. Belli bir eģik değerinden daha uzak olan görüntüleri tanınmadı olarak belirleyebilmeliyiz. Bunun için görüntü kümesindeki bireylerden farklı görüntüler test edilip, bu değerlerden en yakın olanı eģik değeri olarak verilmektedir. Test edilmek için gelen görüntülerin, bireylerin görüntülerine en yakın değeri bu eģik değerinden daha yakın olunca tanındığını kabul edebiliriz. 4. GERÇEKLEġTĠRME BĠLGĠSĠ Programlama Ortamı ve Kütüphaneler Özyüzler yazılımını gerçeklemek için görüntüleri iģleyebilecek, matrislerin kovaryanslarını, özvektör ve özdeğerlerini hesaplayabilecek bir kütüphaneye ihtiyaç duyulmaktadır. Bu iģlemler için, özgür olarak geliģtirilen OpenCV kütüphanesini kullandık [9]. Bu kütüphane C/C++ programlama dilleri ile çalıģmaktadır. Bu yüzden geri kalan iģlemleri de C++ ile gerçekledik. OpenCV gerek görüntü iģleme yöntemlerinde, gerek matris iģlemlerinde kolaylık sağlamaktadır. Her ne kadar OpenCV ile birlikte bir temel bileģenler analizi metodu gelse de, bu adımlar, özyüzlerin daha özel yapısı sebebiyle adım adım gerçeklenmiģtir. C++ ile birlikte gelen standart Ģablon kütüphanesinden (STL) vector Ģablonu, dizi iģlemlerini kolaylaģtırmak için kullanılmıģtır. Programın AkıĢı Yazılımda görüntü iģleme iģlemleri dıģında, bir yazılım ile kullanıcıya da programı kontrol etme imkanı verilmiģtir. Program baģladığında kullanıcıyı üç seçenek ile karģılamaktadır. Bunlardan ilki, daha sık kullanılacağını düģündüğümüz, Var olan sınıfı aç seçeneğidir. Bu seçenek, sınıfta her gün kullanılacak olan yüz tanıma iģlemini yapacaktır. Burada birden fazla sınıfı desteklediğimiz için, bu seçeneğin ardından var olan sınıfları listelenecek ve ilgili sınıf seçildiğinde o sınıfın görüntüleri hafızaya alınacaktır. ġekil 3: Programın ana menüsü. 9
Yazılım ozyuzdb.txt dosyasında sınıfların isimlerini tutmaktadır. Her sınıfın adı bir satırda yer alacak Ģekilde kaydedilmektedir. Bu sınıfların isimleri ile aynı dosyalarda da sınıflardaki öğrencilerin isimleri yer almaktadır. Her öğrenci yalnızca adıyla kaydedilmiģtir. Her öğrenciye ait beģ görüntü bulunmaktadır. Bu görüntüler programın çalıģtığı data dizininde öğrencinin adına sınıf adı ön eki ve görüntü numarası son ekiyle kaydedilmiģtir. Örneğin A1 sınıfındaki Ahmet isimli bir öğrenci, A1.Ahmet1.png dosya adı ile bu dizinde yer almaktadır. Bu görüntüler, tekrar yüz bulma, histogram eģitleme, gri ölçeğe alma iģlemleri yapılmaması için ön iģleme adımları tamamlanmıģ halde kaydedilmiģlerdir. ġekil 4: Yeni bir öğrencinin kaydedilmesi. Görüntü içinde bulunan yüz, sarı bir kare içine alınmaktadır. BelirlenmiĢ p tuģuna basıldığında görüntü ön iģleme adımlarından geçirilip kaydedilecektir. Var olan sınıf açıldığında, sınıfa ait dosyadan öğrencilerin adları okunur. Sınıf adı ve öğrenci adı kullanılarak, öğrenciye ait beģ adet görüntü kayıtlı dizinden okunur. Bu görüntüler ile sınıftaki öğrencilere ait görüntü matrisi oluģturulur. Daha sonra özyüz iģlemleri gerçekleģtirilir. Özyüzler ile test görüntüleri çalıģtırılıp en az eģik değeri hesaplanır. Daha sonra yazılım kamerayı çalıģtırıp, kameradan gelen her görüntüde yüzü Haar-benzeri özellikler ile bulur, özyüzlerle test eder ve görüntülerden en yakın olanını bulur. Bulduğu uzaklık eģik değerinden küçükse bulduğu öğrenciyi ekrana yazar ve bir daha o öğrenciyi saymaz. Bütün öğrenciler tanındıktan sonra bu iģlem durdurulur, ekrana ve dosyaya yoklama yazdırılır. Yoklama dosyası tarih ve her öğrencinin yoklama bilgisi ile güncellenir. Olmayan öğrenciler için sıfır (0), olan öğrenciler için de bir (1) değeri yazılır. Bu dosyadaki değerler virgülle ayrılır. Bu sayede MS Excel gibi hesap tablo yazılımlarına rahatça aktarılır. 10
Yeni bir sınıf yaratmak istendiğinde, iģleme sınıf adı girilerek baģlanır. Eğer bu isimde bir sınıf yoksa öğrenci isimleri girmeye baģlanır. Öğrenci adı girilince öğrencinin beģ adet görüntüsü çekilir ve bu görüntüler ilgili dizine kaydedilir. Öğrenci adı da sınıf dosyasına kaydedilir. ĠĢlem bitince bu sınıf yüklenir ve tanıma iģlemi baģlar. Yazılımın Gerçeklenmesi OpenCV kütüphanesi kameradan görüntü almayı CvCapture sınıfından bir değiģken ile sağlamaktadır. Bununla birlikte, kamera görüntülerinde Haar-benzeri özellikler ile yüzlerin yerini belirleyebilmek için Haar sınıflandırıcı sınıfı olan CascadeClassifier sınıfından bir değiģken yaratılmalıdır. Tam sayı değiģkenlerini metine çeviren yardımcı bir fonksiyon yazılmıģtır. Bu fonksiyon verilen tam sayı (int) değiģkeni metin (string) olarak döndürmektedir. Bu iģlem için C++ ın stringstream yapıları kullanılmıģtır. Günlük sonuçları virgülle ayrılan dosyaya kaydederken günü ve dersin saatini sabah ve öğle olarak belirten bir yardımcı fonksiyon yazılmıģtır. Bu fonksiyon metin olarak o anki tarihi gün, ay, yıl ve sabah, öğle olarak döndürmektedir. Programın baģlangıç noktası olan main fonksiyonunda, program akıģında belirtilen menüden önce kamera ve sınıflandırma değiģkenleri ilklendirilir. Daha sonra menü tercihine göre ilgili fonksiyonlar çağırılır. Yeni sınıf oluģturulurken kullanıcıdan ilk olarak sınıf ismi istenir. Bu dosyanın varlığı kontrol edildikten sonra dosya yazmak için açılır. Kullanıcı x değerini girene kadar öğrenci isimlerinin girilmesi istenir. Öğrenci ismi girildikten sonra OpenCV ile kameradan görüntüler alınmaya baģlanır. Kameradan alınan her karede sınıflandırıcı ile en büyük yüz aranır. Eğer bulunursa klavyeden beģ milisaniye boyunca girdi beklenir. Bu sırada belirlenen p tuģuna basılırsa görüntü sınıf adı, öğrenci adı ve resim numarası ile dizine kaydedilir. Bir sonraki görüntü için iģlem tekrarlanır. BeĢ görüntü de alındıktan sonra sıradaki kullanıcıya geçilir. Sınıf bilgileri yüklenirken sınıftaki öğrencilerin yer aldığı dosya açılır ve içinden öğrencilerin isimleri okutulup bir metin vektörüne (STL vector sınıfı) atılır. Aynı zamanda her öğrenci ismi için bir yoklama vektörü açılır ve ilk değerleri sıfır (0) verilir. Sınıf ve öğrenci ismi kullanılarak her öğrencinin beģ adet görüntüsü okunur ve OpenCV nin matrisi olan Mat tipi değiģkene kaydedilir. Kaydedilmeden önce, OpenCV nin reshape metodu ile görüntü iki boyuttan tek boyutlu vektör haline dönüģtürülür. Bütün görüntüler okunduktan sonra her satır için ortalama değer bulunur ve bu değer her sütundaki pikselden çıkartılıp düzeltilmiģ görüntüler elde edilir. Ortalama değerlerden de bütün sınıfın öğrencilerinden oluģan ortalama görüntü elde edilir. Kovaryans matrisi ve bu matrise ait özvektör ve özdeğerler, OpenCV nin eigen fonksiyonu ile elde edilir. Elde edilen özdeğerler normalize edilir. Normalize iģlemi, özdeğerlerin toplamını alıp, her özdeğeri bu toplam değerine bölerek elde edilir. Özvektörlerin seçiminde, özdeğerlere bakılır. Normalize özdeğeri 0.005 ten büyük olan özvektörler özellik vektörlerimiz olarak kaydedilir. Bu özellik vektörlerinden özyüzler hesaplanır ve özyüzler kullanılarak her bireyin boyuttaki izdüģüm görüntüleri hesaplanır. 11
Bu izdüģüm görüntüleri elde edildikten sonra tanıma eģik değerini hesaplamak için kontrol görüntüleri ile öklid uzaklıkları hesaplanır. Kontrol görüntülerindeki en küçük değer, eģik değeri olarak alınır. Sınıf görüntüleri ve eģik değeri hazır olduktan sonra kameradan görüntüler alınmaya baģlanır. Görüntüleri kaydetme ekranında olduğu gibi kameradan gelen görüntülerde yüzler Haar sınıflandırıcı ile bulunur. Görüntü gri ölçekli hale getirilir, histogramı eģitlendirilir ve yeniden boyutlandırılır. Elde edilmiģ bu görüntü, test ve sınıf görüntülerinde yapıldığı gibi iki boyutlu matristen, tek boyutlu vektöre çevrilir. Daha sonra sınıf görüntülerinin ortalamasından çıkartılır. Bu fark görüntüsü özyüzlerle çarpılıp özyüz boyutlarındaki izdüģümü elde edilir. Bu izdüģüm, kayıtlı görüntülerin izdüģümleri ile karģılaģtırılıp, aralarından en yakın öklid uzaklığı olan öğrenciyle eģlenir. Eğer bu öğrencinin görüntüsüyle olan uzaklık eģik değerinden düģükse, görüntünün o öğrenciye ait olduğunu söyleriz. Öğrenciye ait indis numarasını alınır, yoklama vektörünü de bu indis sayesinde güncellenir. Bütün sınıf bittikten sonra, belirlenen q tuģu ile sınıf yoklaması ekrana ve sınıf adıyla yoklama son eki isimli dosyaya eklenir. 5. SONUÇ Yazılım geliģtirilmesi sırasında dört öğrenciye kadar tam sonuç verse de, özyüzlerin performansını test etmek için AT&T Laboratuvarlarının The Database of Faces veritabanı kullanılmıģtır [1]. Bu veritabanında kırk bireye ait onar görüntü bulunmaktadır. Bu görüntülerden bir tanesi test, diğerleri de özyüzler için kullanılmıģtır. Yazılım kırk adet test görüntüsünde %92.5 luk baģarım elde etmiģtir. 40 kiģi içinden bir bireyi yanlıģ tanımıģ, diğer iki kiģiyi eģleģtirememiģtir. Test veritabanı iģlenirken, 360 adet özvektör içerisinden veriyi en iyi gösteren 25 özvektör seçilmiģtir. Bu sayede sınıfa ait bilgi yaklaģık olarak %7 sine kadar düģürülmüģtür. 6. ĠRDELEME Deney sonucunda yüksek baģarım ile etkili bir yüz tanıma sistemi elde edilmiģ ve bu sistem sınıf yoklaması olarak gerçeklenmiģtir. Yazılım Windows iģletim sisteminde geliģtirilmiģ olsa da, kullanılan kütüphanelerin diğer platformlarda olması sebebiyle Linux ve MacOS iģletim sistemlerinde de sorunsuz çalıģtığı gözlenmiģtir. Ġhtiyacı olan kameranın belli bir özelliği yoktur, kullanıcı tipi bir web kamerası ile iģlemlerini gerçekleģtirmiģtir. Kullanılan yöntem, gerçekleme kolaylığı, hızı ve boyut indirgeme özelliği sayesinde etkili bir çözüm sunmaktadır. Ön iģleme adımları ile ıģıklandırma gibi sorunların üzerinden gelinmiģ olsa da, yoklamanın yapılacağı alanda çekimlerin yapılması doğru cevap oranını arttırmaktadır. EĢik değeri hesaplama kısmı içerdiği belirsizlikten dolayı en zor kısımlardan biridir. EĢik değerinin en önemli özelliği, kameradan alınan görüntüde Haar sınıflandırıcısının bazen arkaplandaki ıģık oyunlarına yenik düģerek yanlıģ görüntüler iletmesidir. Yüz olmayan bu görüntülerin herhangi bir kiģi olarak tanınması programın yanlıģ sayısını arttırmaktadır. Diğer yandan, eģik değeri olmazsa, sınıfta olmayan birinin, sınıfta kayıtlı olan kiģilere en çok benzeyen olarak belirlenmesi hatası ile karģılaģırız. Bu iki durumu da eģik değeri ile kontrol edebilsek de, eģik değeri için bir denkleme dayalı çözüm yoktur. Bu yüzden sınıfta bulunmayan görüntüler ile 12
test edip, eģik değerini bu değerlerin en küçüğü olarak ayarladık. Bu durum ise bize, test çalıģmamızda da görüleceği üzere, veritabanındaki kiģilerin tanınmaması olarak geri döndü. Hassas olan bu noktayı iyi ayarlamak için farklı görüntüler ile test yapılabilir. KAYNAKÇA [1] AT&T Laboratories Cambridge, The Database of Faces, http://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html, 2002 [2] Aurora, The Face of Biometrics, http://www.facerec.com/, 14 Ocak 2013 tarihinde eriģildi. [3] Brunelli, R., Poggio, T., 1993. Face recognition: features versus templates. IEEE Transactions on Pattern Analysis and Machine Intelligence 15, 1042 1052. [4] Eleyan, A., Demirel, H., 2005. Face Recognition System Based on PCA and Feedforward Neural Networks, in: Cabestany, J., Prieto, A., Sandoval, F. (Eds.), Computational Intelligence and Bioinspired Systems, Lecture Notes in Computer Science. Springer Berlin Heidelberg, pp. 935 942. [5] Jafri, R., Arabnia, H.R., n.d. A Survey of Face Recognition Techniques. [6] Kimaldi, School Time&Attendance control using face recognition terminals, http://www.kimaldi.com/kimaldi_eng/sectors/universities/school_time_attendance_control_using _face_recognition_terminals, 14 Ocak 2013 tarihinde eriģildi. [7] Lawrence, S., Giles, C.L., Tsoi, A.C., Back, A.D., 1997. Face recognition: a convolutional neural-network approach. IEEE Transactions on Neural Networks 8, 98 113. [8] Lindsay I. Smith, A tutorial on Principal Components Analysis, University of Otago, New Zealand 2002. [9] OpenCV, Open Source Computer Vision, http://www.opencv.org/ [10] Takeo Kanade, Picture Processing System by Computer Complex and Recognition of Human Faces, doctoral dissertation, Kyoto University, November, 1973 [11] Turk, M.A., Pentland, A.P., 1991. Face recognition using eigenfaces, in:, IEEE Computer Society Conference on Computer Vision and Pattern Recognition, 1991. Proceedings CVPR 91. Presented at the, IEEE Computer Society Conference on Computer Vision and Pattern Recognition, 1991. Proceedings CVPR 91, pp. 586 591. [12] Viola, P., Jones, M., 2001. Rapid object detection using a boosted cascade of simple features, in: Proceedings of the 2001 IEEE Computer Society Conference on Computer Vision and Pattern Recognition, 2001. CVPR 2001. Presented at the Proceedings of the 2001 IEEE Computer Society Conference on Computer Vision and Pattern Recognition, 2001. CVPR 2001, pp. I 511 I 518 vol.1. [13] Gonzalez, R. C., Woods, R.E., Digital Image Processing, Prentice Hall, 2007. 13
TEġEKKÜR Proje çalıģmamızın yönlendirilmesi ve sonuçlandırılmasında büyük emeği geçen Ege Üniversitesi, Uluslararası Bilgisayar Enstitüsü, Öğretim Görevlisi, Kaya OĞUZ a, proje danıģmanımız Selvinaz GÖKALP ve Bilim Kurulu EĢ BaĢkanı (Matematik) Dr. Gizem GÜNEL e, bugüne dek yetiģmemizde katkısı olan değerli öğretmenlerimize, her zaman yanımda olan ve bizleri destekleyen, yüreklendiren ailelerimize teģekkür ederiz. 14