0

Alasan pentingnya menggunakan FRAMEWORK di C# (C Sharp)

Posted by Jujur Sitanggang on 9:58 AM

Bagi para programer pasti sudah tidak asing lagi dengan yang namanya FRAMEWORK, apa itu FRAME WORK? jika diterjemahkan dalam bahasa indonesia artinya adalah kerangka kerja, terus maksudnya? Kerangka kerja merupakan sekumpulan script atau code program yang telah ditata sedemikian rupa sehingga memudahkan kita dalam proses pemanggilan dan penggunaanya. Jadi dengan kata lain FRAMEWORK adalah sekumpulan function fucntion. Mengapa membutuhkan FRAMEWORK? banyak jawaban untuk menjawab pertanyaan ini. Pertama dengan menggunakan framerwork program lebih simple, programer tidak lagi memikirkan algoritma melainkan fokus memikirkan konsep, misalnya saja jika seorang programer harus membuat suatu algortima tentang solver quadratic programing programer akan kesulitan, kedua dengan menggunakan FRAMEWORK proses pengerjaan project semakain cepat dan semakin mudah dan yang lebih penting hasilnya semakin akurat. Beberapa algoritma dan metode dalam sebuah framework sudah diuji hasil akurasinya. Masih bingung.? Akan saya contohkan bagaimana perlunya kita menggunakan FRAMEWORK. Berikut ini adalah framework  FRAMEWORK yang direkomendasikan Accord, Aforge dan Zed Grap dimana kesemua FRAMEWORK ini dikembangkan dengan lisensi Free dan di prakasai oleh GOOGLE. Sekarang perhatikan prevew project dibawah ini

Gambar 1. Preview program membuat histogram

Waupun grafik histogram diatas bisa dibuat tanpa menggunakan FRAMEWORK (secara manual) programer akan kesulitan mengatur tata letak, nilai dan parameter parameter lainnya yang berhubungan dengan grafik tersebut. tetapi kita lihat bedanya jika menggunakan FREMEWORK. Berikut source code untuk membuat grafik diatas
 
rivate void getDataHistogram()
{
   int[,] temp = new int[256, 1];
   int nilaiPixel;
   PointPairList dataGraph = new PointPairList();
   for (int i = 0; i < gambar.Width; i++)
    {
     for (int j = 0; j < gambar.Height; j++)
       {
         nilaiPixel = gambar.GetPixel(i, j).R;
         temp[nilaiPixel, 0] = temp[nilaiPixel, 0] + 1;
       }
    }
    for (int i = 0; i < 256; i++)
      {
         dataGraph.Add(i, temp[i, 0]);
      }
   LineItem myCurve = myPane.AddCurve("data", dataGraph,;
 
   Color.Blue,SymbolType.None);
   myCurve.Line.Fill = new Fill(Color.White, Color.Blue, 45f);
   myPane.XAxis.Scale.Max=258;
   zedGraphControl1.AxisChange();           
}
 

Untuk downlaod source lengkapnya silahkan download di http://www.csharp-indonesia.com/2011/05/membuat-histogram-di-c-c-sharp.html

Sekarang bandingkan dengan membuat grafik diatas tanpa menggunakan FRAMEWORK, jika ditotal ada sekitar 1000 baris lebih source code untuk membuat grafik seperti diatas, menggunakan FRAMEWORK hanya sekitar kurang dari 25 baris.
Contoh kasus kedua, Mengapa penting menggunakan FRAMEWORK?
Pada contoh kasus kedua akan saya tunjukan bagaimana FRAMEWORK sangat efektif untuk menyelesaiakan pekerjaan kita, contoh kasus pada proses deteksi tepi citra, bagi yang suka ilmu komputasi silahkan perhatikan contoh berikut ini

                                                  (a)                           (b)                        (c)
Gambar 2. Preview hasil deteksi tepi
(a) citra asli (b) deteksi tepi canny (c) deteksi tepi sobel

Pada gambar diatas merupakan contoh proses deteksi tepi pada citra digital, gambar a adalah gambar asli sedangkan gambar (b) dan gambar (c) merupakan deteksi tepi dengan kernel CANNY dan juga kernel SOBEL. Pada proses deteksi tepi menggunakan kernel Canny sedikit agak rumit dibangdingkan dengan metode lain, akan tetapi silahkan lihat source code deteksi tepi canny menggunakan FRAMEWORK Aforge
Source code deteksi canny dengan Aforge
 
