31 Mayıs 2014 Cumartesi

Matlab İle Videodan Frame Yaklama

Bu yazımda Matlab İle Videodan Frame Yaklama konusu işlenecek şimdilik sadece kodu yazılacak vakit olduğu zaman anlatımı kodun altına ekleyeceğim. Umarım işinize yarar.


Function video()
tic
readerobj = mmreader(Videonun Yolu’);
vidFrames = read(readerobj);
numFrames = get(readerobj, 'numberOfFrames');
for i=1:numFrames
    img = read(readerobj,i);
 
    drawnow
end
toc
 end

30 Mayıs 2014 Cuma

Yakın Alan İletişimi (Near Field Communication - NFC)

NFC Nedir?

Yakın Alan İletişimi (Near Field Communication - NFC) iki elektronik cihazın kolay, basit ve güvenli haberleşmesi için tasarlanmış kısa mesafe temassız teknoloji standardıdır. NFC haberleşmesi iki NFC uyumlu cihazın birbirine birkaç santimetre yaklaştırılması ile aktifleştirilir. NFC uygulamaları; ödeme ve toplu taşıma biletleri gibi temassız işlemleri, takvim senkronizasyonu veya elektronik kartvizit gibi basit ve hızlı veri transferini ve dijital içeriklere erişimi kapsamaktadır. Daha kapsamlı açıklayacak olursak;


Bazı etiketleri (Aşağıdaki resimdeki gibi) ve küçük vericilere sahip cihazları kapsayan pasif NFC cihazları, diğer cihazlara kendine ait bir enerji kaynağına ihtiyaç duymadan veri gönderebiliyor. Fakat diğer cihazlardan gelen herhangi bir veriyi işleyemiyorlar ve başka bir pasif NFC cihazıyla bağlantı kuramıyorlar. Tabi burada “cihaz” olarak bahsettiğimiz şey basit bir etiket de olabilir. Örneğin bir dergiye reklam amacıyla yerleştirilmiş bir etiket telefonunuzu yaklaştırdığınızda sizi o ürünün direkt internet sayfasına yönlendirme görevini yürütebilir.

Aktif NFC cihazları ise hem veri gönderebilir hem de veriyi alıp işleyebililer. Ayrıca kendi aralarında ya da pasif NFC cihazlarıyla da çalışabilirler. Cep telefonları aktif NFC cihazlarına en güzel örneklerden birisi. Tabi toplu taşıma kartları ve “temazsız ödeme”  özelliğine sahip banka kartları da bu teknolojinin kullanıldığı güzel örnekler. NFC veri aktarım hızı saniye başına kilo bit (kbps) olarak ölçülür. NFC standardı mevcut altyapılar ile birlikte çalışabilmek için farklı hızları desteklemektedir. Mevcut hızlar 106kbps, 212kbps ve 424kbps'dır.
Çalışma Prensibi

Tıpkı Bluetooth, WiFi ve diğer kablosuz bağlantılarda olduğu gibi NFC teknolojisi de radyo dalgaları üzerinden veri gönderme yöntemiyle çalışıyor. Aslında Yakın Alan İletişimi kablosuz veri transferi standartlarından biri olarak geçiyor ve bu özelliği barındıran cihazların, sorunsuz ve düzgün çalışabilmesi için standartlar dahilinde bir takım özelliklere sahip olması gerekiyor. NFC’ de kullanılan teknoloji eski RFID “Radio-frequency identification” (radyo frekansı tanımlama) fikrine dayanıyor. Yani veri transferi elektromanyetik indüklemeyle yapılıyor. (Manyetik alan altına giren kapalı devrelerde bir akım oluşuyor ve oluşan bu akımla radyo dalgaları yayılabiliyor. Manyetik alan yardımıyla kapalı devreden akım geçirme işlemine indükleme deniliyor)

