Şekil Tanıma Dersi 1. Ödev Raporu



Benzer belgeler
... ROBOTİK VE KODLAMA EĞİTİMİ ÇERÇEVESİNDE ÖĞRETİM YILI BİLİŞİM TEKNOLOJİLERİ DERSİ ÜNİTELENDİRİLMİŞ YILLIK DERS PLANI

R ile Programlamaya Giriş ve Uygulamalar

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

Yazılım Nedir? 2. Yazılımın Tarihçesi 3. Yazılım Grupları 4 Sistem Yazılımları 4 Kullanıcı Yazılımları 5. Yazılımın Önemi 6

Yazılım Mühendisliği 1

Dosyalama olarak: HTML, PDF, DOC ve XLS dosya türlerini kullanabilirsiniz. Kütüphane Modülü açıldığında Vet.Asistanı Kütüphanesi ekrana gelmektedir.

YZM 2116 Veri Yapıları

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 2 DERSİ LAB. ÖDEVİ

Tarih Saat Modül Adı Öğretim Üyesi. 01/05/2018 Salı 3 Bilgisayar Bilimlerine Giriş Doç. Dr. Hacer Karacan

MATLAB a GİRİŞ. Doç. Dr. Mehmet İTİK. Karadeniz Teknik Üniversitesi Makine Mühendisliği Bölümü

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

GÖRSEL PROGRALAMA HAFTA 2 PROGRAMLAMA DİLLERİNE GİRİŞ

13 Aralık Đlgili Versiyon/lar : ETA:SQL, ETA:V.8-SQL. Đlgili Modül/ler : Raporlar. Kullanıcı Tanımlı Raporlar Bölümünden Yapabildiklerimiz

ALGORİTMA TASARIMI VE SCRATCH UYGULAMASI

12 TBT / WEB TASARIM ve PROGRAMLAMA ( Not 3 )

BİL BİLGİSAYAR PROGRAMLAMA (JAVA)

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

Makine Öğrenmesi 2. hafta

Doğu Akdeniz Üniversitesi Bilgisayar Mühendisliği Bölümü. BLGM 318 Ara Sınavı Đlkbahar Dönemi 13 Nisan Ad, Soyad Öğrenci No.

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Php İle Mysql Veritabanından Bilgi Çekme

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

DENİZ HARP OKULU BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

MUĞLA SITKI KOÇMAN ÜNİVERSİTESİ. ECTS Info Pack. ECTS Bilgi Paketi Çalışmaları. Bilgi İşlem Daire Başkanlığı YAZILIM-WEB GRUBU

BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

BLM 210 PROGRAMLAMA LABORATUVARI II PROJELERİ

Üst Düzey Programlama

2- Kontrol Sil En Öne Getir En Arkaya Gönder Resim Özellikler: Genel Özellikler...

Programlama Dillerinde Kullanılan Veri Tipleri

Özyineleme (Recursion)

Algoritma ve Akış Diyagramları

AVRASYA UNIVERSITY. Dersin Verildiği Düzey Ön Lisans (X ) Lisans ( ) Yüksek Lisans( ) Doktora( )

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

BMT 101 Algoritma ve Programlama I 3. Hafta. Yük. Müh. Köksal GÜNDOĞDU 1

4. Bağlantı (Köprü) Oluşturma

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

ALGORİTMA ANALİZİ. Cumhuriyet Üniversitesi Bilgisayar Mühendisliği Bölümü

Java da İstemci Tarafı Uygulamalar

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

SAKARYA ÜNİVERSİTESİ BİLGİSAYAR VE BİLİŞİM BİLİMLERİ FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ GÜZ DÖNEMİ PROGRAMLAMAYA GİRİŞ DERSİ

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

VERİ YAPILARI VE PROGRAMLAMA (BTP104)

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf


ARDIŞIL DİYAGRAM YAPI DİYAGRAMI. Sistem Analizi ve Tasarımı Dersi

ALGORİTMA VE PROGRAMLAMA II

YZM ALGORİTMA ANALİZİ VE TASARIM DERS#1: ALGORİTMA KAVRAMI

Algoritmalar ve Programlama. Algoritma

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

Klavyeden Basit Giriş/Çıkış İşlemleri

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

