22 Aralık 2017 Cuma

C++ - Dizide lokal maksimum/minimum değerlerinin bulunması


Bu yazı kapsamında bir dizi içerisindeki değerlerin lokal maksimum/minimum noktalarını bulan algoritmayı açıklayıp, C++ ile implementasyonunu gerçekleştireceğiz. OpenCV ile hareket tespiti, takibi ve yapılan hareketin tanınmasına yönelik hobi amaçlı gerçekleştirdiğim bir proje dahilinde böyle bir ihtiyaç ortaya çıktı ve ben de projenin bu kısmını paylaşmak istedim. Örneğin şöyle bir dizimiz olduğunu farzedelim ve bu dizinin değerlerini grafik üzerinde gösterelim.

14 Aralık 2017 Perşembe

RabbitMQ C++ ve Python uygulamaları

RabbitMQ, kendi sitesindeki ifadeye göre en yaygın kullanılan açık kaynak mesaj aracısıdır. Birçok işletim sisteminde ve popüler tüm programlama dillerinde çalışabilir. Faklı uygulamalar arasında asenkron iletişim kurulmasını sağlar. ApacheQPid, ActiveMQ, ZeroMQ gibi farklı alternatif sistemler olduğunu da belirtelim. Temel mantık şu şekildedir: Bir üretici(producer) iletilecek mesajı örneğin postayı kargo firmasına bırakır. Kargo firması yani RabbitMQ ise bu mesajın ilgili alıcı(consumer) tarafından alınmasını sağlar. 

21 Ekim 2017 Cumartesi

Python - Selective Search Segmentation

Segmentasyonda amaç bir görüntüdeki farklı nesneleri ayırt edebilmek için her bir piksele bir sınıf değeri atamaktır. Yani görüntüdeki şekil ya da renk olarak birbirlerinden ayrılan her bir kapalı alan içerisindeki piksellere aynı sınıf değeri atama işlemidir. Nesne tanıma ise bir görüntüde aranan bir nesneyi bulma işlemidir. 

17 Ekim 2017 Salı

Keras LSTM ile Zaman Serisi Tahmini

Daha önceki bir yazımda ARIMA ile zaman serisi tahminine dair bir örnek paylaşmıştım. Bu yazı kapsamında ise Keras LSTM katmanı kullanarak zaman serisi tahmini yapan bir uygulama gerçekleştireceğim. LSTM ile ilgili daha ayrıntılı bilgi almak için, benim de bu yazıya referans olarak kullandığım derindelimavi adresindeki yazıyı okuyabilirsiniz. 

28 Eylül 2017 Perşembe

Keras ile Derin Öğrenmeye Giriş - Sınıflama Örneği

Keras Tensorflow ya da Theano kütüphaneleri üzerinde çalışan Python ile yazılmış yüksek seviye bir API'dir. Kullanıcıyı daha düşük seviyedeki bu kütüphanelerin karmaşıklığından kurtararak, daha basit şekilde yapay sinir ağı modellerinin oluşturulması ve eğitilmesine olanak sağlar. Keras kurulumunu daha önceki bir yazımda anlatmıştım, kurulum için bu yazıyı inceleyebilirsiniz.

9 Ağustos 2017 Çarşamba

Python - OpenCV Hit The Ball - Top sektirmece :)


A mini "hit the ball" game was implemented by using OpenCV and numpy libraries of Python. If you want to move your head and do a few tricks with the ball :) while sitting at your home or office, you can download the .py files (codes) at the end of this page and run it.

3 Ağustos 2017 Perşembe

Python Tensorflow ile Keras (derin öğrenme kütüphanesi) kurulumu

Keras, Theano ya da Tensorflow üzerine kurulabilen bir derin öğrenme kütüphanesidir. Keras 'ın daha düşük seviye olan ve kullanımı biraz daha karmaşık olan bu kütüphaneler ile modeller tanımlama ve eğitme işlemlerini daha kullanıcı dostu hale getirdiğini söyleyebiliriz. 

28 Temmuz 2017 Cuma

Python - Zaman Serisi İnceleme ve ARIMA ile Tahmin

Bu yazı kapsamında zaman serisi analizine giriş ve ARIMA modeli ile zamana bağımlı bir değişkenin değerinin nasıl tahmin edilebileceğine dair bir örnek paylaşacağım. Kullanacağımız örnek veri setini indirmek için tıklayınız.

7 Temmuz 2017 Cuma

Python - Veri Analizi ve Görselleştirilmesi


Bu yazı kapsamında bir dizi değişken ve bu değişkenlere bağlı bir hedef "y" değişkeninden oluşan örnek bir veri seti üzerinde analiz çalışması yapılmış; ekstrem değer (outlier) , sabit değer içeren değişkenler ve seçilen herhangi bir değişkenin (sütunun) hedef y değişkeni ile ilişkisine dair çıkarımlar ve grafik üzerinde görselleştirilmeler gerçekleştirilmiştir.

