ismailari.com İsmail Arı'nın internet güncesi

Bir internet sitesi nasıl yapıl(ma)malı!

2008 5 Ekim

Hiç ortada yokken bu yazıyı yazmak farz oldu. Dün 1,5 saat, bugün de 2 saat olmak üzere toplam 3,5 saat kadar güzelim zamanımı internetten uçak bileti almaya çabalamakla geçirdim. İki adet süper firmanın süper internet sayfaları sayesinde çok hızlı işlemler yaptım. Birisi Sunexpress, diğeri ise Onurair. Şöyle ki, sayfaları TCDD‘nin sitesinden bile şahane. Şimdi, bu iki siteden örneklerle (içine üçüncüyü de katayım, şu an elimde ona ait yeterli örnek olmasa da bol bol harika deneyim var) size “nasıl internet sayfası yap(ma)mak lazım”ı anlatacağım. İyi dinleyin, not alın…

Yazının devamını oku »

İlk düşünen değil, ilk hayat veren kazanır

2008 22 Eylül

Beş gün önce, bana yol göstermesi için sarı not kağıtlarıma şöyle not almıştım:

Eğitim 1
---------------------------------------------
Tüm resimler için:
    resmi oku ve L adet imge piramidi basamaklarını oluştur (ölçekle)
    nirengi noktalarını oku ve L adet ölçekle
    noktaların profillerini bul
    profillerdeki gradienti (değişimi) bul
Ortalama gradienti ve gradient kovaryansını hesapla ve dosyaya kaydet
 
Eğitim 2
---------------------------------------------
Tüm şekiller için:
    şekli oku ve örnek olarak al
Tüm örneklere PCA uygula
Bulunan özdeğerleri, özvektörleri ve ortalama şekli kaydet

Üsttekileri anlamanızı beklemiyorum, zaten yazının amacı bunları anlatmak da değil, sadece örnek olsunlar istedim. Bunları planlayıp yazmam yarım saatimi falan aldı. Ama gelgelelim hala kodlayabilmiş değilim! Üstelik beş gündür gayet verimli de çalışıyorum.

Bilgisayarla görme gibi deneysel yönü ağır basan dallarda bir şey geliştirmek cidden çok meşakkatli. Kod yazmayanlar bilemez! Veritabanı oluşturmak zahmet ister. Programın birçok örnekte çalışması çok zaman isteyeceğinden eniyilemeye çalışırsınız. Olmadık bir yerde ‘codec’ problemi olur. Bilmem kaç işlemcili sunucu buldum diye sevinirsiniz, kodunuzda kullandığınız bir bileşen 64 bitlik makinede çalışmaz, oturup kalırsınız. Üç gün bekler sonra da bir bakarsınız, mantıksal bir hata yapmışsınız, haydi sil baştan. Ya da sonuçlar %100 başarılı olarak gözükür. Deneyimli iseniz sevinmezsiniz, çünkü biraz araştırınca kodda hata yaptığınızı ve gerçeklikleri yanlışlıkla veri olarak kullandığınızı farkedersiniz. Ve daha…

Siz tüm bunlarla boğuşurken, dışarıdan birisi için yaptıklarınız anlamsız gelebilir. Sizin iki satırlık düşünceyi bir haftada kodlayamadığınızı da düşünebilir. Ama ne yazık ki öyle kolay değil bu işler. Uzun süre yılmadan sabırla çalışmak gerekiyor, arada da fos çıkıyor.

Bunları niye anlatıyorum? Yaptığım işten sıkılmış falan değilim. Bilgisayarla görme konusunda (veya benzeri özelliklere sahip başka bir konuda, nitekim çoğu alan böyle gözüküyor) çalışmak ciddi bir sabır ve uğraş gerektiriyor. Şunu bilmek lazım: Farkı yaratabilmek kuru kuru düşünmekten ziyade üretmekten kaynaklanıyor. İlk düşünen değil, ilk hayat veren kazanır.

Bilgisayara dalıp gidenler, ‘koyun’a kulak verin

2008 20 Eylül

