• Sonuç bulunamadı

3. MATERYAL VE YÖNTEM

3.10 GeliĢtirilen Makine Görme Yazılımı

3.10.1. Yazılım akıĢ diyagramı

Programın yanlıĢ tespitlerde bulunmasını engellemek amacıyla kabadan inceye bir mimari kullanılmıĢtır. (Brandt ve ark., 2004) çalıĢmasında da benzeri bir yaklaĢım kullanılarak genelden özele doğru bir iĢlem sırası gerçekleĢtirilmiĢtir. Bu mimaride öncelikle alınan görüntüdeki yüz resmi bulunmaktadır. Ardından gözler bu resim içerisinde aranmaktadır. Böylelikle programın çalıĢma hızı artmıĢ ve hatalı tespitlerin önüne geçilmiĢtir.

ġekil 3.18’de geliĢtirilen yazılımın akıĢ diyagramı görülmektedir. Bahsedilen kabadan inceye mimarinin uygulanması sonrasında tespit edilen gözlerin kırpılma serisi kural tabanıyla karĢılaĢtırılmaktadır. Bunun ardından kırpma serisi ile eĢleĢen mesajlar karĢı tarafa gönderilmektedir.

Göz kırpma örnekleme zamanı program içerisinde ayarlanarak kiĢilerin kullanım özelliklerine göre ayarlanabilecek Ģekilde tasarlanmıĢtır. Böylece istenirse kırpma serileri yavaĢ, istenirse hızlı bir Ģekilde kiĢiselleĢtirilebilir olarak sisteme girilmektedir. Kullanıcının programı olabildiğince kendisine adapte edebilmesi amacıyla kiĢiselleĢtirilebilir öğelere yer verilmiĢtir.

ġekil 3.18. Makine görme yazılımının akıĢ diyagramı

Sözde kod (pseudocode), bir bilgisayar programı veya algoritmasının, çalıĢma Ģeklini tanımlayan, yüksek seviyeli ifadesidir. Kaba kod veya yalancı kod olarak ta adlandırılmaktadır. Bir programın geliĢtirilmesi sürecinde, kodlama aĢamasına geçilmeden önce sözde kodun oluĢturulması programın daha iyi organize edilebilmesini ve anlaĢılmasını sağlar. Makine görme yazılımının sözde kod Ģekli aĢağıda verilmiĢtir.

Başlangıç

Kameradan Görüntü Yakalama

Haar Sınıflayıcı ile Yüz resimlerinin Tespiti Yüz Resmi İçerisinde Göz Tespiti Görüntüde Yüz Var mı? Evet Hayır Görüntüde Göz Var mı? Hayır Evet 1 1 Göz Resimlerinin Çerçeve içine alınması ve çıkarım Göz Kırpma Algoritmasının Uygulanması Göz Kapama Zamanlayıcılarının Güncellenmesi Zamanlayıcı Çıkışlarının Kural Tabanıyla Karşılaştırılması Eşleşen Kurallara İlişkin Mesajın Alıcıya Gönderilmesi

Prosedür resim_yakalama() Begin

1. Kamera tanımla

2. yakalanan_resim = Resim yakala 3. Geri döndür (yakalanan_resim) End

Prosedür özellik_çıkarımı (kullanıcı_resmi) Begin

1. Haar sınıflayıcı için dosya yükle (yüz.xml)

2. yüz_resmi = Haar sınıflayıcı çalıĢtır (kullanıcı_resmi, yüz.xml) 3. Haar sınıflayıcı için dosya yükle (göz.xml)

4. çıkarılan_göz_resmi = Haar sınıflayıcı çalıĢtır (yüz_resmi, göz.xml) 5. Geri döndür (çıkarılan_göz_resmi)

End

Prosedür kırpma_tespiti(göz_resmi) Begin

1. göz_resmi = Resim iyileĢtirme fonksiyonlarını uygula(göz_resmi) 2. Dairesel Hough dönüĢümü uygula(göz_resmi)

3. Eğer daire tespit edildiyse kırpma_olayı = 1 4. Geri döndür(kırpma_olayı)

End

Prosedür komut_yakalama(kırpma) Begin

1. Eğer kırpma = komut_dizisi[indis] ise indis = indis + 1 2. Eğer kırpma <> komut_dizisi[indis] ise indis = 0

3. Eğer indis = maksimum_dizi_elemanı_sayısı + 1 ise komut mesajını gönder 4. Geri dön

Prosedür form_iĢlemleri() Begin

1. Eğer çıkıĢ butonu tıklanırsa formu kapat

2. Eğer resim kayıt butonu tıklanırsa ekran görüntüsünü kaydet 3. Eğer zamanlama butonu tıklanırsa zamanı düzenle ve görüntüle 4. Geri dön

End

Program göz_kırpma_iletiĢim_sistemi Begin

1. DeğiĢken tanımlamalarının yapılması 2. kare = Resim_yakalama() 3. resim_göz = Özellik_çıkarımı(kare) 4. komut = Kırpma_tespiti(resim_göz) 5. Komut_yakalama (komut) 6. Form_iĢlemleri() 7. 2. Adıma git End