6 Temmuz 2017 Perşembe

Python - Pandas groupby/aggregate - LabelEncoder - LabelBinarizer

Daha önceki yazımızda Pandas kütüphanesine bir giriş yapmıştık. Bu yazı kapsamında ise Pandas ile alakalı bir kaç bilgi daha verdikten sonra kategorik verileri dönüştürmek için scikit-learn kütüphanesinin LabelEncoder ve LabelBinarizer metotlarını inceleyeceğiz. 

Python - Pandas ile Temel İşlemler

Pandas Python programlama dili için geliştirilmiş açık kaynaklı, kullanımı kolay, yüksek performanslı bir veri yapısı ve analizi kütüphanesidir. Bu yazı kapsamında Pandas ile .csv uzantılı dosyanın nasıl okunacağı, veri seti üzerinde temel bazı işlemlerin nasıl yapılacağı ve görselleştirmeye dair örnekler paylaşacağım.

15 Haziran 2017 Perşembe

C++ Akıllı İşaretçiler (Smart Pointers)


Smart pointer C++ standart kütüphanesinde #include <memory> header dosyasında tanımlıdır ve amacı kaynak yönetiminin otomatik gerçekleştirilmesini sağlamaktır. Pointer 'lar hafızada belirli bir alanın adresini gösterir ve bu alanda verinin tutulması için hafızada yer açma ve ilgili veri ile işlem bittiğinde bu verinin silinmesi sorumluluğu programcıya aittir. Smart pointer larda ise hafızanın boşaltılması işlemi otomatik olarak uygun bir zamanda gerçekleştirilir.Uygun zaman biraz ucu açık bir kavram tabi ki, isterseniz şimdi bir örnek üzerinden normal (raw) pointer ile smart pointer farkını, hafızanın nasıl otomatik silindiğine dair bir örnek üzerinden görelim;

18 Mayıs 2017 Perşembe

C++ Boost.Log kütüphanesinin kullanımı (Boost Log Tutorial)

Boost C++ için geliştirilmiş içerik bakımından çok zengin bir kütüphaneler topluluğudur. Bu yazı kapsamında boost kütüphanelerinden birisi olan boost.Log kullanımına dair basit bir örnek gerçekleştirilmiştir. Log alma işlemi, bir yazılımın gerçekleştirdiği temel işlemler ile ilgili bazı bilgilerin dosyaya kaydedilmesidir. Böylelikle uygulama ile ilgili birşeyler yanlış gittiğinde log dosyasındaki veriler incelenerek uygulamanın davranışı analiz edilip gerekli düzeltmeler yapılmasına yardımcı olunabilir. Boost.Log kütüphanesini projemizde kullanabilmek için kaynak kodları indirip derlememiz gerekmektedir. Bunun sebebi; Boost kütüphanelerinden bazıları sadece header eklenerek kullanılabilir iken, bazı kütüphanelerin kullanılması için ise kaynak kodun derlenmesi gerekmektedir.

5 Mayıs 2017 Cuma

C++ SignalR İstemci Uygulaması


SignalR, bağlı olan istemciler arasında gerçek zamanlı haberleşme altyapısı sağlayan bir frameworkdür. Http tabanlı çalışır ve asenkron haberleşmenin kalıcı olmasını/kopmadan devam etmesini sağlar. SignalR ile bağlantı kurulumu için konfigürasyon ve bağlantı durumunu sorgulamak gibi işler kolaylaşır ve bu gibi temel işler kütüphane tarafından otomatik gerçekleştirilir .NET uygulamaları ve Javascript ile SignalR kullanımına dair örnekler internette bir hayli mevcut. Ben bu yazı kapsamında SignalR'ı C++ ile kullanarak C# uygulaması ile haberleşme sağlayan bir örnek gerçekleştireceğim.

C++ SignalR Client uygulaması için kurulumun nasıl yapıldığı ve örnek uygulamalar için : https://github.com/aspnet/SignalR-Client-Cpp


26 Nisan 2017 Çarşamba

Libpcap - Ağ adaptörüne gelen paketlerin yakalanması (C++)


Daha evvelki yazımda libpcap (winpcap) kütüphanesinin kullanımı hakkında kısa bir giriş yapıp, *.pcap uzantılı bir dosyadan paketlerin nasıl okunacağına dair bir örnek paylaşmıştım. 


Bu yazı kapsamında ise dosyadan değil de ağ adaptörüne gelen paketlerin nasıl elde edileceğine dair kısa bir örnek paylaşacağım. Daha önceki örnekte libpcap kütüphanesini offline modda açıp, yolunu belirttiğimiz .pcap dosyasındaki paketleri okumuştuk. Bu örnekte ise pcap_open_live modunu kullanıp o an adaptöre gelen paketleri yakalayacağız. Bunun için ilk olarak bilgisayarımızdaki ağ adaptörlerini listeleyip, seçilen ağ adaptörünü libpcap kütüphanesine belirtmemiz gerekiyor. Bilgisayarımızdaki ağ adaptörlerini listeleyen C++ kodu aşağıdaki gibidir, yazının sonunda ilgili kodlara ulaşabilirsiniz.

