7 Haziran 2017 Çarşamba

KNN Kullanılarak OpenCV İle Karakter Tanıma



Algoritma Analizi Dersi kapsamında bir yapay zeka projesi ve bu projenin karmaşıklık analizini yapmamız istendi. Makine öğrenmesi temal alan, karakter analizi yapan ve analiz sonucunda öğrenimin doğruluk orani çıktısını veren bir proje geliştirmesinde karar kılındı.

Projeyi anlaşılır kılmak adına proje de kullanılan altyapıların amaçlarını ve projede kullanım alanlarını açıklamakla başalayalım.

Makine Öğrenmesi(Machine Learning), matematiksel ve istatiksel yöntemler kullanarak mevcut çıkarımlar yapan, bu çıkarımlarla bilinmyene dair tahminlerde bulunan yöntem paradigmasıdır. Makine öğrenmesine güncel hayatımınzdan bazı örnekler: yüz tanıma, belge sınıflandırma, spam tespiti ‘dir.

Makine Öğrenmesi mantığını daha iyi anlamak adına su örnek verilebilir. Matematik dersinde bir konuya ait bir soruyu öğrenerek konu geneline hakim olmak hedeflensin, bu sorunun çözümünün öğrenildiğini varsayalım. Aynı konuya ait başka bir soruyu daha önceden çözdüğümüz soru analizleri sayesinde çözülebilinir hale gelindiğinde konunun öğrenildiği düşünülür.

Makine öğrenmesi de aynı mantıkla çalışır bir veri kümesinin istenilen orandaki kısmı uzerinden makine eğitilir ve daha önceden işlem görmemiş veri küme ile makinenin talep edilen yetiye ulaşıp ulaşmadığı kontrol edilir. İşlem gören aşamaya Train, kontrol edilen aşamaya Test denir.

Proje adımları incelenecek olursa ;



    El yazısını okuyabilen bir uygulama geliştirilmesi yapılacağı için bizim öncelikle üzerinde işlem yapanileceiğimiz bir veri seti elde etmemiz gerekir. OpenCV’nin kendi içinde 5000 el yazısı karakteri içeren örnek image’ni kullanılarak veri seti temin etmiş olduk. Bu veri setinde her karakteri 20x20 ‘lik digitl’ler ifade etmektedir.

    Elimizdeki veri seti ile makine öğrenimini gerçekleştirebilmek için train_data and test_data’ya ihtiyaç vardır.
















    Veri seti üzerindeki birbirinden farklı bu digit’leri ayırarak öğrenmeyi kolaylaştırmak amaçlanmıştır.


    Bu ayrılan her bir hücreyi bir Numpy Array ‘a atacağız. Dizinin ilk 250 örneği train_data’ya ve geriye kalan 250 örneği test_data’ya atılır. Hem train_data hem de text_data için label’lar oluşturulur.



    KNN train_data’nın öğrenilmesinin gerçekleştirimi için uygulamanın içinde tanımlanır. Elimizdeki train_data da knn algoritması bir birine yakın noktaları sınıflandırarak belirli bir veri kümesi elde ediliyor. Bu veri kümesini test_data’yı analiz ederken kullanılıyor. Elde edilen sonuçlara göre başarı oranı çıktı olarak veriliyor. 

    Algoritmanın karmaşıklığına bakacak olursak;

     Tam kapsamlı arama ile hiçbir veri yapısı ve algoritma kullanılmadan Öklid uzaklığına göre test noktasına en yakın k tane örnek sıralı bir şekilde aranır. Bu arama yönteminin zaman karmaşıklığı veri setinin boyut sayısı(D), N eleman sayısı olmak üzere algoritmanın Big-O notasyonuna göre istenilen bir elemanı bulmanın zaman karmaşıklığı O(k*D*N)’dir.

Projenin linki: https://www.youtube.com/watch?v=TH5kjigvMto

6 Kasım 2016 Pazar