Not: Eğer kapalı devreden bir akım geçerse, bu akımın etkisiyle bir manyetik alan oluşur. Aynı şekilde eğer kapalı bir devre manyetik alana yaklaştığında içerisinden akım geçer. Bu geçen akım vasıtasyıla pasif NFC cihazları güç kaynağına ihtiyaç duymadan çalışır
NFC teknolojisini Bluetooh ve WiFi den ayıran en önemli bu özellik sayesinde veri göndermenin yanında pasif cihazda elektrik akımı indüklenebiliyor (etki ile başlatılabiliyor). Açıklamak gerekirse aktif cihaz pasif cihaza yaklaştırıldığında, veri göndermenin yanı sıra aktif cihazdan yayılan manyetik dalgalar pasif cihazda elektrik akımı oluşmasına sebep oluyor. Dolayısıyla pasif cihazın kendine ait bir elektrik kaynağı bulundurması gerekmiyor. Fakat burada fizik biliminin derinlerine inmeyeceğim. Sadece anlaşılması gereken konu, aktif cihaz vasıtasıyla pasif cihaza enerji aktarılabiliyor bu nedenle pasif cihazlar ekstra güç kaynağına ihtiyaç duymuyor. Akıllara şu soru muhakkak gelmiştir “Peki telefonlarımız bu şekilde niye şarj edilemiyor?” Piyasada bulunan kablosuz şarj özelliği (QI şarj cihazları) aslında NFC teknolojisine dayanıyor. Fakat bu teknoloji vasıtasıyla oluşturulan akım düşük seviyelerde olduğu için maalesef yeterince güç elde edilemiyor.
NFC teknolosijiyle veri iletimi için transfer frekansı 13.56 megahertz ve gönderdiğimiz veriler saniyede 106,212 veya 424 kilobit hızlarda gönderilebiliyor ki kartvizit palşaımı, müzi, resim transferi gibi işlemler için gayet yeterli bir hız.

Cihazlar arasında değiş-tokuşu yapılacak verinin çeşidinin belirlenmesi için NFC teknolojisinde, uyumlu cihazlarda çalışmak üzere 3 farklı mod bulunur. Akıllı cep telefonlarında muhtemelen en çok kullanılan mod, NFC barındıran cihazlarda birbiri arasında farklı verilerin paylaşılmasını sağlayan peer-to-peer (eşler arası) modudur. Bu modda cihazlar birbiriyle iletişime geçerek veri gönderirken akif, veri alırken pasif konumda çalışırlar.
Diğer taraftan okuma/yazma modu tek yönlü veri iletim modudur ve aktif cihazın (genellikle akıllı cep telefonlarımız) başka bir cihaz üzerinde yazılı olan veriyi okumasında kullanılır. Örneğin yukarıda bahsettiğimiz dergi reklam etiketlerindeki veriyi okuma gibi.
Son çalışma modu “kart benzetim” modu. Bu modda NFC cihazı, ödeme yapabilmek için temazsız kredi kartı veya  toplu taşıma kartı olarak kullanılabilir.
NFC'nin Özellikleri

Etkileşim (Interactivity):
Cep telefonunun kullanıcı fonksiyonları (ekran, titreşim, ses, tuşlar vb.), NFC servislerinin interaktif olmasını sağlamaktadır. Örneğin alışveriş kayıtları ekranda görüntülenebilir veya kullanıcılar mevcut uygulamaları dinamik olarak açıp/kapatabilirler.
Uzaktan Çoklu Uygulama Yönetimi (Remote Multi-Application Management):

Temassız kartlarda kullanılan çoklu uygulama yönetimine mobil network sayesinde uygulama indirme, kişiselleştirme, açma/bloke etme gibi ilave avantajlar gelmektedir. Yönetim fonksiyonları eş zamanlı olarak uzaktan kontrol edilebilir böylelikle bir kullanıcı yeni bir servis kullanmaya, başvurusunun ardından anında başlayabilir. Kullanıcı ayrıca telefonunun kaybolması/çalınması durumunda servis sağlayıcılarından NFC hizmetlerinin durdurulmasını anında talep edebilir. Bu bakımdan kullanıcılara ve hizmet sağlayıcılara NFC servisleri üzerinde güvenlik ve risk kontrolleri sağlanmıştır.
Uzaktan Kullanıcı Yönetimi (Remote User Management):
Kullanıcı yönetimi fonksiyonları ile örneğin servis sağlayıcılar kullanıcı izni ile NFC servisi kullanım kayıtlarına erişebilir ve kişiye özel bilgi gönderebilir.
NFC ve Kullanım Alanları

