First poem post...

As long as you try
to impress others,
you are not convinced
of your own strength.
As long as you strive
to be better than others,
you are doubting your
own worth.
As long as you try
to elevate yourself
by lowering others,
you are doubting your
own greatness.
Who is in peace with oneself
doesn’t have to prove anything
to others.
Who knows one’s own worth
doesn’t need validation.
Who knows about one’s own greatness
lets others keep theirs.
-Gabriele Ebbighausen

Devamını oku...>>

İnsansız hava aracı görüntülerinde hareketli nesne tespiti. (Moving object detection on unmanned aerial vehicle videos)



Insansız hava araclarının çok yüksekten uçması, faydalı yükün hem hava aracı hareketi, hem de titreşime maruz kalması nedeniyle alınan görüntülerde yer yüzeyinde hareketli nesneler kolay fark edilememekte. Ayrıca, deniz, ormanlık veya karasal arazi yapısı da hareketli nesnelerin tespit edilmesini zorlaştırmakta.
Bilindigi gibi IHA lar uzun saatler boyunca havada kalırlar. Faydalı yük operatörü uzun süreler boyunca görüntüyü izler. Uzun süreli benzer görüntülere bakan insanların sahnedeki değişimleri algılayamadıkları bilinmektedir.

Sevgili Birol Kuyumcu ile 2,5 sene kadar önce bu konuda bir projeye basladık ve üzerinde epeyce emek verdik. Bu konuda, üzerinde çalışmak için video veriseti bulmak oldukça zor. İnternetten bulabildiğimiz videoların çoğu düşük çözünürlüklü ve sıkıştırılmıs videolar idi. Bilindiği gibi öznitelik çıkartma, arka plan ayırma gibi uygulamar için videonun kalitesi çok önemli. Tam olarak amaçladığımız sonuçlara ulaşamasakta ortaya güzel bir altyapı çıktı. Ancak veri seti sıkıntısından projeye devam edemedik. 
Uygulanan yöntemın detaylarını Birol Bey blogunda yayınladı. Sonrasında bu konu ile alakalı gerek yurtiçinden gerekse yurtdışından çok sayıda e-maıl aldık. Bunun uzerine, başka projelere faydalı olur umuduyla kodları GNU GPLv3 lisansi ile açmaya karar verdik. 

Asagidaki linkten projenin kaynak kodlarina ulasabilirsiniz.

Proje OpenCV 2.4 windows ortaminda C++ ile gelistirildi. Kullanilan fonksiyonlar OpenCV 2.4.x ile uyumludur.  Gelistirme ortami olarak QtCreator kullanildi.
  
Faydali olmasi dilegi ile...

Devamını oku...>>

Emniyet kiritik sistemler icin model tabanli yazilim gelistirme (Model based software development for safety critical systems)


Merhabalar bugün ESA-Estec'te "10th ESA Workshop on Avionics, Data, Control and Software Systems" calistayina katilma firsati buldum. Ogleden sonranin konusu, uzun zamandir uzerine yazmak istedigim model tabanli otomatik kod uretimi idi. Avrupanin uzay konusunda onde gelen firmalari model tabanli olarak gelistirdikleri prolerini ve bu konudaki tecrubeleri paylastilar.  Bu yazida sunum yapan firmalarin model tabanli gelistirmeye bakisini, teknoloji seviyesini ve konuyla alakali kendi tecrubelerimi paylasacagim.
  •  1990'li yillarda deneysel projelerde kullanilsada artik neredeyse karmasik kontrol algoritmasi iceren butun ciddi projelerde model tabanli gelistirme yoluna gidiliyor. Bunda etkili olan, kod uretme araclarinin son yillarda ciddi sekilde gelismesi ve model tabanli gelistirme yaklasiminin yazilim gelistirme/verifikasyon maliyetlerini ciddi sekilde dusurmesi. Sunum yapan Thales Alenia Space, OHB Sweden, ESTEC gibi firmalar bu gorusu destekliyorlar. Gunumuzde artan sayida projenin kodu otomatik olarak uretiliyor. Airbus ta bu sekilde gelistirme yapiyor. Hollanda'da calistigim iki sirkette de, universite de kontrol algoritmalari model tabanli olarak gelistiriyoruz.   
  • Matlab/Simulink/Embedded Coder neredeyse piyasada tekel olmus durumda. Gecmiste cesitli farkli araclar kullanilirken giderek Mathworks un pazar payi artiyor. Sunum yapan firmalarin gorusu bu sekilde. Ben de sadece bunu kullandim.
  • Uzay sektoru benim gozlemime gore diger sektorlerden biraz daha geride otomatik kod uretimi konusunda. Havacilik, medikal ve otomotiv sektorlerinde kullanim cok daha yaygin. Ornegin,  artan sayida kullanimla birlikte ESA bunyesinde ECSS yazilim gelistirme standardi uzerinde model tabanli gelistirmeyi duzenleyecek revizyon yapmali miyiz? konusu henuz tartisiliyor. Havacilikla DO-178C standardi seneler once DO-331 (model based) ekiyle birlikte gelmisti.
  • Calistayda ilgimi ceken bir baska konu ise bilgisayarla gorme tabanli navigasyon ve ucus kontrol sistemleri idi. Geleneksel kontrol algoritmalari iceren yazilimlarda model tabanli gelistirme yaklasimi artarken, bilgisayarla goru uygulamalarin elle kodlandigini ogrendim. Sanirim otomatik olarak uretilen kod performans konusunda elle yazilan kod ile henuz rekabet edemiyor. Performans degerlendirmesi icin simulink ile gelen demo uygulamalarinin birisinden C kodu uretmeyi planliyorum, Gerceklestirirsem sonuclarini burada paylasmak isterim. (Eger bu konuda tecrubeniz varsa, paylasirsaniz memnun olurum.)
  • Modeller metin tabanli olmadigi icin geleneksel sekilde "diff" alinamiyor. Birden cok gelistiricinin calistigi projelerde farkli gelistiricilerin gelistirdigi modullerin nasil birlestirilecegi belli degil. Bu nedenle modellerin konfigurasyon yonetimi biraz daha sikintili. Model dogrulama yontemleri(unit tests, test coverage vs.), geleneksel yontemlere gore farkli. Bu konularin proje basinda iyi bir sekilde planlanmasi gerekiyor. Bu konu aslinda blog yazisinda anlatilamayacak olcude detayli...
  • Hem karmasikligi yonetilebilir seviyede tutabilmek icin, hem de uretilen kodun dogrulugundan emin olabilmek icin, modelleme standarti cok onemli. Firmalarin genellikle kendi tecrubeleriyle olusturduklari modelleme standartlari var.
 Cok uzun zaman sonra yazdigim yazinin sonuna geldik. Birilerine faydali olmasi dilegiyle..

