11 Haziran 2017 Pazar

Algoritma Analizi

Yüz Algılama Projesi

Projemiz, upload edilen bir fotoğrafın veya videonun içeriğinde bulunan yüzleri algılayarak, bu yüzleri kare açan bir uygulamadır. 

Karmaşıklık
       

      
     for (i = 0; i < seq.length; i++) if (node[i].element) {
        for (var root = i; node[root].parent != -1; ) root = node[root].parent;
        for (j = 0; j < seq.length; j++) if (i != j && node[j].element && gfunc(node[i].element, node[j].element)) {
         for (var root2 = j; node[root2].parent != -1; ) root2 = node[root2].parent;
            if (root2 != root) {
               node[root].rank > node[root2].rank ? node[root2].parent = root : (node[root].parent = root2, 
               node[root].rank == node[root2].rank && node[root2].rank++, root = root2);
               for (var temp, node2 = j; node[node2].parent != -1; ) temp = node2, node2 = node[node2].parent, 
               node[temp].parent = root;
               for (node2 = i; node[node2].parent != -1; ) temp = node2, node2 = node[node2].parent, 
               node[temp].parent = root;
               }
            }
         }
       
 

Yukarıdan da görüldüğü gibi, algoritmanın karmaşıklığı O(n^4).
Uygulamanın inputları, 24x24 boyutundan büyük fotoğraf veya video dosyalarıdır.
Eğitim için kullanılan algoritma: Haar feature-based cascade 

Haar feature-based Yöntemi

Haar feature-based cascade sınıflandırıcılarını kullanan Nesne Algılama, Paul Viyola ve Michael Jones'un kağıtlarında "Basit Özelliklerin Yaygınlaştırılmış Bir Basamaklandırmasını Kullanan Hızlı Nesne Algılama" adlı çalışmasında 2001'de önerilen etkili bir nesne saptama yöntemidir. Bu, bir makine öğrenmeye dayalı bir yaklaşımdır; Cascade işlevi bir çok olumlu ve olumsuz görüntülerden eğitim alır. Ardından, diğer görüntülerdeki nesneleri algılamak için kullanılır.Burada yüz tanımayla çalışacağız. Başlangıçta, algoritmanın sınıflandırıcıyı eğitmek için bir çok pozitif resim (yüz resimleri) ve negatif resimler (yüzleri olmayan resimler) gerekir. Ardından, özellik eklemeliyiz. Bunun için, aşağıdaki resimde gösterilen Haar feature-based özellikleri kullanılır. Her özellik, siyah dikdörtgen altındaki piksellerin toplamından beyaz dikdörtgen altındaki piksellerin toplamını çıkararak elde edilen tek bir değerdir.







Artık, her bir çekirdeğin olası tüm boyutları ve konumları, birçok özelliği hesaplamak için kullanılabilinir. (Sadece ne kadar çok hesaplamanın gerekeceğini, 160000 özellikli üzerinden 24x24 pencere bile alınır). Her özellik hesabı için, beyaz ve siyah dikdörtgenlerin altındaki piksellerin toplamını bulmamız gerekir. Bunu çözmek için, integral görüntüleri tanıtılır. Sadece dört piksel içeren bir işlem için piksel toplamının hesaplanmasını, piksel sayısının ne kadar büyük olabileceğini basitleştirilir.Bu işlemleri çok hızlı yapar.


Ancak hesapladığımız bu özelliklerin hepsinde, bunların çoğu ilgisizdir. Örneğin, aşağıdaki resmi düşünün. Üstteki satır iki iyi özelliği gösterir. Seçilen ilk özellik, göz bölgelerinin genellikle burun ve yanak bölgelerinden daha koyu olduğu özelliklere odaklandığı görülüyor. Seçilen ikinci özellik, gözlerin burun köprüsünden daha koyu olduğu özelliklerine dayanır. Ancak yanaklarda veya başka bir yerde uygulanan pencerelerin alakasız olduğu söylenebilir. Peki, 160000+ özelliğin en iyi özelliklerini nasıl seçebiliriz? Adaboost tarafından sağlanır.