Birçok Kullanım alanına sahip olan nfc’e aşağıdaki örnekleri belirtirsek çok açıklayıcı olacaktır.
NFC ile Ödeme
Cep telefonlarında banka kartı, kredi kartı gibi birden fazla kart saklanabilir; böylelikle ödeme sırasında cüzdanınızdan kart seçip kasiyere vermek yerine cep telefonu üzerinden isteğiniz kartı tuşlayıp temassız terminale yaklaştırarak ödeme yapabilirsiniz.
Turnikelerde Geçiş Kolaylığı
İşe gelirken turnikelerden ayrı bir kartla geçmek yerine NFC uyumlu cep telefonunuzu terminale yakınlaştırarak geçebilirsiniz.
Ulaşım Ödemelerinde NFC

NFC, toplu taşımada kart taşımak yerine cep telefonunuza yüklemiş olduğunuz kartınızla hem kartınızın avantajlarından yararlanmaya devam etmenizi, hem de sadece cep telefonu taşıyarak istediğiniz yere ulaşabilmenizi sağlayacaktır.
Tüm Biletleriniz NFC'li Cihazınızda
NFC'li cep telefonları ile biletlerinizi de elektronik olarak alıp kullanabileceksiniz. Cep telefonunuz üzerindeki bileti gösterip stadyuma girebilecek, istediğiniz zaman büfelerde bulunan temassız terminallerden yiyecek ve içeceğinizi satın alabileceksiniz.
Otomatlarda NFC ile Ödeme
Otomatlardan istediğiniz ürünü seçtikten sonra ödemenizi cep telefonunuzu yaklaştırarak yapabilirsiniz.
Veri Alışverişi
İş görüşmelerinde kartvizit alıp vermek NFC ile çok kolay. NFC uyumlu iki cep telefonunu birbirine yakınlaştırarak kartvizit bilgilerinizi paylaşabilirsiniz.
Parkmetrelerde NFC Kolaylığı
Aracınızı park ettikten sonra temassız terminallere cep telefonunuzu yaklaştırarak ödemelerinizi NFC ile yapabileceksiniz.
NFC ile Tanıtım ve Reklam
NFC uyumlu cep telefonunuzu NFC etiketine yaklaştırarak etikette tanımlı hizmetten veya üründen yararlanabilirsiniz. Örneğin akıllı posterlerde bir kafeden kahve kuponu kazanabilir veya en favori müzik grubunuzun şarkısını cep telefonunuza indirebilirsiniz. Seyahatlerinizde NFC uyumlu cep telefonunuz sizin bir yardımcınız olabilir; turist kiosklarından istediğiniz dilde bilgi alabilir, müzeye daha adımınızı atmadan içeride hangi sergilerin olduğunu öğrenebilirsiniz.
NFC gelecekte bize ne faydalar sağlayacak?
NFC sayesinde çevremizden bilgi alabileceğiz. NFC teknolojisi cep telefonlarına gündelik hayatta kullandığımız objelere yerleştirilebilecek etiketlerle yüklenmiş bilgileri okuma özelliği kazandırıyor. Bu etiketler poster, otobüs durak işareti, sokak tabelası, ilaç, sertifika, paketlenmiş ürün ve daha birçok obje üzerine yerleştirilebilir.
Bakın NFC teknolojisi hayatınızı nasıl kolaylaştırabilir?
Hepimiz gün içinde birçok poster ve billboard gibi reklam tabelasının yanından geçip gidiyoruz. Bunların çoğunu o an görüp unutuyor ve ilgilimizi çeken bir kampanyaya unuttuğumuz için katılamayabiliyoruz. Posterlere ve reklam panolarına NFC uyumlu etiketlerin yerleştirilmesi ile etiketleri NFC uyumlu cep telefonumuzla okuyabilir ve kampanyalardan unutmadan yararlanabiliriz.
NFC uyumlu etiketler otopark bileti, kredi kartı ve para üzerine gerçekliğini ispat etmek için yerleştirilebilir. NFC hologramı kopyalanmaya karşı dirençlidir ve çalınması durumunda iptal edilebilir. NFC basit ve kolay kurulabilir bağlantıların oluşmasını sağlar. Örneğin Bluetooth kulaklık setinizi cep telefonunuza sadece yakın tutarak iki cihaz arasında bağlantının kurulmasını sağlayabilirsiniz.
NFC teknolojisini ticari başarıya götürecek faktörler nelerdir?
NFC teknolojisinin hizmet sağlayıcılar ve cihaz üretici firmalar tarafından benimsenmesinin dört temel nedeni bulunmaktadır:
Elektronik ihracın düşük maliyeti. Toplu taşıma veya event biletleme operatörleri gibi çoklu bilet ihraç eden operatörler elektronik biletleme ile maliyetlerin büyük ölçüde azaldığını görmüşlerdir. Maliyetleri düşürebilmek için güvenliğe duyarlı havayolları da e-bilet'e geçmişlerdir.
Etkileşimli hizmetlerden gelen gelir artışı. Mobil network operatörleri ve içerik sağlayıcılar, kullanıcıların katma değerli hizmetlerinden yararlanmasıyla gelir elde etmektedirler. NFC kullanıcıyı kolayca ulaşabileceği reklam ve değerli bilgi ile çevrelemektedir.
NFC uyumlu cihazlar zengin medya içeriği tüketimini yönlendirmektedir. NFC, tüketicilerin zengin medya içeriğini satın aldığı, oyun oynadığı ve paylaştığı ileri kişisel cihazlar pazarının hızlı büyümesini sağlayacaktır.
NFC uyumlu servisler için tüketicilerin tercihi. Kullanıcıların satın aldıkları bileti nasıl kullanacakları konusunda seçme şansı olmayabilir, ancak kullanıcılar nasıl ödeme yapacaklarını seçebilirler. Kolaylık bir fark yaratıcıdır; kullanımı kolay ödeme temassız ve NFC teknolojisinin yaygınlaşmasına ön ayak olacaktır.