Kaba kod içerisinde, program modülleri ayrı fonksiyonlar Ģeklinde tanımlanmıĢ ve en son olarak ana programa yer verilmiĢtir. Prosedürler bu ana program içerisinde sırasıyla kullanılmıĢtır. Ana program kendi içerisinde butonlarla son verilen bir sonsuz döngü oluĢturur.

Ġlk adım olarak değiĢken tanımlamaları ve değiĢkenlere programın baĢında almaları gereken ilk değerler verilmiĢtir. Ardından tek karelik resim yakalayan prosedür yürütülür. Bu resim üzerinde yüz ve ardından gözlerin tespit edildiği özellik çıkarımı yapılır. Yakalanan göz resimlerinden kırpma özelliği hesaplanır ve bu kırpma da komut dizisiyle karĢılaĢtırılır. Komut dizisinin tüm elemanlarının sağlanması ardından komuta iliĢkin mesaj iletiĢim kanallarına gönderilir.

Burada, kullanılan fonksiyonlara biraz daha yakından bakabilmek için her birinin içeriği açıklanacaktır.

Resim yakalama fonksiyonu bilgisayara bağlanmıĢ olan kameralardan birini kullanarak görüntü elde etme iĢine yaramaktadır. Kullanılacak kamera bu aĢamada belirlenir. Ardından tek bir kare yakalanarak fonksiyondan geri döndürülür. Ana

fonksiyondan görülebileceği gibi bu fonksiyondan geri döndürülen veri özellik çıkarımı fonksiyonunda kullanılmaktadır.

Özellik çıkarımı fonksiyonunun amacı kendisine verilen görüntüden göz resimlerini çıkarıp geri döndürmektetir. Programda kullanılan kabadan inceye mimari gereğince önce alınan görüntü yüz ögelerine karĢı taranıyor. Bu iĢlem Haar kaskad sınıflayıcı kullanılarak yapılmaktadır. Ardından bu fonksiyon içerisinde yine Haar sınıflayıcı kullanılarak, bu kez göz resimleri tespit edilmektedir. Haar sınıflayıcıları kullanmadan önce, sınıflayıcının temel alacağı özellikler xml uzantılı dosyalarla tanımlanmaktadır. En son olarak tespit edilen göz resimleri fonksiyondan geri döndürülmektedir. Fonksiyonun çıktısı olan bu değer kırpma tespiti fonksiyonunda kullanılmaktadır.

Kırpma tespiti fonksiyonu, kendisine girdi olarak gönderilen göz resimlerinin açık mı, yoksa kapalı göze mi ait olduğunu belirlemektedir. Bunu yaparken öncelikle gelen resim iyileĢtirme fonksiyonlarına tabi tutulmaktadır. Bu fonksiyonlar arasında, gri tona çevirme, histogram eĢitleme ve bulanıklık filtresi gibi fonksiyonlar vardır. Ön iĢlemlerden geçirilen resim ardından dairesel Hough dönüĢümüne tabi tutulur. Burada kullanılan Hough dönüĢüm fonksiyonuna, belirlenen objelerin minimum uzaklıkları, minimum ve maksimum daire yarıçapları gibi veriler girilmektedir. Kırpma tespiti fonksiyonu kırma varsa “0” yoksa “1” Ģekilinde bayrak olarak nitelendirilebilecek, bir bitlik bir bilgi üretir. Bu bilgi komut yakalama fonksiyonunda kullanılır.

Komut yakalama fonksiyonu, yakalanan göz kırpma dizilerini programda belirlenen komut dizileriyle karĢılaĢtırır. Bunu yaparken her komuta karĢılık bir indis kullanır ve kendisine gelen kırpma bayrak verisine göre bu indisin değerini bir artırıp sıradaki komut elemanını kontrol eder ya da indisi sıfırlar. Bu iĢlem, kırpma bayrağının indisin gösterdiği komut dizisi elemanıyla uyuĢup uyuĢmamasına göre yapılır. Eğer kırpma, dizi elemanıyla uyuĢuyorsa bir sonraki örnekleme zamanında diğer elemanın kontrol edilmesi için indis değeri artırılır. Fakat komut dizisinin herhangi bir yerinde, indisin gösterdiği dizi elemanıyla, kırpma tespiti fonksiyonundan gelen veri örtüĢmüyorsa bu durumda indis değeri sıfırlanmaktadır. Ġndis değerinin sıfırlanması tekrardan, göz kırpma komutu dizisinin ilk elemanının aranmaya baĢlanması anlamına gelir. Kullanıcı komutu vermeye baĢtan baĢlamalıdır. Eğer indis değeri dizi elemanı sayısının bir fazlasına ulaĢırsa, bu durum tüm dizi elemanlarının doğru olarak göz kırpma komutları vasıtasıyla verildiği anlamına gelir. Bu aĢamaya gelindiğinde indis sıfırlanır ve komut dizisiyle ilgili metin mesajı iletiĢim kanalıyla karĢıdaki hedef cihaza