Siz de benim gibi bilgisayarına dalıp gidenlerden ve saatlerin nasıl geçtiğini farkedemeyenlerden misiniz? Eğer öyleyse, dikkat etmezsek sonumuz pek hayırlı değil, benden demesi. Bilgisayar kullanıcıları ve müzisyenlerde sık görülen bir hastalık var: RSI (“Repetitive Strain Injury”, Tekrarlanan Zorlama Yaralanması). Çok ciddi bir rahatsızlık olduğu söyleniyor. Önlem olarak da sık sık ara verme, gün içinde belli bir miktardan fazla çalışmama gibi hususlar var. Tabii, bunu önceden de biliyorduk ama insan genelde yetiştirmesi gereken işlerin arasında bunu sallamıyor. Biraz baktım, çok güzel bir yazılım var: Workrave. Açık kaynak bir yazılım. Hem GNU/Linux, hem de Windows’ta çalışabiliyor. Belli zamanlarda fırlayan pencereler şeklinde (pop-up :)) çıkıp ara vermeniz gerektiğini tembihliyor. Zaman ayarlarını değiştirebiliyorsunuz. İsterseniz çalışmaya devam edebiliyorsunuz tabii, ama o zaman bu yazılımı niye kurdum diye sorar insan kendine!

Sanırım, ‘koyun‘a kulak vermek iyi olacak. Şu anda bile sağ kolum farenin azabına uğradı, arada çok kötü sızlıyor, ileride durumumuz daha kötü olmasın…

Değişim

2008 17 Eylül

Lisans son sınıftayken, Math and Mona Lisa’nın yazarı Bülent Atalay bizim okula gelip bir sunum yapmıştı. O, sunuma ara verip önde konuşurken kullandığı Mac da arkada şova yönelik hareketler yapmaya başladı; fotoğraf geçişleri falan. Dinleyicilerden ooo sesi gelmesi üzerine işletim sistemi muhabbeti yaptı kısacık. “İşletim sistemi din gibi, değiştirmek çok zor. Oğlum da Mac kullanıyor benim gibi.”

Ben de uzun süredir GNU/Linux’a geçmeye çalışıyordum, bu durumu daha iyi anlıyorum bu yüzden. Üstelik ben bilgisayar mühendisi ünvanına sahip biriyim, hem de yüksek! Ah, her seferinde çaresiz kalan eller… On yılı aşkın süredir Windows bahçesinde depolanan alışkanlıklar bir anda hortluyor ve öyle bilgisayar bana, ben ona bakıp geçiniyoruz. Sonra işler sıkıştırıyor ve yine o hazin son, ertelenme. Yahu Windows güzel, gereksiz bu hayaller diye düşünebilirsiniz. Ama araştırma çalışmalarını yapabileceğimi ümit ettiğim özgür bir alternatifi varken ben öyle düşünmüyorum!

Geçen hafta yine bir heyecan: Bu sefer alıştıra alıştıra değil dedim kendi kendime, zönk diye geçecem! Pardus ile değişime mayayı çaldım, internete giremeyip uğraştım biraz, bir de bilgisayar dondu durdu, anlayacağınız maya tutmadı. Muhtemelen problem bende, ya da benim dizüstündeki donanımda. Bir ara Ubuntu denemiştim ve hevesim kaçmadan ikinci seçenek olarak ona başvurdum. Sonuç mükemmel, düşük sıcaklıkta bile bemberrak yazılımlar. Bir haftayı geçti, güzel güzel kullanıyorum, Gnome’u da beğendim, nazar değmesin! Buralara alışayım, gönül Pardus kullanmak ister.

Tamam, işletim sistemi cepte, sıra neyde? Tabii ki araştırmaları hangi dili kullanarak yapacağımda. Alemlerin sevgili programlama dili Python ile sağolsun, Anıl’ın verdiği gazla geçen yıl tanışmıştım. İnsanın derslerde öğretilmeyen şeyleri tamamen kendi uğraşları ile öğrenmesinin verdiği zevkten midir bilemem ama sonradan benim de sevgili dilim oldu. Geçen hafta iki kitap (A Byte of Python, Dive into Python), bir sürü blog yazısı ve kısa doküman okuyarak eski bilgileri tazeledim ve yeni bilgiler edindim. İki-üç gündür videoları ve resimleri nasıl işlerim diye bakıyorum ama internette bilgisayarla görü alanında Python dokümantasyonu yok denecek kadar az. PIL kullanarak piksel bilgilerini Numpy (Numuric Python) matrislerine sonunda atabildim. Bu şu demek oluyor; artık elimde somut, matematiksel bir nesne var ve ben düşüncelerimi test edebilirim, altyapım aşağı yukarı hazır. Numpy kullanarak MATLAB ile yapılabilen çoğu iş yapılabilir, hatta yardımcı modüller ile eski MATLAB yazılımlarınızla veri alışverişi yapılabilir. Hem de çok daha keyifli ve bedavaya. MATLAB kullanarak bir sürü kod yazan ve onları dağıtmada her zaman sorun yaşayan biri olarak, bir ampül yanıverdi kafada! Neden ben MATLAB yerine Python kullanmayayım? Şimdi bu sorunun cevabının benim işlerim açısından ne yönde olacağını zaman geçtikçe öğreneceğim. OpenCV’nin Python bağlantıları da var ama içimden Python kullanıp C’deymiş gibi kod yazmak gelmiyor açıkçası, Pythonic olsun biraz, kültürümüz gelişsin. Bir gün düşüncelerimi derleyip (pardon yorumlayıp) Python propogandası yapabilirim buradan, bekleyin…