BLEUTOOTH’LA KARŞILAŞTIRMA
Bluetooth teknolojisinin yıllardır süregelen yaygınlığını düşünerek NFC’nin gereksiz olduğunu düşünebilirsiniz. Fakat ortada bazı durumlarda NFC’ye büyük avantajlar sağlayan ciddi teknolojik farklılıklar bulunmakta.
NFC’nin lehine olan en büyük tartışmalardan birisi Bluetooth teknolojisine nazaran ihtiyaç duyulan enerjinin düşüklüğü (hatta düşük enerjili Bluetooth olara bilinen Bluetooth 4.0’dan bile daha düşük). E tabi bu özelliği NFC’yi pasif cihazlar için mükemmel kılıyor. Özellikle reklam için kullanılanlarda. Çünkü ekstradan güç kaynağına ihtiyaç duymuyor.
Tabi ki sistemin düşük güçle çalışmasının bir dezavantajı da var: menzil. NFC cihazları yaklaşık 10 santim menzile sahipken, Bluetooth cihazları 10 metre ve üzerindeki mesafelerden dahi veri transferi yapabiliyor. Düşük güçle çalışmanın başka bir dezavantajı da hız. Bluetooth 2.1’in 2.1 Mbit/s ve düşük enerjili Bluetooth’un 1 Mbit/s transfer hızları dikkate alındığında NFC’deki maksimum değer 424 kbit/s epey bir yavaş kalıyor. 

Fakat NFC’deki bağlanabilirlik, elle eşleştirmenin gerekmediği indüktif eşlemeye dayandığından Bleutooth’a nazaran daha hızlı. NFC cihazları kendi aralarında saniyenin 10 da birinde bağlantı kurabiliyorlar. Söz konusu hızlara Bluetooth teknolojisi ancak 4.0 sürümüyle kavuştu.
Bir temassız kart ile etiket arasındaki fark nedir?


