AGG’de Google Gözlüğü (Glass) Denerken Selfie’ni çek

AGG’de Google Gözlüğü (Glass) Denerken Selfie’ni çek

Kendini Geliştir, Dünyayı Değiştir

Dünyaya ve Türkiye’ye değer katmak amacıyla, teknoloji gruplarının birlikte hazırladığı Android Geliştirici Günlerinde; Google Gözlüğünü (Google Glass) deneyebilir, 64  farklı oturuma katılabilir, kod yazarak yarışabilir, bilişim sektörüne yön veren firmaların standlarına uğrayabilir, farklı insanlarla tanışarak çevrenizi genişletebilir, teknolojik oyunlar oynayabilirsiniz. Ve işte konferansın  ana sponsorları  Platin: Google;  Altın: PayPal and Sony; Gümüş: HTC, Nokia, Alcatel, Turkcell GY ve OBSS.

 

Android Geliştirici Günleri (AGG) 16-17 Mayıs tarihlerinde üçüncü kez ODTÜ KKM’de yapılıyor. Türkiye’nin ve dünyanın farklı kentlerinden  teknoloji topluluklarının birlikte hazırladığı AGG,  GDG (Google Developer Group) İstanbul, GDG Eskişehir, GDG Konya, GDG Ankara  ve IEEE ODTÜ  öncülüğünde 20 farklı ülkeden geliştirici gruplarının  işbirliğiyle gerçekleşiyor.

Google Gözlüğünü(Glass) denemek için Chris Tuttle’ı bulun ve denemek istediğinizi söyleyin.

 

AGG, dünyaya ve Türkiye’ye değer katmak amacıyla bir araya gelen  teknolojiye ilgi duyan öğrenci ve farklı mesleklerden kişilerin birlikte düzenlediği  bir konferanstır. Farklı ülkelerden  teknoloji gruplarının tamamen gönüllü olarak ortak bir amaç için bir araya gelip uluslararası bir organizasyona imza atabileceğini göstermektedir.

Ücretsiz Katılım

Katılımın ücretsiz olduğu konferans, açılış konuşmasıyla başlayacak ve iki gün boyunca  dört farklı salonda  toplam 64 oturumla devam edecek. 30 yabancı konuşmacının yer aldığı etkinlikte Juhani Lehtimak, Stephan Janssen, Mark Allison, Abhisek Devkota, Al Sutton gibi   isimler de sunum yapacak. Katılmak için sadece kayıt olunuz.

 

Mobil Hackathon ve indir.com Mobile Uygulama Yarışması Ödül Töreni

Etkinlik kapsamında bir de Mobil Hackathon gerçekleşecek.16 Mayıs Cuma günü 13:30 da başlayacak ve 17 Mayıs Cumartesi günü 13:30 ‘da  son bulacak olan yarışmada, Geliştiriciler 24 saat aralıksız kod yazarak yarışacaklar.  Ayrıca  indir.com Mobil Uygulama Ödülleri yarışmasının ödül töreni ve Programlama Çocuk Oyuncağı  etkinliğinin   uygulamalı oturumlarından biri  de AGG’de  yapılacak.

Katılın ve Hediyeler Kazanma Şansına Sahip Olun

Konferans esnasında katılımcıları sürpriz çekilişler ve ödüllü(akıllı telefonlar, tabletler, kitaplar, tshirtler, beaconlar, vb.) oyunlar bekliyor. Oyunlar konferans süresince devam edecek, kazananlara  ödülleri son gün konferans bitiminde verilecek. Ayrıca tüm katılımcılara eşantiyonlar verilecektir. Sadece kayıt olun ve etkinliğe katılın.

 

Bu Güzel Konferansın Gerçekleşmesini Sağlayan Tüm Sponsorlara Teşekkürler

 

Android Geliştirici GünleriAndroid Developer Days

Kendini Geliştir, Dünyayı Değiştir

İnternette Yasaklı Sitelere Giriş ve Anonim Olarak Dolanma(Windows, Android, iOS)

İnternette Yasaklı Sitelere Giriş ve Anonim Olarak Dolanma(Windows, Android, iOS)