Devamını oku...>>

OpenCV 2.3 ile Optical Flow C++

  Optical flow yöntemi, hareket kestirimi, nesne takibi, video stabilizasyonu(titreşim,hareket giderme), imge mozaikleme, stereo vision ile derinlik bilgisi eldesi gibi operasyonlarda sıklıkla kullanılan temel bir araçtır. Genel olarak Optical flow yöntemi bir resimdeki noktanın diğer bir resimde nereye gittiğini bulmaktadır. Burada OpenCV nin sağladığı fonksiyonlarla Lucas Kanade optical flow örneği bulunmakta. OpenCV  kütüphanesinin C dili arayüzlerini kullnıarak geliştirilen bu uygulamayı  C++ a çevirdim.


Devamını oku...>>

OpenCV 2.2 Windows .lib dosyaları?

     OpenCV nin 2.2 versiyonu geçtiğimiz yılın Aralık ayında yayınlandı. 2.3 versiyonunun ise planlanan sürüm tarihi Mayıs 2011 olarak belirtilmiş.  Versiyon 2.2 de neler değişmiş burada. Bu listede ilk gözümüze çarpan kütüphanenin organizasyonunun bir hayli değişmiş olması. Eski versiyonlardan aşina olduğumuz cxcore, cv, cvaux, highgui ve ml modülleri daha küçük parçalara bölünmüş halde karşımıza çıkıyor. Bu değişiklikler kodlarımızda kullanmaya alıştığımız opencv header dosyalarının adının değişmesine neden olmuş. Ayrıca lib ve dll dosyalarıda artık opencv ön ekiyle başlıyor. Bu versiyonun  android için de built edilebileceği resmi olarak belirtilmiş. Kütüphanenin C++ desteği de bir hayli gelişmiş. 

  OpenCV kütüphanesinin 2.2 versiyonunu Visual Studio ortamında kullanmak istiyorsanız, kütüphanin kodlarını indirdikten sonra CMake ile Visual Studio proje dosyası oluşturup bu projeyi derleyerek dll ve lib dosyalarını oluşturmanız gerekiyor.  buradan windows versiyonunu indirebilirsiniz. Bu pakette kütüphanenin kodları, değişik dillerde örnek programlar ve bin klasörü içerisinde derlenmiş kütüphane dosyaları bulunuyor. Kütüphanenin kodlarıyla ve örnek programlarla ilgilenmeyecekseniz, OpenCV kullanan herhangi bir programı derlemek için minumum gereksinimleri  aşağıdaki linkten indirebilirsiniz.


     Aşağıda OpenCV v2.2 nin c++ arayüzü ile yazılmış temel bir test programı veriyorum. Aynı cv::Mat objesine döngü içinde jpeg dosyadan okuma yapılmasına rağmen C++' ın güzelliklerinden faydalanılarak  memory leak oluşmadığına dikkat ediniz. 

Devamını oku...>>