Bunun için her eğitim görüntüsüne her bir özelliği uyguluyoruz. Her özellik için yüzleri pozitif ve negatif olarak sınıflandıran en iyi eşiği bulur. Ancak açıkçası, hatalar veya yanlış sınıflamalar olacaktır. Asgari hata oranına sahip özellikleri seçiyoruz; bu, yüzü ve yüz olmayan resimleri en iyi sınıflandıran özellikler anlamına geliyor. (Süreç bu kadar basit değildir Her görüntünün başında eşit ağırlık verilmektedir Her bir sınıflandırmadan sonra, yanlış sınıflandırılmış görüntülerin ağırlığı artar, sonra aynı işlem yapılır Yeni hata oranları hesaplanır Ayrıca yeni ağırlıklar da hesaplanır. Gerekli doğruluk veya hata oranı elde edilene veya gerekli özellik sayısı bulunana kadar işlem devam eder).


Aşağıdaki değişkenler bulunan yüzlerin bir dizisini nesne olarak döndürür:
X - resimdeki yüzün X koordinatı
Y - resimdeki yüzün Y koordinatı
Width - yüzün genişliği
Height - yüzün yüksekliği
PositionX - dosyaya göre X konumu
PositionY - dosyaya göre Y konumu
OffsetX - ofset ebeveyine göre X konumu
OffsetY - ofset ebeveyine göre Y konumu
ScaleX - Orijinal görüntü genişliği ile görüntülenen genişlik arasındaki oran
ScaleY - Orijinal görüntü yüksekliği ile görüntülenen yükseklik arasındaki oran
Confidence - Güven düzeyi

Ayarlar
interval - Aralık (default 4 )
MinNeighbors - Dikdörtgen gruplarını atmak için kesme seviyesini yüz olarak ayarlayan minimum komşu eşiği (default 1)
confidence - Minimum güven (default null)
async - Kişi varsa senkronizasyon modu (default false). Eşzamansız mod kişileri kullanır ve komut dosyasının aynı etki alanında olması gerekir.
grayscale - İşlenmeden önce gri tonlamaya dönüşür. (default true)
complete - Geri arama fonksiyonu, algılama tamamlandıktan sonra tetiklenir.
complete: function (faces) {
   // ...
}
error - Hatalar durumunda geri arama fonksiyonu tetiklenir.
error: function (code, message) {
   // ...
}
JQuery ve eklentiyi dahil ettik.
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="path/to/dist/jquery.facedetection.min.js"></script>

HTML sayfamızda yüzleri olan bir resim ayarladık.
<img id="picture" src="img/face.jpg">
Eklentiyi bu görüntüye uyguladık ve yüz koordinatlarını elde ettik.
<script>
   $('#picture').faceDetection({
       complete: function (faces) {
           console.log(faces);
       }
   });
</script>
github linki

video linki

28 Ekim 2016 Cuma

Platform As A Services (PaaS)

Diyelim ki bir web sitesi geliştireceksiniz ve geliştireceğiniz dilin özelliklerine göre (Php, Ruby gibi) her halükarda size bu programlama dillerinin düzgün olarak çalıştığı ve düzgün çıktı ürettiği bilgisayarlar gerekiyor. Eski sistemde paranızın yettiğince bir sunucu kiralayıp oraya mesela Php için gerekli ortamı (LAMP,MySQL vs…) kurup orada geliştirme yapmanız gerekiyordu. Peki yaptınız her şey güzel ilerliyor siteniz tıklamalar alıp gelişmeye başladınız projenize daha fazla yoğunlaşmak istiyorsunuz.


Fakat siteniz fazla sayıda istek almaya başladı bu durumda daha kaliteli bir makine almanız gerekiyor, dolayısı ile maliyetiniz artıyor ve serverin taşınması ve tekrar aynı düzene girmesi gibi bir takım problemler çıkmaya başlıyor. İşte bulut bilişimin bize sunduğu PaaS servisi ile bu gibi problemler yaşamazsınız.