PaaS nedir?

        PaaS  bir platformun hizmet olarak sunulmasıdır. Bu platform içerisinde veritabanı, DNS hizmetleri, Web Uygulamaları geliştirme çatısı gibi bileşenler barındırır. Platformun izin verdiği programlama dilleri ile kendi isteğimize göre uygulamalar geliştirerek platform üzerinde alt katmanlardan soyutlanmış bir biçimde uygulamamızı yayınlayabiliriz. Bu soyutlama bizi kullandığımız bileşenlerde oluşabilecek sorunlardan uzak tutar, örneğin IaaS bir hizmette soyutlanmış donanım üzerine kurduğumuz veri tabanının yedekleme sorumluluğu bize aittir, ancak PaaS hizmetlerinde biz platformun bize sağladığı API veya kütüphaneler ile verilerimizi depolarız bunların yedekleme ve bakım sorumluluğu platforma aittir. Çoğu platform sunduğu bu hizmeti SLA (Service-level agreement) ile garanti altına alır, bu sözleşme hizmetin Uptime oranını garanti eder ve hizmet kesintisi yaşandığı durumlarda haklarımızın neler olduğunu bilmemizi sağlar.

Platform Hizmetinin Sağladığı Avantajlar:
      Zamandan Tasarruf 
      Paradan Tasarruf
      Esneklik  (flexible)
      Güvenlik (secure)
      Ölçeklenebilir (scalable)

Platform hizmet sağlayacılarına örnek olarak Heroku Microsoft Azure Google App Engine  verilebilir.


Yazılmış bir proje nasıl yayınlanır?


Örneğin visual studio geliştirme ortamı kullanılıyor ise yapılması gereken ilk başta Solution Explorer deki prodeki publish seçeneğine tıklamak.



       








Buradan oluşturulan sitenin indirilmiş publish   dosyasını import edilmesi gerekiyor.





Daha sonra Publish dedikten sonra artık proje başarılı bir şekilde  yayınlanacaktır.

Videolu bir örnek için aşağıdaki linke tıklayınız:
https://www.youtube.com/watch?v=Jhx6RExqxfQ&feature=youtu.be



Obs Projesi için yapılan adımlar:

İlk başta yapılması gereken veritabanını tasarlamak oldu.

Entity Framework yapısını kullanarak Code First yapısını kullanarak ORM yapısı ile bir proje oluşturuldu.

Proje katmanlı bir yapıya sahip olduğundan(UI DATA ACCESS BUSINESS) 8 kişinin projeye katkı sağlaması daha kolay oldu ve aynı zamanda katmanlar arası bağımsızlıklar sayesinde proje daha esnek hale getirildi.

Benim projeye yaptığım katkılar:

Fakulte Fakulte Sekreteri Fakutle Çalışanı için Domain Servis sınıfları yazıldı.Aynı zamanda domain sınıflarındaki metotlara parametre olarak gelen Request ve Response sınıfları yazıldı.Veritabanı kontrolü içinde Fakulte Fakulte Sekreteri ve Fakulte Çalışanı için Validation sınıfları oluşturuldu.Ek olarakta OBS.HELPERS katmanında validatorler için uyarı mesajları yazıldı.








    FacultyDomainService (RR and Validation)
FacultySecreterDomainService (RR and Validation)














FacultySecreterDomainService (RR and Validation)


FacultyStaffDomainService (RR and Validation)




Arayuzler ise şu şekildedir:


Fakulte: 



Fakulte Sekreteri:                                          Fakulte Çalışanı:

















Sürüm takip sistemi olarak TFS kullanıldı.
Projenin son durumunu takip etmek için aşağıdaki linke tıklayınız:

https://obsazure.visualstudio.com/OBS/_dashboards




                                   CLOUD STORAGE:

Bulut depolama resim, döküman ya da diğer birçok dosyayı içinde depoladığımız bir alandır. Dropbox,Google gibi firmalar bizim yerimize bu dosyaları kendi sunucunlarında saklarlar. 

Bulut Depolamanın Avantajları:
    Enerji Tasarrufu
    Zaman Tasarrufu

Bulut Depolamanın Dezavantajları:
        Güvenlik Açığı


Bilgisayarda Bulunan Resmin Uzak Sunucuya Eklenmesi:

file_service = FileService(account_name = acc_name, account_key = key_1)

file_service.create_share('myshare43')

file_service.create_file_from_path(
    'myshare43',
    None,
    'pic_43',
    'C:\\Users\\Public\\Pictures\\Sample Pictures\\Dock.jpg',
    content_settings=ContentSettings(content_type='image/jpg'))

generator = file_service.list_directories_and_files('myshare43')
for file_or_dir in generator:
    print(file_or_dir.name)


