Kamera ile sanal fare
|
Taslağını şurada yayınladığım sanal fare projesinin fare hareket kısmını tamamlamış bulunuyorum. Proje powerpoint sunumu pptx dosyası Proje ile ilgili tüm veriler, matlab kodları, dokümanlar, videolar, imgeler Visual C# .NET projesi ve exe’si
1- GİRİŞİnsan hayatında bilgisayarların önemi giderek artmakta. Her geçen gün piyasaya yeni bir donanım, yeni bir yazılım sürülmekte. Bu donanım ve yazılımlar arttıkça insanların yapmak zorunda oldukları işler azalmakta. Artık tek işimiz bilgisayara o işi yapması için komut vermek oluyor ve tüm çalışmalarını bilgisayarda yapan insanların sayısı giderek artıyor. Bilgisayarlara insan işini yaptırmak için yeni çıkan ürünler arasında klavye, fare gibi bilgisayarı yönetmeye yarayan çevresel donanımlar da bulunmakta. Bunlar genel olarak yeni bir ‘donanımsal çözüm’ bulunarak oluşturuluyor. Bu çalışmada bilgisayarlarda şimdiye kadar hep donanımsal olarak gerçeklenmiş olan bilgisayar faresi kontrolünün kamera ile parmak takibi yapılarak gerçeklenmesi üzerinde durulacak. 2- FAYDALARIBilgisayar faresi büyüktür, çok yer kaplar. İnsanın fareyi kıpırdatmasıyla yönetildiği için tutulması, el ergonomisine uygun olması gerekmektedir. Ayrıca fare kıpırdamasının algılanabilmesi için yüzey de önemlidir. Toplu farede topu çevirebilecek bir yüzeye, optik farede düz ve saydam olmayan bir zemine ihtiyaç vardır. Ayrıca kablo veya Bluetooth çözümleri gereklidir. Bütün bunlar bilgisayarın neredeyse en çok ihtiyaç duyulan çevresel donanımı olan farenin kullanımında insana bazı zorluklar çıkarmaktadır. Kamera ile bilgisayar faresi yönetiminin en büyük avantajı kıpırdatılmak zorunda kalınan bir donanımın olmamasıdır. Yüzey bağımsız olacaktır. Tek ihtiyaç bir kameradır. Kamera boyutu en fazla milimetreler seviyesinde olabilir. Böylece yer kaplayan bir fareye ihtiyaç duyulmaz. Bilgisayarlara entegre edilecek bir kamera bu işi görecektir, kullanıcının bilgisayar faresini yönetmesi için yapması gereken şeyler azalacaktır. Bu sistemin en büyük faydası dizüstü bilgisayarlarda görülecektir. Bilgisayar kullanıcısı, hem taşınması, hem kullanılacağı zaman bilgisayarla bağlantısı kurulması, hem de kullanılırken uygun zemin bulunması gereken bilgisayar faresi donanımından kurtulmuş olacaktır. Bunun yerine dizüstü bilgisayara entegre bir kameranın önünde parmaklarını oynatması doğrudan bilgisayar faresini yönetmesi için yeterli olacaktır. Günümüzde dizüstü bilgisayarlarda yoğun bir şekilde kullanılan dokunmatik fareden (Touchpad) farkı da fare hareket alanının kamera görme açısı kadar büyük olması ve çok parmak algılayabilme özelliği olacaktır. 3- KULLANIMDonanımsal bilgisayar faresine alternatif olarak üretilen sanal fare yöntemleri genelde bilgisayar karşısından bilgisayar ekranına doğru el işaretleri yapılarak kullanılmakta. Bu sistemlerde bilgisayar kullanıcısı seçmek istediği (tıklayacağı) yeri parmağıyla işaret etmekte. Teorikte bu sistem daha kullanışlı, daha kolay görünse de uzun süre bilgisayar başında çalışan bir kişinin Şekil-1’deki gibi elini havada tutarak sürekli işaretler vermesi oldukça zahmetli, zor bir iş olacaktır.
Şekil-1 Bu sebeple bu çalışmada fare kontrolünü yapan elin bir yüzey üzerinde hareket etmesi uygun görülmüştür. Bu şekilde insan eli yorulmadan saatlerde fareyi yönetebilir. (Şekil-2)
Şekil-2 Sistemde Şekil-2’deki gibi kamera ele karşı-üstten bakacaktır. 3.1 – FARE HAREKETİ ve TIKLAMALARFare konumu takibi orta parmakla yapılacak. Orta parmak sürekli zeminde hareket edecek, fare x-y koordinatları da anlık olarak buna göre güncellenecek. Sağ fare tıklaması ise işaret parmağına atanmış durumdadır. İşaret parmağı yere dokundurulup tekrar kaldırıldığında veya geriye çekilip tekrar ileri itildiğinde sağ fare tıklaması gerçekleşecek. Sol fare tıklaması da yüzük parmağıyla takip edilecektir. Şekil-3’te alınan bir deneme videosundaki sağ tıklama anı görülmektedir. 69 numaralı çerçevede işaret parmağı geriye çekilmiş, 73 numaralı çerçevede geri gelmiştir. 4 – GENEL ALGORİTMAGenel olarak eli veya parmağı takip etmek yerine sadece ilgilendiğimiz (işaret, yüzük, orta) parmakların uç noktalarının konumu bulmamız ve takip etmemiz bizim için yeterli olacaktır. Arka plan rengi, ışıklılık veya ten rengi büyük değişiklikler gösterebileceği için sadece elin
Şekil-3 yapısıyla ilgilenmemiz birçok hatadan kurtulmamızı sağlayabilir. Bu sebeple ilk başta görüntü dizilerindeki renk bileşenlerinden kurtulmak için yakalanan çerçeveleri siyah beyaz hale getirebiliriz. (Şekil-4)
Şekil-4 Daha sonra belirlenen bir arka plan eşik değeriyle eşikleme yaparak imgeyi lojik hale getiriyoruz ve bu şekilde imge içerisinde sadece el kalmış oluyor. (Şekil-5)Böylece arka plan pikselleri ‘0’, elin olduğu yerdeki pikseller ‘1’ değerini almış oluyor.
Şekil-5 4-1 PARMAK UCU TESPİTİBu çalışmanın en önemli kısımlarından birisi parmak ucu noktalarının sağlıklı bir şekilde tespit edilmesidir. Kameradan kaynaklı görüntü kalitesi, ışıklılık, çözünürlük, hareket etkisi, gölge etkileri sebebiyle parmak uçları görüntüde çok seçilebilir olmayabilir. En ufak bir gölge etkisi birkaç piksel kaymaya, bu da farenin düzensiz hareketler yapmasına, istenmeyen tıklamalar oluşturmasına sebep olabilir. Ele karşıdan bakıldığı için imgenin altında başlanarak bir satırda 3 nesnenin yakalandığı konumu tespit etmemiz, bize işaret-yüzük-orta parmakların bulunduğu ama daha yukarıda olduğu için serçe ve baş parmakların bulunmadığı bir satırı verecektir. Böylece imge içerisinden ilgilenmediğimiz yerleri çıkarabiliriz. Kabaca, en alt satırdan başlayarak yukarıya doğru satır satır tarayarak her satır için nesne sayısı tespit edilip, 4 nesneye ulaştığında serçe parmağa ulaşıldığı için o kısımdan yukarısı kesilebilir. (Şekil-6)
Şekil-6 Bir satırdaki nesne sayısını bulmak için etiketleme yöntemi uygundur. Ancak oldukça yavaş bir yöntem olduğu için satır satır taramak verimsizdir. k o an taranan satırı, m toplam satır sayısını, n k. satır için etiket sayısını vermek üzere;
3 parmağın yakalandığı satırda etiket sayısı 3 olacaktır. Bu algoritmada 3 tane etiket barındıran satır bulunana kadar hızlı bir tarama yapılıyor. Her adımda yarıya inerek veya 1.5 katına çıkarak 3 etiket barındıran satır çok daha hızlı bir şekilde bulunacaktır. Yukarıdaki algoritmadan n=3 durumunda çıkıldığı andaki k değeri serçe parmağın bitişinden aşağıda ve işaret-yüzük-orta parmaktan yukarıda bir satır numarasını vermiş olacaktır. Bu noktadan aşağıya doğru imgemizi kestiğimizde ise Şekil-7’deki gibi bir imge elde ederiz.
Şekil-7 Bundan sonra bu küçültülmüş, istenmeyen parçaları atılmış imgeye son bir etiketleme işlemi uygularız. Bu son etiketleme işlemi sonucunda imgede yüzük parmağının bulunduğu pikseller ‘1’ değerini, orta parmağın pikselleri ‘2’ değerini, işaret parmağının pikselleri de ‘3’ değerini alacaktır. Bu 3 etiketli imgede ‘1’,‘2’ ve ‘3’ değerinin bulunduğu son noktaların x ve y koordinatları parmak uçlarının konumlarını verecektir. Şekil-8’de deneme amaçlı alınan 310 çerçevelik videodan üç parmak için ikişer olmak üzere 6 adet hareket vektörü görülmektedir. 4-2 HAREKET VEKTÖRÜ ANALİZİŞekil-8’deki grafikten görüldüğü üzere hareket vektörlerinde yüksek frekanslı yerler oldukça fazla. Bunlar farede titremeye, istenmeyen tıklamalara sebep olacaktır. Bu yüksek frekanslardan kurtulmak için 3’erli ortalama alan basit bir alçak geçiren filtre uygulayabiliriz. Alçak geçiren filtrede 3 değeri çerçeveler arası titreme ve insanın tıklama için parmağını çekme hızı göz önüne alınarak, denenerek tespit edilmiştir. AGS sonrası hareket vektörleri grafiği ise Şekil-9’da görülüyor. Şekil-10’da ise grafik üzerinde önceden bilinen sağ ve sol tıklamalar gösterilmiştir. Kırmızı okla işaretlenmiş yerler sağ tıklama, yani işaret parmağı hareketi, yeşil okla gösterilen yerler ise sol, yani yüzük parmağı hareketlerini göstermektedir. İşaret parmağı 195-238 numaralı çerçeveler arasında basılı tutulmuştur. Yani fare tıklanmış olarak ‘sürükleme işleme’ gerçeklenmiştir. Ancak çok bariz tıklamalar haricinde bu tıklamaları, özellikle sürükleme işlemini bu yöntemle bulmak oldukça zordur ve hata olasılığı yüksektir. Bu sebeple tıklama tespiti için başka işlemlere ihtiyacımız var.
Şekil-8
Şekil-9
Şekil-10 Orta parmak takibiyle fare hareketini doğrudan sağlayabiliriz. AGS sonrasında bulduğumuz orta parmak x ve orta parmak y değerlerinin değişimiyle işletim sistemine fare hareket emri gönderilebilir. Bu şekilde bu çalışmanın fare hareket ettirme kısmı tamamlanmış oluyor. 4-3 TIKLAMA TESPİTİ İÇİN FİKİRLERKamera ile sanal fare projesinin tıklama gerçekleme kısmı henüz tamamlanmamıştır. Geliştirilen algoritma ise kabaca şöyledir; Tıklama için parmak hareketinin yönü kamera açısıyla ciddi şekilde değişiklik göstermektedir. Ele tam karşıdan bakan kamerada görülen tıklamada parmak hareketi yukarı aşağı olmakta yani sadece y ekseninde değişinti göstermektedir. Ancak kamera açısının değişmesi, hatta elin görüntü içerisinde yer değiştirmesiyle dahi bu durum değişmekte, bazı tıklamalarda parmak x ekseninde de oldukça değişinti göstermektedir.
Şekil-11 Şekil-11’de görülüyor ki, üstteki işaret parmağı tıklama hareketinde sadece y ekseninde kayma var. Ancak alttaki yüzük parmağı tıklama hareketinde hem y hem x yönünde hareket mevcut. Bu sebeple tıklama tespitinde yapılabilecek şeylerden birisi doğrudan parmak ucunun aldığı mesafeyi ile bulmak veya eksen eksen değerlendirmek olacaktır. Fare hareket ettirme durumunda işaret ve yüzük parmakları da hareket ettiği için tıklama tespiti için değişinti değerlendirmesinde, orta parmak hareketiyle olan farkın göz önünde bulundurulması temel kural olacaktır. 5- SON SÖZBu projenin fare hareket ettirme kısmı tamamlanmıştır. Tıklamalar gerçeklenmeden, sadece orta parmak takibi ile hareket vektörleri tespit edilmiştir. Buraya kadar MATLAB® programı kullanılmış, hareket vektörleri tespitinden sonra Visual Studi .NET programı kullanılarak Visual C# diliyle uygulama gerçeklenmiştir. Projeye destekleri için Yrd. Doc. Dr. Oğuzhan URHAN’a ve Arş. Gör. Yılmaz ÜRGÜN’e teşekkürü borç bilirim. |
English Articles
Emrah Üstün












29 Temmuz, 2008 saat 22:28
Abi harikasın ya
Azmine ve paylaşımına hayran kaldım doğrusu
1 Şubat, 2009 saat 03:57
merhaba,
güzel proje olmuş tebrikler. yazılarını takip ediyordum aklıma takılan birşey var yadımcı olabileceğini düşündüm.
bir portredeki kişini gözlerinin yerini tespit etmek istiyorum. yalnızca gözleri alıp kaydedeceğim.
nasıl bir yol izlemeliyim?
4 Şubat, 2009 saat 20:25
fatih,
gözü tespit etmek için birçok metot uygulanabilir. benim bildiğim hough transform var mesela.
onun dışında korelasyon da bir çözüm olabilir kısa yoldan. denemek lazım, verimli olanı seçmek lazım.
bu konuda yapılan çok çalışma var, araştırırsan kesin bulursun.
26 Ekim, 2009 saat 12:12
abi sen mükemmelsin…üstad sın:))
6 Aralık, 2009 saat 01:58
Slm Emrah. verdiğin proje dökümanlarına baktım ama yukarıdaki uygulamayı anlatmıyorum. Acab bu dökümanın kodlarını gönderme durumun var mı? Yardımcı olursan sevinirim…