Gündemi meşgul eden konulardan birisi internet sansürü. İnternet kullanımı sosyal medyanın yaygınlaşması ile daha da arttı. Özellike Twitter, Facebook, Instagram, Vine hatta Whatsapp gibi uygulamalar bilgisayar telefon ve tabletlerin vazgeçilmez uygulamaları haline geldi.

Geçen gün bir haber okudum. Youtube ve Facebook’un da yasaklanabileceğinden bahsediliyordu. İnternet yasasının yürürlüğe girmesiyle beraber daha da fazla sitenin ve sayfanın yasaklanacağı aşikar. Bir birey, bir insan olarak bilgiye ulaşma hakkımın engellenmesinden veya engellenmek istenmesinden rahatsızlık duyuyorum.

İleride aktivist takılan gençler olarak bize ne olur bilmiyorum ama bu yazımın ana konusu istedikleri bilgiye ulaşmak isteyenler için.. İnternet sansüründen olabildğince az etkilenmek için neler yapabiliriz? Araştırdığım, bizzat denediğim yöntemleri ve bu konudaki tecrübelerimi sizlere aktarmaya çalışacağım. (Umarım ben de sansür yemem :))

 

Güncelleme: İnternet Sağlayıcıları DNS’leri hackledi. Bu yüzden şuanda DNS’den bağlanan çoğu arkadaşımız da internette gezinirken yasaklı olmayan sitelere girişlerde bile sorun yaşıyorlar. Bu yüzden şuanda görünüyor ki VPN ile bağlanmak en kesin çözüm. 

1-VPN(Virtual Private Network)

VPN; İnternette gerçekleştirdiğiniz her harekette dijital izler bırakmadan, mahremiyetinizi koruyarak kısıtlama olmaksızın tüm internet sitelerine özgürce erişim sağlamanızı sağlayan bir alt yapıdır. Kısacası internete nereden, hangi ip adresiyle ve hangi internet sağlayıcısı ile internete bağlandığınız görünmeden internette dolaşabilirsiniz.

VPN ile interete bağlanabileceğiniz birkaç program

Google Chrome için Zen Mate(En Temizi) : Eğer sadece browserdan dolaşırken youtube vs gibi yasaklı yerlere erişim için kullanmak istiyorsanız en temiz yoludur 😉 Diğer browserları etkilemez sadece Google Chrome daki dolaşmalarınz etkileyen bir VPN eklentisidir. Kullanımı da çok basittir. Öncelikle mailiniz ile kayıt oluyorsunuz. Daha sonra sağ üst köşede kalkan simgesi geliyor. Buna tıkladığınızda açılan pencerenin alt sağında On/Off butonu ile açıp kapatabilirsiniz.

Hotspot Shield(Reklamlı): Programı yükledikten sonra çalıştırın. Durum çubuğunda yerini alacaktır. Daha sonra arayüzünden “Start Protection“a basın. Bun dan sonra istediğiniz siteye giriş yapabileceksiniz. İlk girişte başka bir siteye yönlendirip bağantınızı kontrol edebilir. Sitenin en üstündeki bilgi yeri %100 olduktan sonra Continue butonuna basarak gezinmeye başlayabilirsinz.

CyberGhost(Reklamsız): Son zmanalardaki sansür olaylarına canı sıkılan bir ekibin geliştirdiği ve kullanıcılarına 1 sene ücretsiz VPN servisi sağlayan bir yazılım. 

*Linkin üzerine tıkladıktan sonra internet sayfasından talimatları izleyin.

*Mailinize bilgiler gönderilecektir.

*Mailinizi doğrulayın.

*Daha sonra bir mail daha gönderilecek.

*Maildeki talimatları izleyerek gönderilen kodu, yine maildeki linke tıklayarak indirdiğiniz ve yüklediğiniz CyberGhost VPN programını aktif etmek için kulanabilirsiniz.

*Yüklediğiniz programı çalıştırıp yukarıdan activate key diyip mailinize gelen anahtarı yapıştırıp devam edin. Daha önce hesabınız yoksa kendisi oluşturacaktır. Bu bilgileri not edin, saklayın.

*Pencerenin altındaki kapatma-açma düğmesine tıklayarak VPN’i devreye sokabilirsiniz.

iOS ve Android’den Yasaklı Sitelere Giriş(VPN)