Teknik olarak bir temassız kart ve etiket birbirinin aynıdır. Ancak, ödeme ve biletlemede kullanılan temassız kartlar güvenlik gerektiren veriyi depolayabilecek ilave teknolojiye sahip olabilir.

Sitenize Google Dünya Animasyonu Ekleyin

Sitenize Google Dünya Animasyonu Eklemek istiyorsanız aşağıdaki kodu ilgili div'e entegre ediniz.

<embed width="240" height="240" type="application/x-shockwave-flash" quality="high" allowscriptaccess="always" allownetworking="all" wmode="window" flashvars="i=831wnf5ummw&amp;s=240&amp;m=1&amp;v=false&amp;r=false&amp;b=2897ab&amp;n=true&amp;c=2897ab" src="http://ri.revolvermaps.com/f/g.swf">
<script type="text/javascript" src="http://ji.revolvermaps.com/2/1.js?i=831wnf5ummw&amp;s=240&amp;m=1&amp;v=false&amp;r=false&amp;b=2897ab&amp;n=true&amp;c=2897ab" async="async"></script>



29 Mayıs 2014 Perşembe

Java'da ENUM(Numaralandırmalar) Kullanımı

ENUM

       Enum program içersinde kullanılan sabitlerin anlamdırılması ile sabitlere isim vererek bir grup altında toplamamızı sağlar. Bu gruplara enum (enumeration - numaralandırma) denir. Enum java da sadece değişken değil metot olarak ta kullanılır.
Bu yazım da java'da enum yapısını anlatacağım. Bunun için örnek üzerinde anlatacak olursam.

/**
 *
 * @author ammar.aslan
 */
public class deneme {

    public enum Deneme
    {
        isim (0), sifre (1), kulaniciadi (2);
        private int donus;
        private Deneme(int test)
        {
            this.donus=test;
        }
        public int Donus()
        {
            return donus;
        }
    };
    public static void main(String[] args) {
        System.out.println(Deneme.isim.donus);
        System.out.println(Deneme.kulaniciadi.Donus());
    }
}

Ekran Çıktısı:
0
2

Enumun Sağladıkları.
Yazılabilirlik
Okunabilirlik
Basitlik

28 Mayıs 2014 Çarşamba

SimpleCv

  SimpleCV

SimpleCV bilgisayar görme uygulamaları oluşturmak için bir açık kaynak kodlu bir framework’ tür. SimpleCV ile bit derinliği, dosya formatları, renk uazyları, buffer bellek yönetimi, özdeğerler, veya matrise karşılık bitmap depolama öğrenmek zorunda kalmadan OpenCV gibi birçok yüksek-güçlü bilgisayar görme kütüphanelerine erişilebilir. Bu da bilgisayarlı görme uygulamalarında daha kolay işlem yapabilme anlamına gelmektedir. 

1 pcDuino Üzerinde SimpleCV
Burada pcDuino üzerine UVC özellikli bir web kamera bağlanarak, kart üzerinde SimpleCV kurulumu ve uygulanan bazı algoritmalar anlatılmıştır.

2 Lubuntu Üzerine SimpleCV Kurulumu
Lubuntu üzerinde SimpleCv kurulumu için Lubuntu’nun teminal ekranına aşağıdaki kodu yazıyoruz.
·         $sudo apt-get install ipython python-OpenCV python-scipy python-numpy
·         python-setuptools python-pip
·         $sudo pip install https://github.com/ingenuitas/SimpleCV/zipball/master
·         $sudo apt-get install python-pygame
·         $sudo apt-get install python-imaging
Komutları ile ilgili paketleri yükledikten sonra SimpleCV kurulumunu tamamlamış olacağız. Şekil .3’te Ara yüz kısmı gösterilmektedir.

Şekil 3. SimpleCV komut satırı

3 SimpleCV Örnekleri

3.1 - Sobel Kenar Belirleme Algoritması
def halfsies(left,right):
    result = left
    crop   = right.crop(right.width/2.0,0,right.width/2.0,right.height)
    result = result.blit(crop,(left.width/2,0))
    return result