Basitce PaaS ile LAMP(Linux, Apache, MySql, Php-Python-Perl), WINS(Windows Server, IIS, .NET, Sql Server) en bilinen iki platform gibi platformların servis olarak sunulmasıdır.  PaaS size uygulama dizaynı, uygulama geliştirme, hosting, test işlemleri için ihtiyacınız olan platformu sağlar. Tabi ki bu platformu cloud işlem vasıtası ile hızlı bir şekilde yapılandırabilir ve kendi ihtiyacınız doğrultusunda anında işlem yapacak hale getirebilirsiniz.

PaaS hizmetinin bize sunacağı faydaları şöyle listeleyebiliriz:

  • Teknik anlamda altyapı ile uğraşmazsınız
  • Kendi platformunuzu oluşturmak için risk almazsınız
  • Altyapı maliyetine verilecek para cebinizde kalır ve platform hizmetini kullandığınız kadar ödersiniz
  • Dakikalar içerisinde elinizde hazır bir platform olur
  • Piyasaya anında atılırsınız
  • Diğer web servisleri ile entegreli çalışabilirsiniz

Kısacası bu sistem size her yerde düzgün çalışan dilediğiniz kadar kaliteli, sorun çıkarmadan kullandığın kadar öde mantığı ile çalışan, güncelleme, server bakım dertlerini minimuma indiren sanal makine veya makineler vermesidir diyebiliriz.


     Bu sene Azure ile Bulut Bilişim dersinde gruplar oluşturularak bir proje oluşturulacak ve proje olarak OBS yani bir üniversite için öğrenci bilgi sistemini yapma kararı aldık. Projenin amacı öğrencilere ve diğer kullanıcılara kullanışlı ve verimli bir okulla ilgili işlerini yapabilecekleri bir sistem sağlamaktır.

     Bizim proje grubumuz 8 kişiden oluşuyor ve başlangıç olarak bir görev dağılımı yaptık. Daha sonra oluşturacağımız proje için genel olarak bir Database tasarımı oluşturduk ve buradan yola çıkarak projedeki modelleri ortaya çıkardık. Bunlar: Student, Register, Management, Department, Faculty, Lecturer, Course-Offered Course, Semester-Education Plan.

     OBS projemizde benim yapmam gereken kısım ise Department Modelinin Database kısmını, API'sini ve arayüzünü oluşturmaktır.

     Django ile Database Modellerimizi oluşturduk. Department için Django'da:

              >dajngo-admin.py startapp obs_department

diyoruz ve Visual Studio Code da obs_department da models.py içerisinde clasımızı  

              #! -*- coding:utf-8 -*-
             from django.db import models
             from obs.obs_faculty.models import Faculty

             # Create your models here.

             class Department(models.Model):
                      faculty = models.ForeignKey(Faculty)  
                     department_name = models.CharField(max_length=30)
                     department_code = models.CharField(max_length=10)
                     department_tel = models.CharField(max_length=20)
                     department_fax = models.CharField(max_length=20)

            def __str__(self):
                     return self.department_name

            class Meta:
                    verbose_name ="Bölüm"
                   verbose_name_plural="Bölümler"

tanımladıktan sonra admin.py içerisine 

            from django.contrib import admin

           from .models import Department

           admin.site.register(Department)

diyoruz ve settings.py içerisine

          INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'obs.obs_department',
]

ekleniyor ve bunların hepsi kaydedildikten sonra konsolda

      >python manage.py makemigrations
      >python manage.py migrate
      >python manage.py runserver

