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).

Friday, January 22, 2010

Fundamental Matrix -> Camera Matrix, Python

Dis dunyadaki her goruntu 1) dunyadaki yeri 2) bakis yonu 3) acisi olarak ozgun / tekil olan bir kameranin P matrisi tarafindan imaj duzlemine yansitilir / tercume edilir. Bu matrisi hesaplamak iki resimden buldugumuz onceki yazidaki fundamental matris kullanilabilir. Bizim port ettigimiz suradaki Python kodu Cok Yonlu Geometri (Multiple View Geometry) konusunun babalarindan Andrew Zisserman'in Matlab kodunu temel aldi. Test icin "python vgg_P_from_F.py".

--

The attached Python code calculates a camera matrix P from fundamental matrix F. It was ported from Zisserman's Matlab code found here.

Thursday, January 21, 2010

Python ile Fundamental Matrix Hesabi

2 boyutlu imajlari temel alarak 3 boyutlu imaj insasi (3d reconstruction) icin onemli bir hesap olan fundamental matris hesabi icin gereken Python kodlari. Bu kodlar su yazida bahsettigimiz Peter Kovesi'nin Octave kodlarini temel aldi. Test icin dosyayi indirip actiktan sonra "python fundmatrix.py" komutu yeterli olacaktir.

---

Here is the Python code for an important task in 3d reconstruction - calculation of fundamental matrix. The code can be found here, it is a port of Peter Kovesi's Octave based functions.

Keywords: projective geometry, fundamental matrix, epipoles, camera

Saturday, January 16, 2010

Izdusumsel (Projective) Geometri, Octave

Iki kameradan, ya da ardi ardina cekilmis iki resimdeki uyusan noktalardan olcumler yapmak icin izdusumsel geometri konularina girmek gerekiyor. Burada 'fundamental matrix', 'focal length', 'camera calibration', 'epipole' gibi kavramlar karsimiza cikiyor. Ogrenme amacli kodlar gerekirsa, Matlab'i aynen taklit eden acik kaynak Octave yazilimi uzerinden isletilebilecek bazi kodlar Peter Kovesi'nin sayfasinda mevcut. Kovesi'nin kullandigi tum imaj isleme fonksiyonlarini indirmek mumkun, suradan. Dosyayi bir dizinde acip, ayni dizinde bizim yazdigimiz ornek kodlar, "octave simpletest.m" ile mesela ayni dizinde isletebilir. Octave sisteminizde kurulu degilse, Ubuntu'da "sudo apt-get install octave octave-image" bu isi yapar. "octave-image" paketi ozellikle onemli.

Konu hakkinda fikir sahibi olmak icin iyi bir paket. Biz kendi projemiz gerektirdiginde Num/Scipy ile kodlamaya devam ediyoruz.

Simpletest.m

Imtest.m

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.