Ne güzel gidiyorduk birkaç gündür, ve yine o bir işe girişirken yaşadığımız sendrom: Duraksama ve kafa dağınıklığı başgösterdi. Eylülde olmamıza rağmen, ağustos böcekliği ile geçti gün. Sinüs eğrisi kıvamındaki hayatımı tekrarlıyorum yine. Pilleri şarj etmek lazım.

Bu sene ders çok, yükümlülük çok, o yüzden bloglanma nasıl gider bilemiyorum ama imge/video (daha genel tabiri ile sinyal) işleme için temel altyapının nasıl kurulabileceğini ve bedavaya/özgürce nasıl düşüncelerinize test ortamı yaratabileceğinize dair yazılar yazmak istiyorum. Kendi kodlarımı bu yönde bir (d)evrim ile yeniden yazmayı başarabilirsem bunun yapılabilirliğini de umarım göstermiş olacağım.

Bakalım, n’olacak?..

Boğaziçi FBE örnek tez LaTeX kaynağı

2008 17 Ağustos

Teze başlarken bir hayli zaman harcıyor insan. Örnekler içeren bir şablon ile başlamak içeriğe bir an önce geçebilmek için önemli. Kendi tezimin kaynağını biraz kırpıp içinde örnek figür, tablo, algoritma ve atıflar içeren bir şablon oluşturdum. Buyurun:

Kaynak: sample_fbe_ms_thesis.zip
Çıktısı (PDF): sample_fbe_ms_thesis.pdf

FBE tarafından kabul edileceği garanti edilemez, kendiniz buradan denetlemelisiniz. Kaynakça stil dosyası için B. Gürdağ‘ın emeğine sağlık.

thesis

Güncelleme (21 Nisan): Üstteki kod, Bakoma LaTeX editörü ile Windows’ta çalıştığımdan bir sorun çıkarmıyordu fakat bazı etiketler açılmasına rağmen kapanmamış ve hatatlıymış. Bu hataları kaldırdım ve yeni sürümünü yükledim. Ubuntu kullandığım için onda test ettim. Windows veya Mac’ta da çalışmasını bekliyorum.

Kaynak: sample_fbe_ms_thesis_v2.zip

Yapılacaklar

2008 15 Ağustos

Yapılacaklar listesi tutmak, işleri zamanında yetiştirmek ve daha iyi plan yapmak için iyi bir alışkanlık. Bunun türlü yolları var. Nasıl yollar var ve ben ne düşünüyorum, bi bakalım:

  • Post-it ile ekranın sağına soluna yapıştırmayı sevenler var. Ya da mantar panolara. Ama benim gibi 2+ farklı yerde (evde/okulda/kütüphanede) çalışmayı sürdürüyorsanız hangi monitöre veya duvara yapıştırmalı?
  • Küçük bir not defteri tutmak da bir yol. Yıllardır hep isterim ama ilk sayfadan sonra vazgeçerim. Tam yapacağım işi yazayım derim, kalem olmaz, diğer çantada kalmış olur, vb.
  • Bir masaüstü yazılımı kullanmak. Türlü post-it yazılımı denedim indirip. Kimisi çok cafcaflı, dokunmatik ekran falan lazım. Zaten çok karışık olmasına gerek duymuyorum, sadece metin olsun yeter. Böyle yazılım kullanmanın bir sorunu da yine bilgisayara bağımlı kalmış olması. Format atarken dosyaları dışarı aktarmak falan lazım, zor iş.
  • Bu işi internette halletmek lazım, çünkü istediğin yerden ulaşabilirim ve güncelleyebilirim ve böyle hizmetler de var. Ben Remember the Milk ve Todoist‘i denedim. İkisi de hoş. İlkini Google Takvim’e ekleyebilince daha da sevindim (altta ekran görüntüsü var). Arayüzü de sade, kafa karıştırmıyor. Google Takvim’i zaten kullandığımdan ayrıca başka ekran açmama da gerek kalmıyor. Belki daha güzel eklentiler de vardır bu işi yapan, bilemiyorum, pek bakmadım bunu beğenince. Hem kağıt israfı da yok. Bitirilmiş işleri de arşivlemiş oluyorsunuz sonrası için. Bu arada, Google Takvim size ücretsiz kısa mesaj yollayabiliyor hatırlatma için, biliyor muydunuz? Önemli günlerde/anlarda çok işe yarayabiliyor mesela, kaçırmıyorsunuz!