iPhone ve ipad kullanıcıları Apple Store’den indirebilecekleri Onavo Project iyi bir alternatif olabilir. Kotalı İnternet kullanıcılarının mobil verilerini yüzde 80’e kadar sıkıştırarak iletmesi ve kota tasarrufu sağlaması için geliştirilen yazılım VPN mantığı ile çalıştığı için engelleri aşıyor ve anonim kalmayı sağlayabiliyor. Yazılım şimdilik ücretsiz.

https://itunes.apple.com/us/app/free-vpn-onavo-protect/id577491499?mt=8

Android kullanıcıları için Google Play’den indirebilecekleri Hotspot Shield VPN iyi bir alternatif.

Kurulumu: Hotspot Shiled kurulduktan sonra programı açın, “bağlantımı koru” sekmesine tıklayın. güvenlik uyarısında “evet bu bağlantıya güveniyorum” a tıkladıktan sonra bir süre bekleyin. Kurulum tamamlanacaktır.

https://play.google.com/store/apps/details?id=hotspotshield.android.vpn

2-Proxy Siteleri(Vekil Sunucular)

En basit yöntem diyebiliriz. Vekil Sunucu sitesine giriyorsunuz ve istediğiniz sitenin linkini oraya yazıyorsunuz. Yalnız bu gibi siteler ile istenilen siteye girmek bir sürü reklamı da beraberinde getiriyor. Pop-up ekranlar mı dersiniz sitenin orasından burasında çıkanlar mı dersiniz, her türlü reklam tekniğini uygulamışlar buralara 🙂

Proxy sitelerinden bazıları(Başka bildikleriniz varsa ekleme yapabilirim) :

  • www.ktunnel.com
  • www.vtunnel.com

Bu sitelerden bağlanırken, hatta başka sitelerde de dolaşırken reklam görmek istemiyorsanız yada daha az görmek istiyorsanız,

Mozilla Firefox için Ad-Blocker ve Google Chrome için Ad-Blocker eklentilerini reklamların otomatik bloklanması için kullanabilirsiniz.

3-DNS Değiştirme

Belki de en çok kullanılan yöntemlerden bir tanesi DNS değiştirme yöntemi. Genel bir tanım verecek olursak, DNS gitmek istediğiniz sitenin adresini girersiniz ve bu adrese nasıl ulaşabilirim diye DNS sunucusuna sorarsınız. Bu eğer boş ise genelde İnternet Sağlayıcınızdır ve size bloklanan adrese yönlendirir. Ama google gibi birine sorarsanız herzaman çalışan adresi gösterecektir. Bugünlerde DNS’in çalıştığı bazı sitelere daha başka çözümler ile kapattıklarından alternatif yollar ile giriş yapılması gerekiyor. Proxy siteleri de bunlardan birisi ama yavaştır.(Birazdan buna da değinicem :))

Windows DNS Değiştirmek için;

-Durum çubuğunda bulunan İnternetSimgesine(Wireless ya da Kablolu) sağ tıklayın ve Ağ ve Paylaşım Merkezini Aç diyin.

-Bağlı olduğunuz interneti seçin ve bağlantılar kısmına tıklayın.

Özellikler butonuna tıklayın

Internet Protokolü Sürüm 4 (TCP/IPv4) yazan yeri çift tıklayın ve altta DNS yazan bu iki bölüme şunları yazabilirsiniz.

NOT: DNS numaralarını aşağıda sıralasam da yeni okuduğum bir makaleyi de sizinle paylaşmak istiyorum. Mehmet İnce işinde iyi olan bir internet güvenlik uzmanı. Neden Google DNS kullanmamız gerektiğini açıklamış.

Google DNS Numaraları: 

  1. 8.8.8.8
  2. 8.8.4.4

Open, DNS Numaraları:

  1. 208.67.222.222
  2. 208.67.220.220

Norton, DNS Numaraları:

  1. 198.153.192.1
  2. 198.153.194.1

Dnsadvantage, DNS Numaraları:

  1. 156.154.70.1
  2. 156.154.71.1

ScrubIt, DNS Numaraları:

  1. 67.138.54.100
  2. 207.225.209.66