23 Mart 2017 Perşembe

Libpcap Giriş - Ağ paketlerinin yakalanması (network traffic capturing)


Libpcap güçlü bir ağ paket analiz kütüphanesidir, ağdaki trafiği dinlemeye ve ağa paket göndermeye yarar. http://www.tcpdump.org/

Winpcap ise libpcap 'in windows versiyonudur,  https://www.winpcap.org/

libpcap gelen paketlerin henüz işletim sistemi tarafından işlenmeden evvel bir kopyasını alır. Böylece gelen paketler işletim sistemi tarafından herhangi bir işleme tabi tutulmadan alınmış olur. Libpcap C/C++ ile birlikte kullanılacak şekilde dizayn edilmiştir fakat Python, Java, C# ile kullanılabilmesi için de ara birimler (wrapper) geliştirilmiştir.

18 Mart 2017 Cumartesi

C++ map ve unordered_map veri yapıları - Performans kıyaslaması


Map C++ standart kütüphanesinde bulunan bir veri yapısıdır ve ilişkisel verileri saklamak için kullanılır. Yani sırasıyla key (anahtar) ve bu anahtarın değerini ifade eden value elemanları saklanır.

typedef pair<const Key, T> value_type;
map içerisindeki elemanlar key değerine göre eşsizdir ve tüm elemanlar sıralanmış vaziyettedir. 




6 Şubat 2017 Pazartesi

MAC OS üzerine Tesseract OCR (Karakter Tanıma) kütüphanesinin kurulumu


Tesseract açık kaynaklı bir OCR(Optical Character Recognition-Optik Karakter Tanıma) motorudur/kütüphanesidir (https://github.com/tesseract-ocr/tesseract/wiki) Tesseract MAC üzerine MacPorts ya da Homebrew aracılığıyla kurulabilir. Tesseract ı homebrew kullanarak kurmak istiyorsak ;

23 Ocak 2017 Pazartesi

Python - OPENCV Yaya Tespiti (Görüntü İşleme)


Yaya tanıma (pedestrian detection) video takip, kişi davranış analizi, akıllı arabalar için sürücü destek sistemi gibi farklı uygulamalarda kullanılabilir. Yaya tespiti probleminde makine öğrenmesi teknikleri yaygın olarak kullanılmaktadır, bu tekniklerde eğitilmiş sınıflandırıcılar ile görüntü içerisindeki yaya tespit edilmeye çalışılır. Sınıflama yapılırken yani bizim örneğimizde görüntüdeki insanları bulurken, uygun bir sınıflandırıcı bulmak kadar bulunacak nesneye ait olan seçici/ayırt edici bir özelliğin (feature) çıkarılabilir olması da çok önemlidir. Yayaların tanınması probleminde HOG (Histograms of Oriented Gradient) ile özellik çıkarılması yönteminin başarılı sonuçlar verdiği gösterilmiştir.

                 

11 Ocak 2017 Çarşamba

C++ inline fonksiyon, önişlemci (preprocessor)


C++'da  önişlemci(preprocessor)/önişleme derleme işlemiminin bir parçası değildir, daha önce gerçekleştirilen bir aşamadır. Önişlemci adı üstünde olduğu gibi derleme işleminden önce kaynak kod üzerinde bir takım düzenlemeler/değişiklikler yapar. # karakteri ile başlayan satırlar önişlemci tarafından işlenir.

7 Ocak 2017 Cumartesi

Arduino TFT ekran ve Timer


Şimdiye kadar Görüntü işleme, Python, C++ ile ilgili çeşitli örnekler paylaştım. Bu defa küçük bir farklılık yapıp Arduino ile bir örnek uygulama paylaşmak istiyorum. Gerçekleştirdiğim bu uygulamada Arduino Mega 2560 ve ER_TFTM043_3 lcd ekran kullanılmıştır. Uygulamada amaç tft lcd ekranı sürmek ve bu ekranı timer kullanarak güncellemektir. Bunun için UTFT ve TimerOne kütüphaneleri kullanılmıştır. 

(Not: LCD görüntüsü aşağıdaki gibidir, yazının sonunda videoyu da izleyebilirsiniz)

5 Ocak 2017 Perşembe

Operatör Aşırı Yükleme (C++) - Operator Overloading


Operatör aşırı yükleme bir operatörün default tanımlı görevi dışında tanımlanan yeni bir görevi de yapabilecek hale getirilmesidir. Genel olarak syntax şu şekildedir.


type operator sign (parameters) { /*... body ...*/ }


C++ için aşırı yüklenmesine izin verilen ve verilmeyen oparatörler şunlardır;