9 Ekim 2016 Pazar

Bulut Bilişim(Cloud Computing) IaaS vs. PaaS vs. SaaS

  

   Bulut bilişim, bize gerekli olan ve bilgisayarımızda kullandığımız gereksinimlerin (alan yani harddisk, yazılım yani software, donanım yani hardware) gibi bilgilerin uzaktan kullanılmasıdır. Aynı şekilde resim , belge , muzik , video gibi ortam işlevlerininde başka bilgisayardan çalıştırmak böylelikle gerekli alanı verimli ve internet bağlantısının olduğu her yerden kullana bilmektir.
 Bulut Bilişimi bize daha fazla depolama alanı, hızlı veri transferi, maliyet tasarrufu yapabilme gibi bir takım olanaklar sağlamaktadır.Bu durumda bilgisayarımız bilgisayar ağlarına bağlı bir terminal gibi davranır.

Cloud Computıng avantajları:

  •  Hata toleransı
  •  Güvenlik
  •  Yüksek hızda veri işleme
  •  Donanım ve yazılım,bakım maliyetlerinin azaltılması.
  •  Disk alanından tasarruf(veri ve programlar internette saklandığı için)



Cloud Computing dezavantajları:

  • Kullanıcı verilerinin cloud hizmeti veren şirketlere bağımlı olması.

Hizmet modelleri aşağıdaki gibidir:

    1.Cloud Software as a Service(SaaS)

    2.Cloud Platform as a Service(PaaS)

    3.Cloud Infrastructure as a Service(IaaS)

Saas(Yazılım Olarak Servis):

Web tabanlı yazılımların tek hosting  merkezinden internet üzerinden kullanıcıların hizmetine sunulan bir yazılım dağıtım modelidir.SaaS talep üzerine mevcut yükseltmeleri ile ölçeklenebilir(scalability).Daha çok son kullanıcılar hedef alınmaktadır.Örnek olarak Google Apps, Microsoft Office 365 ve Atlassian verilebilir.

PaaS(Platform Olarak Servis):

 Bu servis aracığı ile kullanıcı platformun çalıştığı altyapı ile (sunucu, ağ, işletim sistemi vs.) uğraşmadan bu platformda yazılım geliştirebilir.Örnek olarak  AWS Elastic Beanstalk, Windows Azure, Heroku verilebilir.


IaaS(Altyapı Olarak Servis):

Uzaktaki sunucularda sizin adınıza sanal bir sistem oluşturulur ve siz bu sistem üzerinde size gerekli işlemleri yapabiliyorsunuz.Örneğin online bir ortamda  işletim sistemi oluşturabilirsiniz.Bu servis türüne ornek olarak Amazon ECS ve RackSpace CloudWindows Azure, Rackspace, Google Compute Engine ortamları verilebilir.

Azure ile cloud ortamında bir sanal makinenin nasil oluşturulacağı aşağıdaki linkten izlenebilir:

https://www.youtube.com/watch?v=xOBqRNDi52Q

















Bulut bilişim hizmet modellerinin kullanılma biçimleri açısından da türleri bulunmaktadır:

  • Public Cloud
  • Private Cloud
  • Hybrid Cloud
  • Community Cloud

Public Cloud (Genel Bulut):

Internet üzerinden genel kullanıma açık bulunan  hizmetlerdir. Burada, kullanıcı, web uygulamaları üzerinden hizmetlere erişmektedir. Avantajları Karlı Efektiv ve Güvenli olmasıdır.Genel Buluta örnek olarak  Amazon, Google v.b verilebilir. 


Private Cloud (Özel Bulut):

Burada bulut bilişim hizmeti sadece bir kurum için verilmekte olup, kurumun kendi binasında olabileceği gibi bir başka yerde de olabilir. Özel Bulut Genel Buluta göre daha pahalı fakat daha esnek (flexibility) ve daha performanslıdır.


Hybrid Cloud (Melez Bulut):

Private ve Public  türlerinin bir arada kullanılmasıdır. Örneğin bir kurum oluşturduğu özel hizmetlere ek olarak bazı hizmetleri dışarıdan alabilir. 


Community Cloud (Topluluk Bulutu):

Burada bulut bilişim  ortak hareket eden kuruluşlar tarafından paylaşılır.