Eğer bunlarla uğraşmak istemezseniz şimdilik sadece Google, Open ve Otomatik DNS ayarlarını tek tıkla halledebilmenizi sağlayan kendi ürünüm olan bir program ile kolayca değiştirebilirsiniz.

Programı buradan indirebilirsiniz. Şimdilik sadece Windows 7’de test ettim. Windows 8’de yada XP’de  çalışmayabilir.

MAC OS-X Leopard DNS Ayarları Değiştirme

– Sistem Özellikleri’ne (System Preferences) tıklayın.

Ağ (Network)

-Gelişmiş’e (Advanced)

DNS sekmesine gelin

– (+) butonu ile DNS adreslerini girin.

Tamam ‘a tıklayın.

Not:Eğer DNS’lerin işe yaramadığını hissederseniz modeminize reset atmayı deneyin

Bu işlemlerden sonra DNS adresiniz değişecektir ve bazı siteler hariç yasaklı olanlara giriş yapabileceksiniz.

5651 Sayılı Yasa ve Özgürlüklerin Kısıtlanması

5651 Sayılı Yasa ve Özgürlüklerin Kısıtlanması

lkd_logo5651 sayılı yasanın yeniden yapılandırılması zaruri bir ihtiyaçtır. Fakat, mevcut hükümetin yasa yapma tekniğindeki kolaycılığı (birbiri ile alakasız onlarca maddenin torbaya doldurulup oldu bittiye getirilmesi tekniği) tekrarlanmakta ve Türkiye’de İnternet Özgürlüğü konusunda çok ciddi sıkıntılara neden olan 5651 sayılı yasa son derece yanlış amaçlar ile yangından mal kaçırırcasına yeniden yazılmak istenmektedir.

Bu yasanın sorunlu olan maddelerinin düzeltilmesi konusundaki toplumun beklentileri yine karşılanmamakta, uluslararası hukukun, anayasanın ve yasaların koruduğu özgürlükler tamamen rafa kaldırılmakta ve konunun uzmanı hukukçuların, bilişim uzmanlarının ve STK’ların görüş ve önerileri dinlenmeden ve yaptıkları uyarılar dikkate dahi alınmadan 5651 sayılı yasa torba teklif içinde yasalaştırılmaya çalışılmaktadır.

İnternet’in sansürlenmesini; katalog suçların bahane edilerek web sayfalarının ve sitelerinin toptan kapatılmasını; site kapatma ve erişim engellemelerinin denetime açık ve şeffaf olarak kamuoyu ile paylaşılma beklentisinin karşılanmamasını; Bakanlık ve TİB gibi siyasi kurumların hukukun da üstüne çıkarak İnternet’i yönetme ve kontrol etme yetkisini ellerine almasını; İnternet üzerinde servis, hizmet, yer sağlayıcılık vb. ticari faaliyetlerde bulunan özel şirketleri, Hükümetin kontrolündeki bir birliğin içine alarak otoriter ve despot bir yönetim tarzının getirilmesini; erişim engellemesini URL bazında yapmak için tüm Türkiye’nin İnternet trafiğinin denetlenmesini, gözetlenmesini ve hatta kayıt altına alınıp saklanmasını İSTEMİYORUZ.

İnternet üzerinden haberleşme, haber alma-verme ve iletişim özgürlüklerinin kontrol ve kayıt altına alınma çabasına karşı İnternet’in Özgür kalmasını İSTİYORUZ.

5651 sayılı yasada yapılmak istenen değişikliklerin derhal geri çekilmesini, bu yasanın konusuna giren başlıklarda Uluslararası hukuka uygun, bireylerin Anayasal haklarını koruyan ve İnternet’in özgür kalmasını sağlayacak düzenlemelerin konu hakkında uzmanlığı ve faaliyetleri olan tüm tarafların katılımı ile yeniden ele alınmasını talep ediyoruz.

Linux Kullanıcıları Derneği

Yönetim Kurulu

Kaynak : Türkiye Linux Kullanıcıları Derneği

Orçun Madran Blogundan esinlenerek ve LKD’nin yazısına ben de katıldığım için blogumda paylaşmak istedim.

Android’de OpenCV4Android ile Yüz Saptama (Face Detection)