Bitmap gambar = new Bitmap(openFileDialog1.FileName);
pictureBox3.Image = gambar;
pictureBox3.Width = gambar.Width;
pictureBox3.Height = gambar.Height;
Grayscale gray = new Grayscale(0.2125, 0.7154, 0.0721);
CannyEdgeDetector cany = new CannyEdgeDetector(0,70);
Bitmap hasil=cany.Apply(gray.Apply(gambar));
pictureBox4.Image = hasil;
pictureBox4.Width = gambar.Width;
pictureBox4.Height = gambar.Heigh

Source code deteksi tepi dengan kernel Sobel
 
Bitmap gambar = new Bitmap(openFileDialog1.FileName);
pictureBox5.Image = gambar;
pictureBox5.Width = gambar.Width;
pictureBox5.Height = gambar.Height;
Grayscale gray = new Grayscale(0.2125, 0.7154, 0.0721);
SobelEdgeDetector sobel = new SobelEdgeDetector();
Bitmap hasil = sobel.Apply(gray.Apply(gambar));
pictureBox6.Image = hasil;
pictureBox6.Width = gambar.Width;
pictureBox6.Height = gambar.Height;


Begitu simple dan begitu mudah kan mengimplementasikan deteksi tepi menggunakan FRAMEWORK. sekedar catatan saja bahwasanya kemampuan Aforge dan Accord ini tidak hanya sebatas itu saja FRAMEWORK ini bisa menangani Audio, Control, Audition, Direct Sound, Image Filter, Machine Learning, Math Decompotion, Optimization, Learning, Analysis, Statistics, Komputer VIsion, Wavelet dan masig banyak lagi untuk lebih detailnya klik di http://accord-net.origo.ethz.ch/download/2887
Dan bandingkan dengan source code deteksi tepi menggunakan kernel Sobel jika membuat algoritmanya sendiri, kurang lebih seperti berikut ini


Source Code Deteksi tepi 
  
