24 Mart 2015 Salı

Open Cezeri Library nedir? ne işe yarar? nasıl kullanılır?




Open Cezeri Library yani OCL, Siirt Üniversitesi El-Cezeri Sibernetik ve Robotik laboratuvarında geliştirilmiş bir yazılım kütüphanesidir. Yürütülen Tübitak 113E620 no'lu proje böyle bir projenin çıkmasına ve gelişmesine vesile olmuştur. OCL'nin merkezinde CMatrix isimli bir sınıf vardır. Uygulama geliştiriciler söz konusu sınıftan nesne türeterek birçok metoda erişim sağlayabilmektedirler. Bu yazılımı geliştirmekteki asıl hedef, Matlab'ın sunduğu kodlama rahatlığında Java tabanlı bir yardımcı yazılım paketi geliştirmektir. Genişletilebilir bir mimarisi vardır. Şu an için, El-Cezeri Laboratuvarında geliştirilmekte olan computer -machine-robotic vision ile machine learning, image processing ve artificial intelligence alanları ile ilgili moduller yazılmıştır/yazılmaktadır. İleride başka alanlarla ilgili modüllerle kapsam genişletilecektir. OCL geliştirilirken, iki tür kullanıcı gurubu düşünülmüştür. Birincisi, Matlab bilen ancak script dili olduğundan dolayı üretim boyutu yüzünden uygulamasını JAVA'ya port etmek isteyenler. Bu tür kullanıcılar için Matlab'te kullanılan metodlardan önemli olanları (imshow, plot, imresize, imrotate v.b) aynı isim ile kodlanmıştır. İkinci kullanıcı türü ise genel olarak JAVA'da kod yazmaya aşina olan grup. Bunlar da metodlara geleneksel Java kodlama yaklaşımı ile erişebilmektedirler. Mesela, get, set, is, do, perform, metodları gibi. Matlab'den gelen ve geleneksel kullanıcılar için sadece CMatrix sınıfında uzman olmak yeterlidir. Gerçek zamanlı (real time) uygulama geliştirmek isteyen ve hız optimizasyonları ile ilgilenenenler ise CMatrix sınıfını kullanmadan OCL in temel iskeletini oluşturan FactoryUtils, FactoryMatrix, ImageProcessing gibi sınıfları kullanmaları gerekebilir. Çünkü CMatrix her ne kadar kodlama noktasında kolaylıklar sağlasa da içerisinde yerleşik tip dönüştürücüler ve işlem basamaklarının kaydedilmesi yavaş çalışmasına neden olmaktadır.




Kullanılan Tasarım Kalıpları nelerdir?
---------------------------------------------------------------------------------------------------
CMatrix sınıfı sadece constructor metodunu gizlemesi ve onun yerine getInstance()  static metodunu açmasıyla Factory Method tasarım kalıbını andırır. Ayrıca bu sınıf Facade tasarım kalıbı gibi davranır ve kullanıcının bu sınıfla etkileşime girdiği onlarca sınıfı bilmesine gerek kalmadan kullanımına izin verir. Ayrıca CMatrix Fluent tasarım (veya Method Chaining) kalıbı mantığı ile tasarlanmıştır ve programcı/kullanıcı metodlar arasına nokta "." bırakarak tüm programı isterse tek satırda bitirebilir. Programcı ayrı ayır nesneler veya değişkenler yapıp bunların biribirlerine dönüştürülmesi gibi zaman alıcı ve karmaşık işlemler yapmak yerine program akışına odaklanarak verimli ve zaman etkin bir şekilde uygulama geliştirebilmektedir. Çok özel durumlar haricinde hemen hemen tüm metodlar geri dönüş türü olarak CMatrix nesnesini geri döndürür. 



Örnek-1: 
-----------------------------------------------------------------------------------------------------
4x5 lik random sayılarla dolu bir matris yapmak ve ekranda göstermek istiyoruz.
Java da main metodu veya başka bir metod içerisine 



CMatrix cm=CMatrix.getInstance(4,5).println();




dememiz yeterlidir




Örnek-2:
------------------------------------------------------------------------------------------------------
Diskteki bir görüntüyü yüklemek, griye döndürmek, histogramına bakmak, ve objeyi 30 derece counter clock wise döndermek, ve tüm bu işlem basamaklarını tek satırda yapıp, aralarda süreci izleyebilmek için çıktıları görselleştirmek ve bu arada tüm bu işlemlerin maliyeti toplamda kaç sn olduğunu bilmek istiyorsak, aşağıdaki kodları yazmamız yeterli.


String imagePath="images\\snapshots\\eagle.jpg";       
Başka örnekler ve detayları eklemeye devam edeceğiz.


CMatrix cm = CMatrix.getInstance().tic().
                    imread(imagePath).imshowRGB().
                    rgb2gray().imshow("gray level image").
                    imhist().
                    imrotate(30).imshow().
                    toc();        












Hiç yorum yok:

Yorum Gönderme