Android’de OpenCV4Android ile Yüz Saptama (Face Detection)

Daha önceden OpenCv4Android kütüphanesinin android uygulamasına eklenmesi hakkında yazmıştım. Şimdi ise OpenCv kütüphanesi ile yüz saptama nasıl yapılacağına bir bakalım.

Örneğin bir yüz tanıma işlemi yapacaksınız. Bunun için gerekli olan şey öncelikle fotoğrafta bir yüzün olduğunun saptanmasıdır. Gelin nasıl yapılıyormuş bakalım.

Eğer OpenCv4Android kütüphanesini import etmediyseniz buradan nasıl yapılacağına bakabilirsiniz.

Bu yazıda kullanılacak kütüphaneler :




import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.MatOfKeyPoint;
import org.opencv.core.MatOfRect;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.objdetect.CascadeClassifier;

İçinde yüz saptanacak bir fotoğrafınız var ve bu fotoğrafın telefon içindeki diznini de biliyorsunuz. O zaman öncelikle Mat değişkenine bu fotoğrafı atalım. 




String imagePath = "/mnt/sdcard/foto.jpg";
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = BitmapFactory.decodeFile(imagePath, options);



Eğer büyük ölçekli fotoğraflarla çalışıyorsanız Out Of Memory Exception almanız normaldir. Bunun için buradaki metodu kullanabilirsiniz. Herşeyden önce çalışacağınız fotoğrafın grayscale olması gerekiyor.  Aşağıdaki metod ile fotoğrafınızı GrayScale e çevirebilirsiniz.

public Bitmap toGrayscale(Bitmap bmpOriginal)
{
       int width, height;
       height = bmpOriginal.getHeight();
       width = bmpOriginal.getWidth();
       Bitmap bmpGrayscale = Bitmap.createBitmap(width, height,
                                                 Bitmap.Config.RGB_565);
       Canvas c = new Canvas(bmpGrayscale);
       Paint paint = new Paint();
       ColorMatrix cm = new ColorMatrix();
       cm.setSaturation(0);
       ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
       paint.setColorFilter(f);
       c.drawBitmap(bmpOriginal, 0, 0, paint);



       return bmpGrayscale;
}

Bu uygulamada yüz saptamada kullanılacak olan teknikleri uygulayabilmemiz için lbpcascade_frontalface.xml ve haarcascade_frontalface_alt.xml xml dosyalarını projeye dahil etmemiz lazım. Dosyaları buradan indirebilirsiniz.

Bu dosyaların kullanılabilmesi için projenizden, res klasörüne sağ tıklayıp New->Folder diyip raw isminde bir klasör oluşturun. İndirdiğiniz dosyaları da bu klasörün içine atın.

Yüz saptama(Face Detection) tarafına gelecek olursak. Bu iki xml dosyası yüz saptama yapılırken programı farklı tekniklerle çalıştırdığı için sonuçları herzaman aynı olmayabiliyor. Örneğin, Haar Cascade tekniği Lbp Cascade tekniğine göre daha yavaş olmasına rağmen daha doğru sonuç elde ediyor.

Öncelikle class içindeki private tanımlamalr şöyle olmalı.

 private InputStream is;
 private FileOutputStream os;
 private File cascadeDir;
 private Mat image;
 private File mCascadeFile;
 private CascadeClassifier mJavaDetector;

Kullanımlarına gelecek olursak, aşağıdaki metod verilen fotoğraftaki yüzleri çıkarmanızı sağlıyor. Bunların çalışması için öncelikle OpenCv kütüphanesinin import edilmiş olması lazım. Eğer hala import etmediyseniz. Yazımın başında nasıl yapılacağı hakkında bilgi var.

