Şu Anda Baktığınız Yer
Category: Çalışmalar

Android Uygulama Silme Kodu

Android Uygulama Silme Kodu

Silmek istediğiniz uygulamanın paket ismini biliyor olmanız gerekiyor öncelikle. Uygulamanın paket ismini aşağıda yazılmış olan com.example.app ile değiştirip deneyin.

 Intent intent = new Intent(Intent.ACTION_DELETE);
 intent.setData(Uri.parse("package:com.example.app"));
 startActivity(intent);
Android – Uygulamayı Cihaz Admini Yapma

Android – Uygulamayı Cihaz Admini Yapma

Uygulamanızı cihazın admini neden yapmak isteyelim? Bir çok sebebi olabilir bunun. Bir kaç tanesini aşağıda sıralarım.

Uygulamanız ile,
-Ekranı kilitleyip, karartabilirsiniz
-Cihazınızdaki dosyaları şifreleyebilirsiniz
-Yeni bir telefon şifresi tanımlayabilir ya da kaldırabilirsiniz
-Bütün verileri temizleyebilirsiniz vb..

Kodu şu şekildedir.

AndroidManifest.xml

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/myStyle" >
...

   <receiver android:name="com.uygulama.paketi.MyAdmin"
         android:permission="android.permission.BIND_DEVICE_ADMIN">
       <meta-data android:name="android.app.device_admin"
                android:resource="@xml/policies" />
       <intent-filter>
                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
                <action android:name="android.app.extra.DEVICE_ADMIN" />
       </intent-filter>
   </receiver>

...
</application>

AndroidManifest.xml de adı geçen policies.xml
Bunlardan işinize yaramayanları çıkartmanızda fayda var. Çünkü izinlerde ihtiyacınız olmayan birşey de isteniyorsa, kullanıcıyı korkutmuş oluruz.

<!--?xml version="1.0" encoding="utf-8"?-->
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-policies>
       <limit-password />
       <watch-login />
       <reset-password />
       <force-lock />
       <wipe-data />
       <expire-password />
       <encrypted-storage />
       <disable-camera />
       </uses-policies>
</device-admin>  

Admin Java Sınıfı MyAdmin.java

package com.covayurt.screenoff.receivers;

import android.app.admin.DeviceAdminReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class MyAdmin extends DeviceAdminReceiver{


    void showToast(Context context, CharSequence msg)
    {
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
    }

    public CharSequence onDisableRequested(Context paramContext, Intent paramIntent)
    {
        return "This is an optional message to warn the user about disabling.";
    }

    public void onDisabled(Context paramContext, Intent paramIntent)
    {
        showToast(paramContext, "Sample Device Admin: disabled");
    }

    public void onEnabled(Context paramContext, Intent paramIntent)
    {
        showToast(paramContext, "Sample Device Admin: enabled");
    }

    public void onPasswordChanged(Context paramContext, Intent paramIntent)
    {
        showToast(paramContext, "Sample Device Admin: pw changed");
    }

}

MainActivity.java


    static public final int ADMIN_REQUEST = 1;
    private DevicePolicyManager deviceManger;
    private ComponentName compName;
    private boolean active;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ...
        
        deviceManger = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
        compName = new ComponentName(this, MyAdmin.class);
        active = deviceManger.isAdminActive(compName);
        if(!active)
        {
           Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
           intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, compName);
           startActivityForResult(intent, ADMIN_REQUEST);
        }
        ...
    }

    ... 

    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if(requestCode == ADMIN_REQUEST)
        {
             //Burada admin isteğini kabul edip etmediğine göre işlem yapabilirsiniz.
        }

        super.onActivityResult(requestCode, resultCode, data);
    }

Android Material Design Floating Action Button Yapımı

Android Material Design Floating Action Button Yapımı

fab_button

Yapmak istediğimiz tam olarak yukarıdaki gibi liste kaydıkça kaybolup geri gelen bir buton 🙂

Android Studio için başlangıcımız şu şekilde.

build.gradle dosyası

dependencies {
    ..
    compile 'com.melnykov:floatingactionbutton:1.3.0'
    ..
}

activity_schedule_list.xml

<RelativeLayout .. xmlns:fab="http://schemas.android.com/apk/res-auto" >
    ...
    <com.melnykov.fab.FloatingActionButton android:id="@+id/add_schedule_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_add" fab:fab_colorNormal="@color/primary" fab:fab_colorPressed="@color/primaryDark" fab:fab_colorRipple="@color/primaryDark" android:layout_alignParentBottom="true" android:layout_marginBottom="44dp" />

     ...