diyoruz ve tarayıcımızda adres çubuğuna localhost: runserverda gelen port numarısını yazıp sayfamızı açıyoruz.(http://localhost:8000/)




Burada eklenecek bölümler eklenip silinebilir.

Github Department için link : https://github.com/comuOBS/obs-api/tree/master/obs_department

Github proje linki : https://github.com/comuOBS/obs-api

Ayrıca website örneği için oluşturduğumuz video linki : https://www.youtube.com/watch?v=Lwdpzl2c1Cs

8 Ekim 2016 Cumartesi

Bulut Bilişim (Cloud Computing) Nedir?






   Bulutları ele alalım. Nasıl ki bulutlar yağmurları depolar, Cloud Computing'de benzer bir fonksiyon gösterir. Örneğin bir şirkette yönetici görevindesiniz, çalışanlarınızın ihtiyaçlarını karşılayacak doğru donanımı ve yazılımı temin etmeniz gerekir. Bu durumda çalışanlarınıza sadece birer bilgisayar vermeniz yeterli olmayacaktır. Donanımla birlikte gerekli yazılım lisanslarını da satın almanız gerekir. Kaldı ki bu döngüyü her yeni gelen çalışan için yinelemek mecburiyetindesiniz. Yatırım yapmaya yetecek kadar kaynağınız varsa bile sürekli tekrarlanan bu ihtiyaçları karşılamak bazı problemlere neden olabilir.
   Böyle bir durum için yeni bir seçeneğiniz var. Her bilgisayar için bir yazılım paketi yüklemek yerine, yalnızca bir uygulamayı yüklemeniz tüm problemlerinizi çözebilir. Böyle bir uygulamayla çalışanlarınız gereksinim duyduğu programlara web tabanlı hizmetler aracılığıyla ulaşabilirler. Her çeşit uygulama ki buna Microsoft Word gibi kelime işlemciden karmaşık veri analizi programlarına kadar, başka bir şirketin sahip olduğu bilgisayarlar çalıştıracak. Özetle bulut bilişim teknolojisini bu şekilde açıklanabilir. 
    Tabi bulut hizmeti satın alırken dikkat edilmesi gereken hususlar vardır. Gartner raporu, servis sağlayıcının çalıştığınız sektördeki referansları, hukuki zorunluklar, hizmetin sunulduğu coğrafi yer bunların en önemlileridir.


Bulut Bilişim’in Geliştirme Modelleri
 Birçok alanda, birçok biçimde kullanılmaya imkan sağlayan bu teknoloji 4 ayrı çeşidi ile karşımıza çıkıyor.

Public Cloud (Genel Bulut): Bu bulut teknolojisi internet üzerindeki sunucular ile kurulan çeşididir. Daha çok küçük ve orta ölçekli şirketlerde kullanabileceğimiz, kullandığınız kadar ödeme yaptığınız  bu modele en güzel örnek elektronik postalardır.

Private Cloud (Özel Bulut): Büyük şirketlerin, özellikle bilgileri mühim olan şirketlerin tercih ettiği bir modeldir. Var olan bilgiler kurucunun gözetimi altındadır ve bu bilgilere erişim güvenliği ve gizliliği yüksektir. Microsoft bunu bize Hyper-V ve System Center Ürün Ailesi yardımı ile sağlamaktadır.

   Hybrid Cloud (Melez Bulut): Bu bulut teknolojisi türü Public ve Private Cloud’un birleşiminden ortaya çıkmaktadır. Şirketlerin büyüklüğüne göre birleşim oranları farklılıklar gösterebilir.

   Community Cloud (Topluluk Bulut): Birkaç şirketin ortak kullandığı hizmetleri bünyesinde bulunduran bulut teknolojisidir. Şirket
 üyeleri uygulamalara ve verilere ulaşabilmektedir.

    Avantajları
  ►Bulut bilişim sistemleri API’ler ile hızlı kullanım kolaylığı sağlıyor.
 ►Daha fazla depolama alanı, hızlı veri transferi ve bu yedekleme üzerinde maliyet tasarrufu yapabilme gibi olanaklar sağlıyor.
  ►Sürekli olarak artan verilerin arşivlenmesi, kullanıcıların yetki ve takibi gibi konuların oluşturduğu alt yapı karmaşası ortadan kalkıyor.
  ►Bulut teknolojisi yazılımları web tarayıcıları üzerinden çalıştığından, bilgisayar, tablet, akıllı telefon ve  Smart TV'ler de kullanılarak platform bağımlılığından koruyor.
  ►Bulut yazılım hizmetini veren şirketlerin  verilerinin tutulduğu serverları 7/24 yazılım ve donanımsal olarak güvenlik tedbirlerini aldıklarından dolayı ana bilgisayardan daha güvenlidir.

Özetle; bulut bilişim çok daha az maliyetle, kuruluma gerek kalmadan, her yerden çalışmayı destekleyen bir hizmettir.

Dezavantajları
Bulut teknolojisi servisi kullanarak data saklanması, kullanıcının verilerini riske atması bilgi güvenliğini ve kullanıcı gizliliğini sağlayamamaktadır. Güvenlik açıkları oldukça fazladır.
Ülkelerin ekonomik durumlarından dolayı dijital bölünmeyi arttıracak, bu da uluslararası, politik ve ekonomik sorunlar doğuracaktır.
En önemli sorun ise depolanan verilere ulaşılabilmesi için internet bağlantısının olması gerekmektedir. Yani internet olmayan durumlarda bilgilerimize erişmek söz konusu değildir. İnternete bağlı olarak düşük hızlı internete sahipseniz veri alış-veriş hızınız da o derecede daha yavaş olacaktır.
Hizmetlerinin gelişmesiyle birlikte donanımsal ve yazılımsal bakım ve tamir maliyetlerinin azalacak olması ve buna bağlı olarak da bu işi yapan Bilgi Teknolojisi (BT) uzmanlarının iş sahalarının daralması durumu da son dezavantajlardan birisidir.

Bulut depolama hizmetlerine en iyi örnekler

    Kısaca açıklayacak olursak Bulut Bilişim müşterilere üç temel hizmet sunuyor:

  • IaaS: Altyapı Hizmetinde, kullanıcı, yazılımları ve uygulamaları kullanmak için güç kaynağı, ağ, saklama, sunucu donanımları ve diğer sistemlerden yararlanıyor. Kullanıcı bu yazılımları ne zaman kullanacağına kendisi karar veriyor ve tüm bileşenler üzerinde tam bir kontrol sahibi oluyor. Altyapı hizmetine ‘Amazon Elastic Compute Cloud’ örnek verilebilir.



  • PaaS: Platform Hizmetinde, kullanıcı, belirli bir platformla (genellikle Java, Python veya .Net platformlarıyla) uyumlu olan uygulamalarını zengin bir ortamdan yararlanarak kullanıyor. Bu ortamda iş kuyruğu yönetimi, veriye erişim, uygulamalar arası iletişim gibi araçlar sunuluyor. Platform Hizmetine örnek olarak Google App Engine ve Microsoft Azure  gösterilebilir.



  • SaaS: Yazılım Hizmetinde, kullanıcı, önceden belirlenmiş uygulamaları doğrudan Web tarayıcısından çalıştırır. Uygulamalar farklı kullanıcılara aynı kolaylıkla kullanılmak üzere tasarlandığından, iş ihtiyaçlarına özgü tasarımlara veya kişiye özel yapılandırmalara izin vermiyor. Yazılım hizmetine ‘SalesForce.com’ hizmeti örnek gösterilebilir. 
Bulut Bilişim Uygulamaları
 
Karelport.com: Bulut üzerinden hizmetler, fırsatlar ve sosyal paylaşım olanakları sunan online iş çevresi 
Amazon Elastic Compute Cloud (Amazon EC2): Ölçeklenebilir ve kullanım kapasitesi kadar ücretleme yapılan Amazon.com’un bulut işlem gücü servisi
Fizy.com: Bulut üzerinde müzik dinleme servisi
Google Apps: Ofis, veri ve iletişim amaçlı online uygulamalar
Salesforce.com: Salesforce’un müşteri ilişkileri yönetimi (CRM) servisi



Türkiye'nin Bulut Bilişim ile imtihanı :)))


Kaynak:
Wikipedia
Turkcell
Microsoft
IBM