gönderilir. GeliĢtirilen sistemde, öntanımlı göz kırpma komutları ve bu komutların verilmesinden sonra gönderilecek mesajlar veya yapılacak iĢler tanımlanmıĢtır. Bunlar daha sonra kullanıcı isteği doğrultusunda değiĢtirilebilmektedir. Kullanılan öntanımlı göz kırpma komutları çizelge 3.3’te gösterilmiĢtir. Bu komutların taranmaya baĢlanması için “1010” Ģeklindeki tarama baĢlangıç komutunun verilmesi gerekmektedir. Bundan sonra kırpmanın “0” veya “1” olmasına göre farklı frekanslarda bip sessi üretilmesi Ģeklinde bir geribildirim sinyali kullanıcıya yardımcı olmaktadır. Böylece kullanıcı mesajı gönderip gönderemediği hakkında bilgiye sahip olmaktadır. Geribildirim sinyali kullanıcının göz kırpmasının baĢarıyla algılanamaması gibi durumlarda, göz kırpma komutunun tekrar gönderilmeye baĢlanmasını da sağlamaktadır. Geribildirim sinyali ve komut taraması bir zaman aĢımından sonra kesilir. Bundan sonra komut verilmesi gerekirse tekrar tarama baĢlangıç komutu girilmelidir.

Çizelge 3.3. Öntanımlı göz kırpma komutları ve fonksiyonları Komut

Sırası Komut Kodu Komut Fonksiyonu

1 0 0 0 0 Mesaj: Acil durum çağrısı!

2 0 0 0 1 Mesaj: Yatma pozisyonumu değiĢtirmeliyim. 3 0 0 1 0 Mesaj: Tuvalet ihtiyacım var.

4 0 0 1 1 Mesaj: Ġlaç zamanım geldi mi? 5 0 1 0 0 Mesaj: Yemek ihtiyacım var. 6 0 1 0 1 Mesaj: Su ihtiyacım var.

7 0 1 1 0 Mesaj: Odanın havalandırılmaya ihtiyacı var. 8 0 1 1 1 Mesaj: Televizyon seyretmek istiyorum.

9 1 0 0 0 Mesaj: Televizyon kanalını değiĢtirebilir misin? 10 1 0 0 1 Kontrol: Genel amaçlı çıkıĢı aktif hale getir. 11 1 0 1 0 Kontrol: Genel amaçlı çıkıĢı pasif hale getir. 12 1 0 1 1 Kontrol: Hedef telefon numarasını sonraki yap. 13 1 1 0 0 Kontrol: Hedef telefon numarasını önceki yap. 14 1 1 0 1 Kontrol: Mesajları sadece SMS ile gönder. 15 1 1 1 0 Kontrol: Mesajları sadece RF ile gönder. 16 1 1 1 1 Kontrol: Mesajları RF ve SMS ile gönder.

Dikkat edilirse tüm göz kırpma komutları mesaj gönderme fonksiyonuna sahip değildir. Bazı komutlar kontrol komutu olarak tanımlanmıĢtır. Böylece, gerektiğinde kullanıcı programın çalıĢmasını kontrol komutları vererek, ilgili ayarlarla düzenleyebilmektedir. Bu kontrol komutları arasında, SMS mesajlarının gönderileceği telefon numarasının değiĢtirilmesi, mesajların gönderilme kanalının ayarlanması ve programlanabilir çıkıĢın aktif edilmesi gibi komutlar vardır. Genel amaçlı çıkıĢ, bilgisayara USB protokolüyle bağlı verici cihaz üzerindedir. Bu çıkıĢ aktif edildiğinde cihaz üzerindeki röle konum değiĢtirmektedir. Böylece rölenin normalde açık (Normally Open - NO) veya normalde kapalı (Normally Closed - NC) kontakları kullanılarak istenen herhangi bir sistem aktif edilebilir. Böylece, perdeyi aç, klimayı çalıĢtır gibi mesajların iletilmesi yerine mevzubahis sistem bu çıkıĢa bağlanarak doğrudan kullanıcının kontrolüyle kumanda edilebilir.

Kullanılan tarama baĢlangıç komutu çoğaltılarak yeni komut listeleri belirlenebilir. Böylece sistem daha çok fonksiyona sahip olacaktır. Fakat bu durum beraberinde kullanıcının bilmesi gereken daha fazla kodu beraberinde getiriyor. Bu durum kodların kullanıldıkça kullanıcı tarafından öğrenilmesiyle aĢılabilir. Bunun yerine kullanıcıya kodların anlamlarını bulunduran görsel bir arayüz sunulması daha fonksiyonel bir yaklaĢımdır. Kullanımı gittikçe artan tablet bilgisayarlar ile buna benzer bir sistem kolayca geliĢtirilebilir.

GeliĢtirilen yazılım temel olarak, görüntü iĢleme, obje tanıma, USB protokolü üzerinden (sanal seri port ile) iletiĢim, kayıtlı komutların göz kırpma dizileriyle karĢılaĢtırılması, SMS gönderme (android ADB üzerinden), göz kırpma algılaması ve programın diğer fonksiyonlarının ayar parametrelerinde değiĢiklik yapabilme gibi özelliklere sahiptir.

Benzer Belgeler