İleri Diferansiyel Denklemler

Program ile birlikte 4 adet örnek Excel dosyası ve bu dosyaları transfer etmekte kullanılan örnek dizaynlar verilmektedir.

ALGORİTMA VE PROGRAMLAMA I

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 1 DERSİ LAB. ÖDEVİ

KOCAELİ ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ BLM209 PROGRAMLAMA LAB. I PROJE 3 PROJE SÜRESİ:

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 7. Bölüm Metot Tanımlama ve Kullanma

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

BOOTLOADER MANUAL DOCUMENT

SIMAN KULLANIM KILAVUZU

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

VERİ YAPILARI DERS NOTLARI BÖLÜM 1 GİRİŞ. Yard. Doç. Dr. Deniz KILINÇ

1.1. Yazılım Geliştirme Süreci

İMGE İŞLEME Ders-2. İmge Dosya Tipleri ve Temel İşlemler. (Yrd. Doç. Dr. M. Kemal GÜLLÜ)

PROGRAMLAMA DERSİ 1. İNTERNET

BİLGİSAYAR PROGRAMLAMA DERSİ

Görsel Programlama DERS 01. Görsel Programlama - Ders01/ 1

Arasınav Örnek Soruları Bahar 2018

T.C. MARDİN ARTUKLU ÜNİVERSİTESİ MİDYAT MESLEK YÜKSEKOKULU BİLGİSAYAR PROGRAMCILIĞI (UZAKTAN ÖĞRETİM) ÖNLİSANS PROGRAMI Eğitim Öğretim Yılı

İşletim Sistemlerine Giriş

ACS434 kurulum yardımcısı. LMS14 / LMS15 için parametre ve veri dönüştürülmesi için PC yazılımı. Kurlum ve çalıştırma talimatları

BİLGİSAYAR PROGRAMLAMA MATLAB

3. Bölüm Algoritmalar

AKIŞ ŞEMASI AKIŞ ŞEMASI AKIŞ ŞEMASI ŞEKİLLERİ GİRİŞ

Robot İzleme (Robot Tracing)

Dersin Sorumlusu: Yrd. Doç. Dr. Birol SOYSAL. Sunumları Hazırlayan: Doç. Dr. Bülent ÇAKMAK

Programlama Giriş. 17 Ekim 2015 Cumartesi Yrd. Doç. Dr. Mustafa YANARTAŞ 1

Ağrı İbrahim Çeçen Üniversitesi

ATATÜRK ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ BIM 205 GÖRSEL PROGRAMLAMA GÜZ DÖNEMİ ÖDEV-1

Eastern Mediterranean University Faculty of Arts & Sciences -- Department Of Mathematics BİLG213 BİLGİSAYAR PROGRAMLAMAYA GİRİŞ

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Manisa Celal Bayar Üniversitesi Yazılım Mühendisliği Bölümü YZM Veri Yapıları Dersi. Proje#2

AKILLI TATIL PLANLAMA SISTEMI

EHM381 ANALOG HABERLEŞME DÖNEM PROJESİ

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 6. Yrd.Doç.Dr.Hacer Karacan

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

Proje/Sipariş/İş Emri (PSI) Bazında Maliyet Analizi

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)

Windows Live ID ve parolanızı giriniz.

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

İÇERİK PROGRAMLAMAYA GİRİŞ ALGORİTMA AKIŞ DİYAGRAMLARI PROGRAMLAMA DİLLERİ JAVA DİLİNİN YAPISI JAVA DA KULLANILAN VERİ TİPLERİ JAVA DA PROGRAM YAZMA

WebInstaller. 1. Kurulum Đçin Gereksinimler

ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

EDI MIGROS (Sipariş) LOGO ENTEGRASYONU

BİH 605 Bilgi Teknolojisi Bahar Dönemi 2015

Yukardaki gibi sonsuz döngülü programlara Ctrl+Break tuş takımı ile müdahale edilmesi gerekir, aksi halde program sonsuz döngüye girer.


Transkript:

Şekil Tanıma Dersi 1. Ödev Raporu Yazan : Şadi Evren ŞEKER (www.sadievrenseker.com,ses@sadievrenseker.com) Dersin Hocası: M. Elif Karslıgil (http://www.ce.yildiz.edu.tr/myindex.php?id=6,elif@ce.yildiz.edu.tr) Teşekkür Bu projenin yapılmasında, derslerinden faydalandığım Yrd. Doç. Elif Karslıgil e teşekkür edeirm. Amaç Bu projenin amacı, verilen bir resim kümesi üzerinde öz vektörler (eigen vectorler ) kullanılarak verilen grup resimlerinin kullanılarak öz yüzlerini (eigen face) oluşturmaktır. Giriş Projede 50 kişiye ait 10 ar resimden oluşan 500 resimlik bir havuz verilmiş olup bu havuzun 10 arlı resimler halinde öz yüzlerinin çıkartılması istenmiştir. Bunun için hazır olan bir hesaplama paketinden faydalanılmış ve gruplama, yığın işlemleri (batch) ve resim işlemleri bu paketin üzerine yazılmıştır. Bu raporda, hazırlanmış olan bu ilave yazılımlar ve izlenilen yol anlatılacaktır. 1 Ortamın belirlenmesi ve hazırlanması Yazılım ortamı olarak, geçmiş tecrübelere dayanarak, JAVA programlama dili seçilmiştir. Yazılımın taşıması gereken ve alt kütüphane olarak kullanılacak önemli bir kısım kaynak kod, http://darnok.com/ adresinde bulunan Konrad Rzeszutek in sitesinden temin edilmiştir. Ayrıca resim işleme ve resim dosyalarını açıp kaydetme işlemleri için JMF 1 (JAVA Media Framework) paketi yüklenmiştir. Çok büyük miktardaki matriksler ile uğraşıldığı ve standart JDK içerisinde bulunan matrix yapısının sağlamış olduğu methodlar 1 JMF paketinin detayları için java nın ana sayfası olan http://java.sun.com/products/javamedia/jmf/index.jsp adresine bakılabilir.

yetersiz olduğu için, JAMA 2 (JAVA Matrix Package) paketi de kurulmuştur. 2 Yazılımın tasarımı Yazılımı bir kara kutu (blackbox) olarak modelleyecek olursak, yazılımın girdileri, bir dizin içerisinde bulunan ve isimlerine göre sıralanmış, 500 adet resimden oluşmaktadır. Kara kutunun çıkışında ise 50 adet öz yüzden oluşan resim dosyası beklenmektedir. İşlenecek resimler (500 adet) Proje (Kara Kutu) Fig. 1 Sistemin kara kutu modeli Yukarıdaki figürde, giriş ve çıkış bilgileri gösterilmiştir. Buna göre giriş ve çıkış bilgilerinin özel durumları ve nasıl işlendiklerini inceleyelim. Öz yüzler (her kişi için 1 adet) 2.1 Giriş değerleri Giriş resim dosyalarının özelliği kişilere göre numaralandırılmış olmasıdır. Örneğin 7. kişinin resimlerinin hepsi 07 ismi ile 2 JAMA paketi için http://math.nist.gov/javanumerics/jama/ adresine başvurulabilir. başlamakta, sonrasında ise 2 sayı ile bu kişinin kaçıncı resmi olduğunu tutmaktadır. Buna göre 7. kişinin 3. resmi 0703 ismine sahip olmalıdır. Toplamda 500 adet resim olacağı düşünülür ve her kişiye ait 10 adet resim olduğu hesaplanırsa, resimlerin matrix bilgilerini çıkaran ve resim okuyan modül için, 10ar olarak grup (bundle) oluşturmasını söyleyebiliriz. Burada karşılaşılacak risk, eğitim setinin içinden bir resmin ileride test bilgisi için kullanılabilecek olması ve resim sayılarının dengesizliğidir. Bu sorunu çözmek için, test resmi ile karşılaşılması durumunda bu resmi atlaması gerekmektedir. Giriş değerleri ile ilgili bir sorun da bu değerlerin pgm yapısında (format) verilmiş olmasıdır. Bu dosya yapısını JAVA ile okumanın yolu, bu proje kapsamında ne yazık ki bulunamamıştır. Internet te 3 arama sonucu bulunan bir sitede Fransızca olarak hazırlanmış olan bir paket indirilmiş, ancak ne yazık ki çalıştırmaya muvaffak olunamamıştır. Bu yüzden JAVA ile uyumlu olan JPG dosya yapısı proje kapsamında kodlanmış ve giriş değeri olarak verilen dosyaların hepsi pgm den jpg ye çevrilmiştir. 3 Projenin detaylı tanımı (Fransızca) ve kodları http://www.enseignement.polytechnique.fr/profs/inf ormatique/philippe.chassignet/pgm/pgm_java.htm l adresinde bulunmaktadır.

2.2 Çıkış Değerleri Projenin çıkış değeri olarak, 50 ayrı kişinin öz yüzleri istenmektedir. Bu resimler, proje kapsamında işlendikten sonra ekranda bir java frame (Java frame ler, java programlama dilinde yazılan ve işletim sisteminde bir pencere olarak gösterilen java component (bileşen)leridir. Programın çıktısı olarak bu değerler ekranda gösterilmiştir. ) içerisinde gösterilmekte ve bir resim dosyasına kaydedilmektedir. 3 Projenin gerçeklemesi (kodlanması) Bu bölüme kadar tasarımı anlatılan projenin kodlanması ve gerçekleştirilmesi bu bölümde anlatılacaktır. Projenin kodlaması daha öncede bahsedildiği gibi JAVA dilinde yapılmış olup, kodda bulunan kritik noktalara, bu bölümün içerisinde alınmıştır. Ayrıca karşılaşılan güçlükler ve çözümleri de bu bölümde anlatılmaktadır. Fig 2. Projenin kapalı UML diyagramı

Yukarıdaki figürde görülen sınıf hiyerarşisinde bulunan nesnelerin tanımları aşağıdaki şekildedir. TestFaceRecognition: Bu sınıf, ana sınıfımız olup, eigenfacecreator class ını çağırmaktadır. Bu sayede, verilen parametreleri işlemiş ve eigenfacecreator, class ının işleyebileceği şekle getirmiş olur. EigenFaceCreator: Bu sınıfın görevi, yukarıdaki kod parçası bu durumu tespit edip, içinde bulunduğu döngüyü atlatmaktadır. Fig. 3. Örnek giriş resmi Giriş değerlerinden örnek bir resim yukarıdaki figürde gösterilmiştir Proje tasarımına bağlı olarak, JAVA nın da nesne yönelimli (object oriented) bir dil olmasından faydalanarak, yukarıdaki sınıf hiyerarşisi (class hierarchy) modeli çıkartılmıştır. 3.1 Giriş değerlerini okuyan modlün gerçeklemesi Giriş değerlerinin atlamasını söyleyen bir koşul yazılmıştır. if(sadifile.equals((string)fil enames.get(j+magic_setnr*i))){ System.out.println("ayni dosyayi buldum train sete koymuyorum"); set[j] = (String)filenames.get(j- 1+MAGIC_SETNR*i); System.out.println(" - "+set[j]); continue; } 3.2 Öz Yüz (Eigenface) algoritmasının gerçeklemesi Kullanılan algoritmanın pseudo kodu aşağıdaki şekildedir 4 : Fig. 4. Eigen Face Algoritması Buna göre, aranacak olan resim, bir eğitim seti için uygun olan öz yüzlere uzaklığına bakılarak tespit edilmektedir. Burada ortaya çıkan problem, uzaklık ölçümü için mümkün olan yollardan birisinin seçilmesidir. İsmi geçen makalede her ne kadar Euclidean veya Mahalanobis uzaklıklarının kullanılması önerilse de, projenin bu kısmı için bir şart olmadığından basit bir vector resim farkı 4 Algoritma, Preserving Privacy by Deidentifying Facial Images, Elaine Newton Latanya Sweeney Bradley Malin, Carnegie Mellon University, 2003, makalesinden alınmıştır.

alınarak bu modül yazılmıştır. Kodu aşağıdaki şekildedir: satır 1.double[] distance = new double[magic_nr]; satır 2.double[] mindistance = new double[magic_nr]; satır 3.idx = 0; satır 4.for (image = 0; image < nrfaces; image++) { satır 5.temp = 0.0; satır 6.for (j = 0; j < MAGIC_NR; j++) { satır 7.distance[j] = Math.abs(input_wk[j] - wk[image][j]); satır 8.//System.out.print(distance[ j]+"\t"); satır 9.} satır 10.if (image == 0) satır 11.System.arraycopy(distance,0,minDistance,0,MAGIC_NR); satır 12.if (sum(mindistance) > sum(distance)) { satır 13.this.idx = image; satır 14.System.arraycopy(distance,0,minDistance,0,MAGIC_NR); satır 15.} satır 16.} Yukarıdaki figürde görüldüğü üzere, her bir resimin kendisi için hesaplanan eigen vector değerinden çıkarılması sonucu bulunan değerlerin toplamı kadar uzaklıkta olmaktadır. Bu değerler daha sonra hesaplamada kolaylık sağlaması açısından eğitim dosyalarının bulunduğu dizinde bir.cache dosyası olarak saklanamaktadır. Şayet program bu dosyayı bulursa, tekrar hesaplama yapmamakta, hazır hesaplamaları kullanmaktadır. 3.3 Çıkış değerlerini işleyen modül Proje nin hesaplama ve öz yüzleri bulmasından sonra, projenin bu sonuçlarını gösteren bir modül yazılması ihtiyacı doğmuştur. Ayrıca bulunan değerler, bir double dizide (array) bulunduğu için bu değerlerin direk olarak ekran görülmesini sağlayan ilave bir sınıf (class) yazılmış olup bu sınıf kullanılmıştır. Kısaca, JAVA da ekrana resim basmak için kullanılan canvas sınıfından nesneler kullanılmıştır. Ancak bu canvas sınıfının içinde bulunan Image nesnesi, dosya kaydetme işlemleri için kullanılan BufferedImage nesnesi ile birbirine dönüşememektedir. Bunu çözmek için geçici bir graphics2d objesi yapılmış ve bunun içine resim çizdirilerek sonuç, dosyaya aktarılmıştır.

satır 1.memImage = createimage(new MemoryImageSource(width, height, pix, 0, width)); satır 2.BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB) ; satır 3.Graphics2D g2 = image.creategraphics(); satır 4.paint(g2); satır 5.g2.dispose(); satır 6.try{ satır 7.ImageIO.write(image, "png", new File(""+id+".png")); satır 8.}catch(IOException e){} Yukarıdaki kod parçasında, 1. satırda, canvas içerisine yüklü olan resim parçası, hafıza görüntüsü olarak saklanıyor. 2. satırda BufferedImage tipindeki class tan yapılmış olan bir nesne içerinse bu hafız resmi büyüklüğünde bir yer açılıyor. Daha sonra 3. ve 4. satırlarda bu resimden oluşturulan graphics2d nesnesinin içerisine hafızada bulunan resim çiziliyor. Daha sonra oluşturulan bu resim dosyaya basılıyor. Dikkat edilecek bir diğer nokta ise, oluşturulan bu resimlerin dosya isimlerinin verilmesidir. Dosya isimleri öz yüzü oluşturulan kişinin numarasıyla atanmaktadır ve bu bilgi, sisteme dosya okuyan modülden buraya kadar taşınmaktadır. Fig. 5. Örnek çıkış resmi 4 Sonuç Proje kapsamında, resim işleme işlemleri için bir yazılım geliştirilmiş, öz resimlerin nasıl hesaplanacağı, ve mesafe hesapla yöntemleri incelenmiş ve yapılan araştırmalar sonucunda elde edilen bilgiler ile bir yazılım geliştirilmiştir. Yazılımın çıktısının renkli bir resim olması, beklenmeyen bir durumdur ancak bunun resimleri pgm formatından jpg formatına çevirmekten kaynaklandığı tahmin edilmektedir. Ayrıca her ne kadar projenin amacı yüz tanıma işlemi olmasa da, oneagainst-all metodu kullanılarak basit bir tanıma işlemi yazılmış ancak mesafe hesaplama fonksiyonlarının tam olmamasından dolayı başarı elde edilememiştir. Sonuç olarak bu proje sayesinde resim işleme ve biometrik konusuna bir giriş yapılmış olunup burada öğrenilen bilgiler ile konunun daha da detaylı öğrenilmesinin yolu açılmış oluyor.