Son yöntem şimdilik en iyi gözüküyor, deneyeyim bir süre…

İlgili yazılar (sonradan eklenen):

MATLAB ile PCA (Temel Bileşenler Analizi)

2008 8 Ağustos

PCA, görüntü işleme de dahil olmak üzere birçok alanda sıkça kullanılan istatistiksel bir yöntemdir. Boyut azaltmak için başvurulabilir. Genel amaçlı bir MATLAB PCA kodu yazalım:

Girdiler

sampleMat ⇒ Her satırı bir örnek vektörden oluşan matris
n ⇒ (opsiyonel) istenilen özvektör ve özdeğer sayısı

Çıktılar

V ⇒ “sampleMat” ile verilen vektörlerin ana yönleri (özvektörleri). “V” matrisinin her sütunu bir özvektördür. Soldan sağa doğru baskınlık azalır.
D ⇒ “V” özvektörlerine ait özdeğerler. “D” vektörünün her elemanı, “V” matrisinin ilgili sütunundaki özvektör yönündeki değişintiyi (varyasyonu) gösterir.

Örnek

3 boyutta olan 5 nokta olsun. Bunları her satıra bir tanesi gelecek şekilde yazalım. x = [1 2 1; 0 2 1; 0 3 2; 2 4 1; 1 3 0], n = 2 olursa V iki sütundan oluşur ve ilk sütun en çok değişintinin oldugu yönü, ikinci sütun da sonraki baskın yonu gösterir. Bunlar birim vektörlerdir. İlk yöndeki değişinti 0.9576‘dır. Standart sapma da bunun kareköküdür. Bu beş noktaya ait iki boyutun PCA sonuçları aşağıdaki gibidir.

V =

-0.7164 0.1720
-0.6486 -0.5212
0.2570 -0.8359

D =

0.9576
0.4412

Not: Eğer örnek sayısı, boyut sayısından azsa hızlı olması için Eckart-Young teoremini kullanır.

Kaynak Kod

Yazının devamını oku »

Yüz Özniteliklerinin Takibi ve İşaret Dili için İfade Tanıma

2008 1 Ağustos

Yüz

Uzunca bir uğraştan sonra (~1 haftasonu), tez sunumumu video haline getirebildim. Yazılar İngilizce, sunum (ses) ise Türkçe. Ne yazık ki tüm sunumu baştan Türkçe yazmaya zamanım olmadı. Bir de bilgisayara anlatmak sıkıcı bir şeymiş, onu öğrendim.

Aktif şekil modellerinin nasıl çalıştığını, yüz özniteliklerini takip etmede nasıl kullanılabileceğini ve bu sonuçların nasıl sınıflandırılabileceğini merak ediyorsanız izleyebilirsiniz. Tez de burada.

Özet:

Bir imge dizisinde bulunan yüz öznitelik noktalarının otomatik olarak takipedilmesi, ifade tanımayı da kapsayan birçok uygulamanın ilk adımıdır.İşaret dili özelinde bakarsak, ifadeler hem duygusal ifade hem de baş hareketi içerebilen ele ait olmayan işaretler olarakkarşımıza çıkar. Bu çalışmada, Türk İşaret Dili’nde yaygın olarak kullanılan ifadeleri tanımayı amaçladık. Önerdiğimiz sistem iki aşamadan oluşmaktadır: İlkinde, imge dizisindeki her kare için, çok-yönlü (düz, sağa, sola, yukarı) Çok-çözünürlüklü Aktif Şekil Modelleri (ÇÇAŞM) ile yüzdeki nirengi noktaları otomatik olarak saptanır. Bulunan yönlerden şekli modele en iyioturan ve önceki seçilen şekle en yakın olan yönün şekli seçilir. Eğer seçilen şeklin güvenirliği, eşik değerinin altında ise o kare boş bırakılır ve şekil başlangıç durumuna getirilir. Böylece takip edilen şeklin dağılması önlenirve sistemin gürbüz çalışması sağlanır. Boş bırakılan kareler interpolasyon ile doldurulur ve hatalı sonuçları elemek için alfa-trim ortalama süzgeci kullanılır. İkinci aşamada takip edilen noktalar normalize edilir ve çokdeğişkenli Sürekli Saklı Markov Modelleri (SSMM) tabanlı sınıflandırıcıya girdi olarak verilir ve ifade tanınması yapılır. Bulunan sonuçları sınayabilmek için ele ait olmayan ifadelerden oluşan bir video veritabanı topladık. Hem takip hem tanıma kısımları için ÇÇAŞM yöntemini tek-yön/çok-yön ve genel/kişiye-özel çeşitlemeleri ile çalıştırıp sonuçları karşılaştırdık. Çok-yönlü kişiye-özel takipçi en başarılı sonuçları vermektedir ve sistemin gürbüz bir şekilde noktaları takip edebildiği gözlemlenmektedir. Sınıflandırma kısmı için önerilen SSMM sınıflandırıcısını değişik eğitim ve test kümelerinde denedik. Birbirinden farklı sınıflar için başarı çok yüksek gözükmektedir.

