Sunday, January 31, 2010

Goruntuden 3d Hesaplamasi - 3d Reconstruction with Python

Zisserman kodlarindan Python'a en son port ettigimiz fonksiyon, iki veya daha fazla 2 boyutlu goruntudeki birbirine uyan noktalardan 3 boyutlu lokasyon hesabi yapabilmek. Kodlari suradan indirebilirsiniz. Bazi notlar: Yapilan hesap metrik degil, ayrica gercek olcumden kat hesabi olarak farkli olabilir (correct up to a certain scale). Ufak bir ornek vermek gerekirse, masa ustunde bir arabanin goruntulerini kullandigimizi farzedelim, sadece goruntulere bakarak algoritma, arabanin yakindan bakilan oyuncak araba mi, uzaktan bakilan gercek araba mi oldugunu tahmin edemez. Bunun icin ek bazi hesaplar yapmak gerekecektir.

Friday, January 29, 2010

Android Uygulamasi Yayinlamak, Satmak

Oncelikle Turkiye'den satmak hakkinda bazi bilgiler: Uygulamalarinizin satilacagi Android Market birkac ulke haricinde pek cok diger yabanci ulkeye kapali. Google bunun vergilendirme politikalari ile alakali oldugunu soyluyor, ileride yeni ulkeler eklenecegini soyluyor.. AdSense durumunda bu isi halletmislerdi, ama demek ki farkliliklar var (GA ile TR dahil olmak uzere bankalara direk odeme gonderebiliyorlardi). Neyse, Turkiye'den satis yapmak icin Android Market'e simdilik uye olmaya gerek yok, boylece uyelik icin gereken $25'i bosuna odemekten kurtulursunuz. Ama programinizi And. Market uzerinden bedava satmak istiyorsaniz, o zaman hala uyelik lazim. Alternatif satis kanallari SlideME gibi siteler olabilir, biz bizim uygulamayi buraya koyduk. Pocketbudda bir mobil uygulama olarak hayatina devam edecek.

Bedava programdan para kazanmak yani reklam kullanmak isteyenler icin AdMob var, hatta statik icerik gosterilecegi durumlarda AdSense reklamlari tasiyan olan statik bir Internet sayfasina yonlendirme yapmak mumkun, fakat her iki durumda da bir Internet baglantisi olmasi gerekiyor. Bu secenek bize pek cazip gelmedi. Simdilik SlideME gibi alternatif piyasalar en iyisi.

Simdi uygulama yayinlamanin teknik tarafina gelelim.

Once bir anahtar yaratmak lazim:

keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -validity 10000

Komut sonras my-release-key.keystore adli bir dosyada anahtar uretilmis olacak. Sonra, surume hazir bir apk dosyasi yaratmak lazim. Bunun icin Ant ile calisanlar "ant release" komutunu uygular. Boylece [UYGULAMA]-unsigned.apk adli bir dosya ./bin dizininde yaratilmis olur. Sonra bu dosyayi "imzalamak" gerekli. Bunun icin

jarsigner -verbose -keystore [KEYSTORE DOSYASI] [BIN DIZINI]/[UYGULAMA]-unsigned.apk alias_name

Bu komut apk dosyasini "oldugu yerde" degistirerek surume hazir hale getirir. Bu noktada dosya ismi yaniltici olabilir, bir mv komutu ile bu dosyayi [UYGULAMA].apk haline getirebilirsiniz.

Bu kadar. Apk dosyasi bu noktada And. M. ya da SlideME uzerinden yayinlanmaya hazirdir.

Dikkat: jarsigner ve keytool programlarini direk JDK/bin altindan geldigine emin olun. Yoksa acaip sonuclar ortaya cikabilir.

Thursday, January 28, 2010

Satranc Tahta Kose Noktalari Bulmak - Realtime Chessboard Corner Detection

Kameradan ya da kaydedilmis dosyadan gelen video goruntusundeki satranc tahtasi goruntusunun koselerini bulup, aninda / canli olarak video uzerinde gostermek icin suradaki Python OpenCV kodu kullanilabilir. Isletmek icin "python chess_online.py [dosya] [satranc tahta kose boyutu]", ornek: dosya.avi icinde 4x4 boyutlarindaki bir tahta icin "python chess_online.py dosya.avi 3".

Kose bulma algoritmasi hakkinda bazi onemli noktalar: Koselerin hep ayni sirada geldigini farz etmeyin, sira surekli, her goruntude (frame) degisebiliyor. Bulunan noktalar listesinde en ust sol kose mesela bazen en son, bazen ilk eleman olarak geri gelebiliyor. Sadece ortadaki nokta (4x4 durumunda 9 nokta icindeki 4. eleman) hep ayni sirada / yerde.

Siralamayi degistirmek icin iyi bir numara, ilk siradaki noktanin y degerinin her zaman son siradaki noktanin y degerinden daha az (altta) olmasini kontrol etmektir, eger degilse, liste uzerinde reverse() cagrisi yapilir, yani tersine cevirilir. Soyle bir Python fonksiyonu kullanilabilir.
def reverse_if_necessary(arr):
if arr[0][1] > arr[-1][1]:
arr.reverse()
Not: Aslinda OpenCV y kordinat sisteminde 0,0 noktasi sol ust kose, yani y degerleri asagi gittikce buyuyor. Biz bu kordinat sistemini kendi hesabimiz icin tersine cevirdik, bu ek islemi yapmak istemeyenler yukaridaki kodu buna gore degistirmelidir (> isareti < olacak).

Wednesday, January 13, 2010

Ubuntu Balon Tavsiyeleri

Ubuntu'da Internet'e baglanma, guc seviyesi, vs. ile alakali mesajlar masaustunde balon mesajlar olarak cikiyor, ve kullanici dikkatini cekmeye ugrasarak bazen rahatsiz edici olabiliyorlar. Balon mesajlarini kaldirmak icin su yeterli:

sudo mv /usr/share/dbus-1/services/org.freedesktop.Notifications.service /usr/share/dbus-1/services/org.freedesktop.Notifications.service.disabled

Bilgisayari kapatip actiktan sonra mesajlarin bir daha gelmedigini goreceksiniz.