img = Image('http://i.imgur.com/lfAeZ4n.png')
output = img.edges(t1=160)
result = halfsies(img,output)
result.show()


Şekil 1.  SimpleCV Sobel Kenar Belirleme Algoritması

3.2 – Görüntüyü İkili Görüntüye Çevirme Algoritması
Bu kısımda verilen bir görüntüyü pcDuino kartı üzerinde ikili yani siyah beyaza çevirme işlemi görülmektedir.
from SimpleCV import Image, Color, Display
def halfsies(left,right): 
result = left
crop   = right.crop(right.width/2.0,0,right.width/2.0,right.height)
result = result.blit(crop,(left.width/2,0))
return result
img = Image('http://i.imgur.com/lfAeZ4n.png')
output = img.binarize(90).invert()
result = halfsies(img,output)
result.show()
result.save('juniperbinary.png')
 

Şekil 1. Görüntüyü İkili Görüntüye Çevirme Algoritması

PcDuino

Nedir Bu PcDuino?

Son zamanlarda açık donanım ekosistemi, basit bir grafiksel arayüz ve basit bir AVR mikroişlemciden gücünü alan Arduino kartı ile birlikte bir açık kaynak donanım dalgası başladı. Bunun üzerine Rasppery PI isimli ve daha sonra BeagleBone gibi, ARM işlemcili mini PC’ler ile yeni bir trend ortaya çıktı. Yakın zamanda LinkSprite firması pcDuino olarak adlandırdığı ve Arduino ile PC platformlarını bir araya getiren ARM tabanlı güçlü bir mini PC üretti.Bu kart sayesinde geliştiriciler hem açık donanım hem de Linux açık yazılım kaynaklarıyla geliştirmeler yapabilme şansına erişmiş oldular. 

1 pcDuino Kartının Özellikleri
            PcDuino kartının özellikler aşağıdadır.
-          İşlemci:                       AllWinner A10 SoC, 1GHz ARM Cortex A8
-          Grafik İşlemci:                       OpenGL ES 2.0, OpenVG 1.1 Mali 400 Core
-          DRAM:                       1GB
-          Onboard Hafıza:         2GB Flash Hafıza (Micro-SD slotu ile 32GB a kadar destek)
-          Video Çıkışı:               HDMI
-          İşletim Sistemi:                       Linux 3.0 – Ubuntu 12.04 – Android ICS 4.0
-          Genişleme Arayüzleri:            Arduino Pinleri
-          Ağ Arayüzü:               USB Wi-Fi uzantısı (Harici Edinilen) – Ethernet10/100 Mbps
-          Güç:                            5V – 2A

pcDuino Kartının Giriş/Çıkış Pinleri
-          En fazla 4mA akım çıkışlı 14 adet genel amaçlı giriş-çıkış pinleri
-          Bir UART TX ve UART RX iletişim girişleri
-          24 MHz’e kadar destekli iki adet PWM pini
-          2 adet 6 bit, 4 adet 10 bit çözünürlüklü ADC pini
-          4 adet SPI pini ve 2 adet I2C pini
Arduino da yazılan kodlar bu giriş çıkış pinleri üzerinde doğrudan çalıştırabilir.


Şekil 1. pcDuino fiziksel görünüş

Şekil 2. pcDuino giriş çıkış pinleri ve genel şeması



Opencv Kütüphanesi

Opencv Kütüphanesi
OpenCV, bir resim ya da video içindeki anlamlı bilgileri çıkarıp işleyebilmek için INTEL tarafından C ve C++ dilleri kullanılarak geliştirilmiş, açık kaynak kodlu bir “Görüntü İşleme” kütüphanesidir. OpenCV kütüphanesi, beş temel bileşenden oluşmaktadır. Bu bileşenlerin dört tanesi Şekil 1’de görülmektedir

Şekil 1. OpenCV’nin 4 Temel Bileşeni