Sunumu izle:

Yüz Özniteliklerinin Takibi Ve İşaret Dili İçin İfade Tanıma from İsmail on Vimeo.

MATLAB ile animasyon yapma ve ‘animated gif’ olarak kaydetme

2008 22 Temmuz

Sunum hazırlarken durağan figürler yetmeyebiliyor. Örneğin bir sistemin nasıl yakınsadığını veya salındığını göstermek için animasyon yapmak gerekebiliyor. Bunu da ‘avi’ olarak kaydetmek istemiyorum, ‘gif’ olsun. İnternet sayfasına da koymak kolay olsun. Resimdeki animasyonu oluşturan kod şöyle:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
gifDosyaAdi = 'ornek.gif';
 
% Ornek olsun diye, uc boyutlu bir tane grafik çizelim
% Ama başka grafik de olabilirdi
Z = peaks; surf(Z);
axis tight
set(gca,'nextplot','replacechildren');
for j = 1:20
    surf(sin(2*pi*j/20)*Z,Z)
 
    % Şu anki ekranı alalım
    RGB = frame2im(getframe(gcf));
 
    % GIF olacağı için (örneğin) 256 tane indekslenmiş renge indirgeyelim
    [IND, map] = rgb2ind(RGB, 256);
 
    if j == 1 % İlk kare ise, yeni oluştur
 
        % 'LoopCount' animasyonun ne kadar döneceğini gösteriyor, Inf
        % sonsuz demek. Dokümantasyonda "GIF-Specific Parameters" diye
        % aratırsanız diğer parametreler de çıkar.
        imwrite(IND, map, gifDosyaAdi, 'gif', 'LoopCount', Inf);
 
    else % Değilse, eskisinin peşine ekle
        imwrite(IND, map, gifDosyaAdi, 'gif', 'WriteMode', 'append');
    end
end
close % Figürü kapat

MATLAB ile OpenCV’yi birlikte kullanmak

2008 10 Haziran

Joaquim Luis tarafından yazılan ve benim de eklemeler yaparak geliştirdiğim bir kodu paylaşacağım. Önceki bir yazıda MPT araçkutusunu kullanarak bir resimdeki yüzleri ve gözleri bulmuştuk. Şimdi sadece yüzleri bulacağız ama bu sefer öyle saniyelerce beklemeden, bir saniyeden çok daha kısa bir sürede! Bunu da OpenCV’nin yüz bulma fonksiyonunu MATLAB’ten çağırarak başaracağız. Bunun dışında OpenCV’ye ait olan cvAbsDiff, cvAdd, cvAddS, cvAddWeighted, cvCanny, cvCircle, cvCvtColor, cvFindContours, cvCvtScale, cvDilate, cvDiv, cvApproxPoly, cvEllipseBox, cvErode, cvExp, cvFilter2D, cvFillPoly, cvFlip, cvFloodFill, cvGoodFeaturesToTrack, cvHoughLines2, cvHoughCircles, hypot, cvInpaint, cvLaplace, cvLine, cvLog, cvMatchTemplate, cvMorphologyEx, cvMul, cvPolyLine, cvPow, cvPyrDown, cvPyrUp, cvRectangle, cvResize, cvSmooth, cvSobel, cvSub, cvSubS ve cvPutText fonkiyonlarını da kullanabileceğiz. Bunların hepsini denemedim, garantisi yok. Neyse konuyu pek dağıtmayalım ve yüz bulmak için adımlara geçelim. O kısmını ben ekledim. Diğer fonksiyonların kullanımı için kaynaklarına bakarsınız.

Yazının devamını oku »

« Daha Eski YazılarDaha Yeni Yazılar »