public void faceDetect(Mat img) throws IOException, TransformerException
{
    try { //cascade dosyasının yüklenme işlemi



	   is = getResources().openRawResource(R.raw.lbpcascade_frontalface);
	   cascadeDir = getDir("cascade", Context.MODE_PRIVATE);
           //mCascadeFile comment satırlı yerdeki gibi de kullanabilirsiniz.
	   mCascadeFile = new File(cascadeDir,
                                   "lbpcascade_frontalface_.xml");
	   /*mCascadeFile = new File(cascadeDir,
                                  "haarcascade_frontalface_default.xml");*/



	   os = new FileOutputStream(mCascadeFile);



	   byte[] buffer = new byte[4096];
	   int bytesRead;



	   while ((bytesRead = is.read(buffer)) != -1)
	   {
	       os.write(buffer, 0, bytesRead);
	   }
	   is.close();
	   os.close();



	   mJavaDetector = new CascadeClassifier(mCascadeFile.getAbsolutePath());



	   if (mJavaDetector.empty())
	   {
	       Log.e(TAG, "Failed to load cascade classifier");
	       mJavaDetector = null;
	   }
	   else
	       Log.i(TAG,"Loaded cascade classifier from " +
                     mCascadeFile.getAbsolutePath());



	   //mCascadeFile.delete();
	   cascadeDir.delete();



    }
    catch (IOException e)
    {
	e.printStackTrace();
	Log.e(TAG, "Failed to load Cascade File. " +
              "Exception thrown: " + e);
    }



    MatOfRect facesdetectionMOR = new MatOfRect();
    //yüz saptamanın yapıldığı yer
    mJavaDetector.detectMultiScale(img, facesdetectionMOR);
    //çıkarılan yüzler
    List facesdetection = facesdetectionMOR.toList();
    //resimden bulunan yüzün kesilmesi için gerkeen değişkenler
    Mat uncropped, cropped;
    Bitmap croppedImg;//kesilen yüzü bitmap olarak kaydetmeliyiz.



    for (Rect rect : facesdetection)
    {//çıkarılan yüzler üzerinde gezinme



    	uncropped = img;
       	Rect roi = rect;//kesilecek olan dikdörtgen
       	cropped = new Mat(uncropped, roi);//kesilmiş olan foto
        //kaydetmek için bitmape çeviriyoruz.
       	croppedImg = Bitmap.createBitmap(cropped.cols(), cropped.rows(),
                                        Bitmap.Config.RGB_565);
       //mat türünden bitmap değişkenine dönüşüm
       	Utils.matToBitmap(cropped, croppedImg);
        //her defasında unique bir isim verilmesi daha iyi olur
       	File file = "/mnt/sdcard/Pics/res1000.jpg";



       	FileOutputStream out = new FileOutputStream(file);
        //çıkarılan yüzlerin basılması
       	croppedImg.compress(Bitmap.CompressFormat.JPEG, 90, out);



    }



    //grayscale fotoğrafın içindeki yüzlerin çizdirilmesi
    for (Rect rect : facesdetection)
    	Core.rectangle(img, rect.tl(), rect.br(),
                       new Scalar(0, 255, 0, 255), 4);
}

Kolay gelsin 😉

Android için OpenCv Kütüphanesi İmplementasyonu

Android için OpenCv Kütüphanesi İmplementasyonu

OpenCV(Open Source Computer Vision) Nedir?

  • —Gerçek zamanlı bilgisayar ile görme kütüphanesi.
  • —Orijinal olarak C/C++ kütüphanesi.
  • —Optimize edilmiş 500’den fazla fonksiyona sahip.
  • BSD(Berkeley Software Distribution) lisansına sahip

OpenCV Desteği Bulunan İşletim Sistemleri ve Programlama Dilleri

Programlama Dilleri                                    İşletim Sistemleri

C/C++ Linux
Windows OS x
Java Android
NET iOS
PHP BlackBerry 10
MATLAB Maemo
OCTAVE
Python
Ruby
Delphi

OpenCV4Android İmplementasoynu

Gereksinimler

OpenCV4Android SDK İçeriği

  • —SDK
  • —OpenCV Manager APK
  • —Örnek Uygulamalar

Kurulum İçin Yapmanız Gerekenler