</RelativeLayout>

Java Sınıfı

public class ActivityClass extends ActionBarActivity implements View.OnClickListener, AdapterView.OnItemClickListener {
private ListView scheduleListView;
    private TextView tvScheduleInfoText;
    private FloatingActionButton fab;
    private ImageButton actionButton;

     protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_schedule_list);

        ...

        scheduleListView = (ListView) findViewById(R.id.list);
        fab = (FloatingActionButton) findViewById(R.id.add_schedule_button);
        actionButton = (ImageButton) findViewById(R.id.add_schedule_button);

        scheduleListView.setOnItemClickListener(this);
        actionButton.setOnClickListener(this);
        fab.attachToListView(scheduleListView);

        ...

    }

    @Override
    public void onClick(View v)
    {
        if(v.getId() == actionButton.getId())
        {
            //Ne gerekiyorsa
        }
    }
    
}

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    ...
    <color name="primary">#009688</color>
    <color name="primaryDark">#00776A</color>
    ...
</resources>
Unity-Javascript – Dokunma Algılama

Unity-Javascript – Dokunma Algılama

Dokunma tanımaya ihtiyacınız olan fonksiyona aşağıdaki kodu yazın ;

if(platform == RuntimePlatform.Android || platform == RuntimePlatform.IPhonePlayer)
{
      if(Input.touchCount => 0)
      {
         if(Input.GetTouch(0).phase == TouchPhase.Began)
         {
              checkTouch(Input.GetTouch(0).position);
         }
      }
}
else if(platform == RuntimePlatform.WindowsEditor)
{
    if(Input.GetMouseButtonDown(0))
    {
         checkTouch(Input.mousePosition);
    }
}

Aşağıdaki fonksiyonu da aynı .js dosyasına ekleyerek hem iphone hem desktop windows hem de androiddeki dokunmaları ve tıklamaları algılayarak işlem yapabilirsiniz.

function checkTouch(pos)
{
   var wp : Vector3 = Camera.main.ScreenToWorldPoint(pos);
   var touchPos : Vector2 = new Vector2(wp.x, wp.y);
   var hit = Physics2D.OverlapPoint(touchPos);
   if(hit)
   { 
      hitCount++;
      hit.transform.gameObject
     .SendMessage('Clicked',0,SendMessageOptions.DontRequireReceiver);
      var x = transform.position.x;
      var y = transform.position.y;
      if(hit.transform.gameObject.name.Equals("gameObject"))
      {
           //dokunma algılama işlemi
      }
   }
}
Android Google Play’den Versiyon Kontrolü

Android Google Play’den Versiyon Kontrolü

Versiyon güncellemelerini uygulamadan bildirim olarak almak isteyenlere gelsin. Biliyorum kullanıcılar güncelleme konusunda inatçı olabiliyorlar 🙂 Hatılatmak lazım.

Öncesinde jSoup-x.x.x.jar kütüphanesini indirmeli ve bunu projeye eklemelisiniz. Eclipse platformu için Projeye sağ tıklayıp->Properties->Java Build Path->Libraries->Add External JARs diyerek indirdiğiniz .jar dosyasını ekleyebilirsiniz.

Bir AsyncTask Class’ı yaratarak başlayalım. Bu işlemi arka planda yapacağız.

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;



class CheckVersionFromGooglePlay extends AsyncTask(String, Void, String) {



	private Context context;
	private String version="";



	public CheckVersionFromGooglePlay(Context context)
	{
		this.context = context;
	}



    @Override
    protected String doInBackground(String... strings) {



        try {



            Document doc  = Jsoup.connect("https://play.google.com/store/apps/details?id=com.covayurt.toggleIt").get();
            // Get document (HTML page) title



            Elements elements = doc.getElementsByAttributeValueContaining("itemprop", "softwareVersion");



            for(Element ele : elements)
            {
            	Log.i("toggleIt",ele.text());
            	version = ele.text();
            }



        }
        catch(Throwable t) {
            t.printStackTrace();
        }



        version = version.trim();
        //Burdan sonra versiyon ile ne yapmak isterseniz yapabilirsiniz.



        return version;
    }



    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);



    }
}



Bu kodu kullanmak için ise; Versiyon kontrolü yapmanız gereken yerde,

(new CheckVersionFromGooglePlay(this)).execute("");

kodunu yazabilirsiniz.

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.

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.