Computer Vision (Bilgisayarla Görü/Görme) kelimesinin baş harfleri kullanılarak isimlendirilen CV bileşeni, temel resim işleme fonksiyonları ve Bilgisayarla Görü/Görme için kullanılan yüksek seviyeli algoritmaları bünyesinde barındıran beş temel kütüphaneden biridir. Machine Learning Library kelimesinin baş harfleri kullanılarak isimlendirilen MLL bileşeni, adından da anlaşılacağı üzere Makina Öğrenmesi dalı için gerekli istatistiksel verilere ulaşmak, mevcut verileri sınıflandırmak için kullanılan fonksiyonları/araçları içeren diğer bir kütüphanedir. HighGUI bileşeni, slider, form gibi OpenCV kütüphanesi içerisinde tanımlanmış pek çok nesneyi yaratabilmemizi sağlayan bir grafik arabirimi olmakla beraber, resim ve videoları kaydetmek, yüklemek, hafızadan silmek için gerekli giriş/çıkış (I/O) fonksiyonlarını da içerir.

         CXCore bileşeni, OpenCV’ye ait IplImage, cvPoint, cvSize, cvMat, cvHistogram...vs gibi veri yapılarını bünyesinde barındıran, XML desteği de sağlayan bir kütüphanedir. Son olarak CvAux bileşeni, şablon eşleştirme (template-matching), şekil eşleştirme (shape matching), bir objenin ana hatlarını bulma (finding skeletons), yüz tanıma (face-recognition), ağız hareketleri izleme (mouth-tracking), vücut hareketlerini tanıma (gesture recognition) ve kamera kalibrasyonu gibi daha pek çok deneysel algoritmaları bünyesinde barındıran kütüphanedir. OpenCV kütüphanesi, BSD lisansı ile lisanslanmıştır. Özgür lisanslar içinde en özgürü olarak bilinen bu lisansta kodu alan kişi, istediği gibi kullanma özgürlüğüne sahiptir. Akademik ve ticari kullanımı ücretsiz olan bu kütüphane Windows, Linux, MacOS X gibi farklı platformlarda kullanılabilir.
        Intel’in görüntü işleme laboratuvarlarında geliştirilen ve hız açısından optimize edilen OpenCV Kütüphanesi gerçek zamanlı uygulamalar hedef alınarak geliştirilmiştir. USB 2.0 teknolojisi ile birlikte artık standart bir bilgisayarda bile gerçek zamanlı uygulamalar çalıştırılabilmektedir. Tüm bu gelişmeler oyuncak yapımından endüstriyel üretime kadar pek çok alanda bu kütüphanenin kullanılmasına yol açmıştır. Kullanılan Noktalar ve İşletim Sistemleri aşağıdaki gibidir.

PROGRAMLAMA DİLLERİ:                            İŞLETİM SİSTEMLERİ:
C/C++                                                             LİNUX
JAVA                                                             ANDROID
.NET                                                               iOS
PHP                                                                BLACKBERRY 10
MATLAB                                                       WINDOWS
PYTHON       
DELPHI         

1. PC Üzerinden Kurulumu
Öncelikle Lubuntu işletim sisteminde OpenCV.sh diye bir text dosyası oluşturup içerisine aşağıdaki kodu yazıp içeriğindeki paket ve kütüphaneleri yüklüyoruz.
OpenCV.sh text içeriği:
version="$(wget -q -O - http://sourceforge.net/projects/OpenCVlibrary/files/OpenCV-unix | egrep -m1 -o '\"[0-9](\.[0-9])+' | cut -c2-)" echo "Installing OpenCV" $version mkdir OpenCV cd OpenCV echo "Removing any pre-installed ffmpeg and x264" sudo apt-get -qq remove ffmpeg x264 libx264-dev echo "Installing Dependenices" sudo apt-get -qq install libOpenCV-dev build-essential checkinstall cmake pkg-config yasm libtiff4-dev libjpeg-dev libjasper-dev libavcodec-dev  libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev python-dev python-numpy libtbb-dev libqt4-dev libgtk2.0-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils ffmpeg echo "Downloading OpenCV" $version
wget -O OpenCV-$version.zip http://sourceforge.net/projects/OpenCVlibrary/files/OpenCV-unix/$version/OpenCV-"$version".zip/download echo "Installing OpenCV" $version
unzip OpenCV-$version.zip cd OpenCV-$version mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON .. make -j2 sudo make install sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/OpenCV.conf' sudo ldconfig echo "OpenCV" $version "ready to be used"