Kurulumun nasıl yapılacağı OpenCV4Android resmi sayfasında gösteriliyor. Yine de ben size açıklamaya çalışayım.

  • SourceForge sitesine yüklenmiş olan OpenCV-x.x.x-android-sdk.zip dosyasının son versiyonunu indirin.
  • C:/ de yeni bir çalışma alanı açın.(Mesela “C:/OpenCVAndroid/”)
  • İndirdiğiniz .zip dosyasını bu dizinde açın.
  • Eclipse için, OpenCV Android SDK dosyasını proje import eder gibi import edin.(Package Explorer’da boş bir alana sağ tıklayıp import diyin)
  • Gelen sayfada General->Existing Projects into Workspace diyerek devam edin.
  • C:/OpenCVAndroid/ klasörünü seçerek alttaki OpenCV Library’yi işaretleyin. Diğerleri yazılmış örneklerdir. Onları da import ederek üzerinde çalışabilirsiniz.
  • Finish butonuna basarak import işlemini bitirin.

Bazen derleme sorunları çıkabiliyor. Bu sorunları düzeltmek için,

  1. Eclipse’den OpenCV Library klasörüne sağ tıklayarak Android Tools->Fix Project Properties diyip bundan sonra menüden Project->Clean diyerek düzeltebilirsiniz.
  2. Eclipse’den OpenCV Library klasörüne sağ tıklayıp Properties->Android sekmesinden Target kısmının 3.0 ve yükseğinin seçildiğinden ve alttaki checkbox’ın da isLibrary seçildiğinden emin olun.

OpenCV4Android kullanıma hazır hale geldi. Peki nasıl uygulama geliştireceğiz?

Buradan Android’de OpenCV4Android İle Yüz Saptama (Face Detection) yazıma göz atabilirsiniz.

Android SDK ile Yüz Saptama

Android SDK ile Yüz Saptama

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PointF;
import android.graphics.Bitmap.Config;
import android.media.FaceDetector;
import android.media.FaceDetector.Face;
import android.util.Log;



public static Bitmap faceDetection(Bitmap picture)
{
    	//Fotoğrafın enini ve boyunu alır
    	int width = picture.getWidth();
        int height = picture.getHeight();
        //Fotonun en ve boy oranlarına göre FaceDetector türünde bir nesne oluşturulur
        //maksimum kaç yüz saptanması gerektiği belirlenir (5)
        FaceDetector detector = new FaceDetector(width, height,5);
        Face[] faces = new Face[5];//en fazla 5 tane yüz saptanması için



        Bitmap newBitmap= Bitmap.createBitmap(width, height, Config.RGB_565);
        Paint ditherPaint = new Paint();
        Paint drawPaint = new Paint();
        //yüzü çerçeve içine alacak diktörtgenin özellikleri belirlenir
        ditherPaint.setDither(true);
        drawPaint.setColor(Color.RED);
        drawPaint.setStyle(Paint.Style.STROKE);
        drawPaint.setStrokeWidth(2);
        //Fotoğraf üzerine çizim yapılabilmesi için canvasa eklenir
        Canvas canvas = new Canvas();
        canvas.setBitmap(newBitmap);
        canvas.drawBitmap(picture, 0, 0, ditherPaint);
        //Kaç tane yüz bulunduğu bilgisi
        int facesFound = detector.findFaces(newBitmap, faces);
        PointF midPoint = new PointF();
        float eyeDistance = 0.0f;
        float confidence = 0.0f;



        Log.i("FaceDetector", "Number of faces found: " + facesFound);



        if(facesFound > 0)
        {
                for(int index=0; index < facesFound; ++index)
                {//her bulunan yüz için yapılan işlemer
                     faces[index].getMidPoint(midPoint);//bulunan yüzün orta noktası
                     eyeDistance = faces[index].eyesDistance();//gözler arası mesafe px
                     confidence = faces[index].confidence();//güvenilirlik 0-1 arası
                         
                     Log.i("FaceDetector", 
                           "Confidence: " + confidence + 
                           ", Eye distance: " + eyeDistance + 
                           ", Mid Point: (" + midPoint.x + "," + midPoint.y + ")");
                      //yüz üzerine dikdörtgen çizilir     
                     canvas.drawRect((int)midPoint.x - eyeDistance , 
                                     (int)midPoint.y - eyeDistance , 
                                     (int)midPoint.x + eyeDistance, 
                                     (int)midPoint.y + eyeDistance, drawPaint);
                }
        }
        
        return newBitmap;
}
Singleton Tasarım Deseni

Singleton Tasarım Deseni

Amaç ve Özelikler

-Yaratılışsal(Creational) tasarım desenlerindendir.

