0
Alasan pentingnya menggunakan FRAMEWORK di C# (C Sharp)
Posted by jujur
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