26 Mart 2015 Perşembe

El Cezeri Lab Projelerinin yayınlanacağı yeni bir web sitesi kuruldu

Siirt Üniversitesi Bilgisayar Mühendisliği bünyesindeki El Cezeri Sibernetik Laboratuvarındaki geliştirilen ürünler ve projelerin tanıtımlarının yapıldığı bir web sitesi yayına başladı. Geliştirmeler devam etmektedir.

 elcezerilab


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();        












9 Şubat 2015 Pazartesi

Open Cezeri Libray (OCL) or OpenCezLib (yet another matrix lab) was released

OCL or OpenCezLib stands for Open Cezeri Library (yet another matrix library). This library provides rapid coding as matlab ease of use. If you want to know how can use library please try to utilise test examples at OpenCezeriLibrary\test\test. It is originally developed at Siirt University El-Cezeri laboratory  by Dr. Musa Ataş, in order to establish generic framework , reusable components and software tools for machine vision, machine learning, AI and robotic applications. Currently, it holds following main concepts. 
1- Vision: It can access web cams, imaging source industrial cameras for manuel settings (i.e gain, exposure control) and advanced issues. Studies on accesing Leapmotion and Kinect is still under-development. 
2- Machine learning: It uses Weka Software and some personel coded ML algorithms 
3- CMatrix: Special matrix library called as CMatrix meaning Cezeri Matrix Class. Actually it is regarded as the core class of the OCL. CMatrix class is implemented as Factory Method design pattern so you just need to call getInstance methods to instantiate the matrix object. Another skill of CMatrix is about being Fluent Interface Pattern with method chaining capability. Almost all methods return CMatrix object which enables programmer to write a program in a single line by chaining the methods with dot. This type of coding make programming easy, simple and enjoyable. In the CMatrix class, there exists various well known matlab functions like plot, imshow, cat, rand, linspace and so on. CMatrix is located at the core/center of the OCL and somehow relates to other classes i.e. ImageProcess, FactoryUtils, Weka ML,  etc. User or programmer needs to understand only CMatrix and from there they can reach any other functions of other classes. User needs to interact CMatrix for developing the application and from this point of view approach can be considered as  Facade Design Pattern and hence it is a kind of broker class or main controller class.
Notification: If you think OCL is useful for your project please cite OCL in your studies and papers. Furthermore, do not hesitate contact to me by e-mail :hakmesyo@gmail.com if you have any problem or development requests. We will provide some tutorials and best/good practices about coding/programming with OCL, in the future, 

you can access OCL from links below:

at github https://github.com/hakmesyo/open-cezeri-library

at sourceforge  (under construction)


Some screenshots of OpenCezLib







Dr. Musa Ataş
El-Cezeri Laboratory
Siirt University