-Sadece tek bir nesne üretibilir olması amaçlanır. Örn: İnternet sitelerinde kullanıcı giriş nesnesi. (Login Class)

-Sistemin bütün bileşenlerinden ulaşım sağlanması amaçlanır.

Problem

-Uygulamada aynı sınıftan birden fazla olduğunda çıkabilecek problemler.

Nasıl Uygulanır?

Sınıfın tek seferlik yaratılabilir nesnesini, kendini yaratma, atama yapma ve erişim yetkisini verecek şekilde tanımlamamız gerekir. Sınıfın(Singleton) tek nesnesini(Singleton nesnesi) Private Static olarak tanımlayarak başlayabiliriz.

Ardından Singleton nesnesinin başlangıç değerini(initialization) verecek olan kodu sarmalayan(encapsulate) Public Static bir fonksiyon yaratırız. Constructor ise Protected veya Private olarak yaratılır.

Kullanıcı tek seferlik nesneye ihtiyaç duyduğunda bu fonksiyonu sınıf adını kullanarak çağırarak (Örn:Singleton.getInstance()) tek olan nesneyi kullanmaya başlayabilir.

 

Kodlarken

-Singleton sınıfı içerisinde private static nesne tanımlanır.

-Public static fonksiyon tanımlanır.

-Erişim fonksiyonunda Lazy Initialization kullanılır.

-Construction fonksiyonları protected veya private

-Kullanıcılar Singleton nesnesini kullanabilmek için erişim fonksiyonundan yararlanmalıdırlar.

Programlama Dillerinde Singleton

Singleton C# Kodu

Singleton C++ Kodu

-Singleton Java Kodu

Singleton Java Gerçeklemesi

Singleton Java Gerçeklemesi

1- Basit Java Singleton Modeli

public class Singleton {



   private static Singleton instance;



   private Singleton(){ }



   public static Singleton getInstance( )
   {
      if(instance== null)
         instance= new Singleton();



      return instance;
   }



   protected static void doSmt( ) {
      System.out.println("Singleton Metod");
   }
}



public class SingletonDemo {
   public static void main(String[] args) {
      Singleton singleton = Singleton.getInstance( );
      singleton.doSmt( );
   }
}
Singleton C++ Gerçeklemesi

Singleton C++ Gerçeklemesi

Lazy Initialization

#include;



using namespace std;



class Singleton
{



private:
    static Singleton *single;
    Singleton()
    {
        //private constructor
    }



public:
    static Singleton* getInstance();
    void method();
};



Singleton* Singleton::single = NULL;



Singleton* Singleton::getInstance()
{
    if(single == NULL)
    {
        single = new Singleton();
        instanceFlag = true;
        return single;
    }
    else
    {
        return single;
    }
}



void Singleton::method()
{
    cout << "Method of the singleton class"<< endl; } int main() { Singleton *sc1,*sc2; sc1 = Singleton::getInstance(); sc1->method();
    sc2 = Singleton::getInstance();
    sc2->method();



    return 0;
}
C# Singleton Gerçeklemesi

C# Singleton Gerçeklemesi

1-Kötü Kodlama thread Safe Değil

public sealed class Singleton
{
    static Singleton instance=null;



    Singleton()
    {
    }



    public static Singleton Instance
    {
        get
        {
            if (instance==null)
            {
                instance = new Singleton();
            }
            return instance;
        }
    }
}

2-Thread Safe Kodlama
Bu kodlamada lock kullanılarak birden fazla nesnenin aynı anda singleton nesnesine erişimi engellenmiştir.

public sealed class Singleton
{
    static Singleton instance=null;
    static readonly object padlock = new object();



    Singleton()
    {
    }



    public static Singleton Instance
    {
        get
        {
            lock (padlock)
            {
                if (instance==null)
                {
                    instance = new Singleton();
                }
                return instance;
            }
        }
    }
}

3-Kötü Kodlama Thread Safe, İki Kere Kontrol

public sealed class Singleton
{
    static Singleton instance=null;
    static readonly object padlock = new object();



    Singleton()
    {
    }



    public static Singleton Instance
    {
        get
        {
            if (instance==null)
            {
                lock (padlock)
                {
                    if (instance==null)
                    {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }
}