Daha sonra bu text dosyasının kaydedildiği yere terminal üzerinden gelip terminalde açılabilirliğini aşağıdaki komut ile belirliyoruz. Ve daha sonra çalıştırıyoruz.
·         chmod +x OpenCV.sh
·         ./OpenCV.sh

2. PcDuino Üzerine kurulumu:
Öncelikle Lubuntu işletim sisteminde OpenCVBefore.sh diye bir text dosyası oluşturup içerisine aşağıdaki kodu yazıyoruz. [13]
OpenCVbefore.sh text dosyasının içeriği:
sudo apt-get install libgtk2.0-dev sudo apt-get install pkg-config echo "Kurulum Tamamlandı"
echo "AMMAR ASLAN BAŞARIYLA YÜKLENDİ" ve çalıştırıyoruz. Ayrıca  OpenCVSetupScriptForPcDunioAndRasbrreryPi.sh adına bir text daha oluşturup aşağıda belirtilen kısmı ekleyip derliyoruz. version="$(wget -q -O -  http://sourceforge.net/projects/OpenCVlibrary/files/OpenCV-unix | egrep -m1 -o '\"[0-9](\.[0-9])+' | cut -c2-)"
echo "Installing OpenCV" $version mkdir OpenCV cd OpenCV echo "Removing any pre-installed ffmpeg and x264" sudo apt-get -qq remove ffmpeg x264 libx264-dev echo "Installing Dependenices" sudo apt-get -qq install libOpenCV-dev build-essential checkinstall cmake pkg-config yasm libtiff4-dev libjpeg-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev python-dev python-numpy libtbb-dev libqt4-dev libgtk2.0-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils ffmpeg echo "Downloading OpenCV" $version wget -O OpenCV-$version.zip http://sourceforge.net/projects/OpenCVlibrary/files/OpenCV-unix/$version/OpenCV- "$version".zip/download echo "Installing OpenCV" $version unzip OpenCV-$version.zip cd OpenCV-$version mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON -D BUILD_EXAMPLES=ON .. make -j2 sudo make install sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/OpenCV.conf' sudo ldconfig echo "OpenCV" $version "ready to be used" echo "Kurulum Tamamlandı" echo "AMMAR ASLAN BAŞARIYLA YÜKLEDİ  !!"


Bu işlemlerden sonra OpenCV işletim sisteminin sistem dosyasına kayıtlı ve C++ dilini derlemeye uygun hâle geliyor. 

Geany Platformu

Geany Platformu
Geany, Scintilla tabanlı bir tümleşik geliştirme ortamı ve basit bir metin düzenleme yazılımıdır. Genel Kamu Lisansı ile lisanslanmış bir özgür yazılımdır. C, C++ , Java, JavaScript, PHP, HTML, CSS, Python, Perl ve Pascal dillerini destekler. Windows, Linux, BSD ve Solaris gibi işletim sistemlerinde çalışır. Türkçe dil desteği de içermektedir. Uygulamalarımızı derlemek için Geany üzerinde de bazı ayarlama yapmamız gerekti. Bu ayarlamaların sebebi OpenCV için gerekli kütüphaneleri derleme anında görememesinden kaynaklanıyor. Resim 1 de Geany IDE platformu görüntüyü görünmektedir.

Şekil 1. Geany IDE Platformu
Geany programını hem sanal hemde pcDuino üzerinde kurulumu şu şekildedir. Kod Satırına yani terminale aşağıdaki komutları yazıyoruz.
·         Sudo apt-get install gcc
·         Sudo apt-get install geany
Lubuntu üzerinde yapmış olduğumuz uygulamaların tamamını OpenCV ile entegre olan Geany platformunda gerçekleşirdik.