Bitmap gambar = new Bitmap(data);
int[,] dataPixel;
int[,] hasilAkhir;
double dataX = 0;
double dataY = 0;
double hasil = 0;
gambar = MakeGrayscale(gambar);                  
dataPixel = new int[gambar.Height + 2, gambar.Width + 2];
hasilAkhir=new int[gambar.Height+2, gambar.Width + 2];
for (int i = 0; i < gambar.Height; i++)
{
   for (int j = 0; j < gambar.Width; j++)
    {
        dataPixel[i + 1, j + 1] = gambar.GetPixel(j, i).R;                
    }
}           
for (int i = 1; i < gambar.Height + 1; i++)
{
     for (int j = 1; j < gambar.Width + 1; j++)
     {
         dataX = 0;dataY = 0;hasil = 0;
         dataX = dataX + (dataPixel[i - 1, j - 1] * sobelX[0, 0]);
         dataX = dataX + (dataPixel[i, j - 1] * sobelX[1, 0]);
         dataX = dataX + (dataPixel[i + 1, j - 1] * sobelX[2, 0]);
         dataX = dataX + (dataPixel[i - 1, j + 1] * sobelX[0, 2]);
         dataX = dataX + (dataPixel[i, j + 1] * sobelX[1, 2]);
         dataX = dataX + (dataPixel[i + 1, j + 1] * sobelX[2, 2]);
         dataX = Math.Pow(Math.Pow(dataX, 2), 0.5);
         dataY = dataY + (dataPixel[i - 1, j - 1] * sobelY[0, 0]);
         dataY = dataY + (dataPixel[i - 1, j] * sobelY[0, 1]);
         dataY = dataY + (dataPixel[i - 1, j + 1] * sobelY[0, 2]);
         dataY = dataY + (dataPixel[i + 1, j - 1] * sobelY[2, 0]);
         dataY = dataY + (dataPixel[i + 1, j] * sobelY[2, 1]);
         dataY = dataY + (dataPixel[i + 1, j + 1] * sobelY[2, 2]);
         dataY = Math.Pow(Math.Pow(dataY, 2), 0.5);
         hasil = dataY + dataX;
         hasil = hasil/ 255;
         hasilAkhir[i, j] = Convert.ToInt16(hasil);}
    }
    for (int i = 0; i < hasilAkhir.GetLength(0); i++)
    {
        for (int j = 0; j < hasilAkhir.GetLength(1); j++)
        {
            if (hasilAkhir[i, j] > 0)
            {
                hasilAkhir[i, j] = 255;
            }
            else
            {
                hasilAkhir[i, j] = 0;
            }
        }
    
 
Bitmap temp=new Bitmap (gambar.Width, gambar.Height);  
for (int i = 0; i < gambar.Height; i++)
{
    for (int j = 0; j < gambar.Width; j++)
    {
        temp.SetPixel(j, i, Color.FromArgb(hasilAkhir[i, j],   hasilAkhir[i, j], hasilAkhir[i, j]));
    }
}
        return temp;

Bisa kita lihat bahwasanya menggunakan FRAMEWORK lebih mudah dari pada memprogram sendiri, selain itu jika kita memprogram sendiri kita masih dipusingkan dengan memanage source code, memanage memori dan sebagainya dan yang terpenting kita melakukan uji coba terhadap source code kita. Akan teteapi di FRAMEWORK semua itu sudah dilakukan oleh si pembuat source code tersebut. sehingga kita dimudahkan karena tidak harus melakukan proses proses seperti ditas. Sekarang diberikan contoh yang lebih rumit. Perhatikan ilustrasi berikut ini (Contoh Kasus Pengenalan Wajah)
Dalam pengenalan wajah banyak hal yang harus dilakukan mulai dari preprosesing citra, ektraksi citra, dan klasifikasi citra. Masing masing proses diatas banyak macam varian metodenya, dan jika diimplemtasikan dalam source code pasti menjadi beribu ribu baris.  Anggap saja kita memprogram sendiri, setelah project selesai tentunya kita melakukan testing atau uji coba terhadap sistem yang telah kita buat. Hasilnya..?????? saya yakin jika pengalaman  kurang dalam hal pengenalan pola, presentasi keberhasilanya dibawah 50%.

mari kita lihat jika kita menggunakan FRAMEWORK (Contoh kasus sama, pengenalan Wajah)
berikut ini preview program saat pertama kali dirunning
Gambar 3. Preview Program pengenalan wajah
                   
 Gambar 4. Preview Running Program Pengenalan Wajah Setelah di Klik Button Detect

untuk Download Program pengenalan wajah silahkan download di  
Binary File    :  http://www.ziddu.com/download/16125807/BinariFile.rar.html 
Full Project   :  http://www.ziddu.com/download/16125848/FaceDetection.rar.html

Berikut ini adalah source code program pengenalan wajah diatas


HaarCascadeClassifier classifier = HaarCascadeClassifier.DefaultFaceClassifier;
HaarObjectDetector detector = new HaarObjectDetector(classifier, 30, ObjectDetectorSearchMode.NoOverlap,1.5f, ObjectDetectorScalingMode.SmallerToGreater);
Rectangle[] objects = detector.ProcessFrame(faces);
if (objects.Length > 0)
{
    RectanglesMarker marker = new RectanglesMarker(objects,  Color.Fuchsia);
    pictureBox1.Image = marker.Apply(faces);
}




Simple bukan..?, Walau simple tapi akurasinya tinggi. Sebenarnya source nya tidak sesimple itu, banyak sekali source codenya bahkan jumlahnya sampai puluhan ribu. Akan tetapi jumlah baris yang begitu besarnya ditata dan dikonver ke beberapa file DLL, sehingga kita hanya perlu menambahkan file dll tersebut kita busa melakukan akses ke function fucntion yang telah disediakan oleh si pembuat FRAMEWORK tersebut. Bayangkan jika program pengenalan wajah harus ditulis sendiri. Pasti akan memerlukan waktu.  Itulah beberapa alasan pentingnya menggunakan FRAMEWORK dalam pekerjaan kita.
For more informastion contact us on
Informasi@csharp-indonesia.com



 


 


0 Comments

Copyright Jujur Soaloon Sitangang Lipan All rights reserved. Theme by Sitanggang. | Bloggerized by Soalparna.