aplikasi jari
DESCRIPTION
refrensiTRANSCRIPT
-
5/22/2018 Aplikasi Jari
1/14
Software Visual Studio 2010
Microsoft Visual Studio 2010 merupakan sebuah perangkat lunak lengkap (suite) yang dapat
digunakan untuk melakukan pengembangan aplikasi, baik itu aplikasi bisnis, aplikasi personal,
ataupun komponen aplikasinya, dalam bentuk aplikasi console, aplikasi Windows, ataupun
aplikasi Web. Visual Studio mencakup kompiler, SDK, Integrated Development Environment
(IDE), dan dokumentasi (umumnya berupa MSDN Library). Kompiler yang dimasukkan ke
dalam paket Visual Studio antara lain Visual C++, Visual C#, Visual Basic, Visual Basic .NET,
Visual InterDev, Visual J++, Visual J#, Visual FoxPro, danVisual SourceSafe.
Microsoft Visual Studio dapat digunakan untuk mengembangkan aplikasi dalam native code
(dalam bentuk bahasa mesin yang berjalan di atas Windows) ataupun managed code (dalam
bentuk Microsoft Intermediate Language di atas .NET Framework). Selain itu, Visual Studio
juga dapat digunakan untuk mengembangkan aplikasi Silverlight, aplikasi Windows Mobile
(yang berjalan di atas .NET Compact Framework). Visual studio yang digunakan tugas akhir ini
adalah visual studio 2010 yang mendukung libarary up to date computer vision dalam proses
pengolahan citra. Microsoft Visual Studio C# 2010 Ultimate dipilih karena dapat digunakan dan
diintegrasikan dengan library OpenCV terbaru.
-
5/22/2018 Aplikasi Jari
2/14
2.6 EmguCV
OpenCV merupakan library yang paling terkenal dan paling banyak digunakan hingga
saat ini. OpenCV dikembangkan oleh Intel. Mulanya ditulis dalam bahasa C dan sekarang juga
menyertakan interface C++ sejak versi 2.0. Tentunya library ini secara default hanya bisa
digunakan oleh program yang ditulis dengan C atau C++.
EmguCV adalah wrapper .Net untuk OpenCV. Dengan EmguCV, fungsi-fungsi dalam OpenCV
bisa dipanggil melalui bahasa pemrograman yang compatible dengan .NET seperti C#, VB, dan
VC++. Keuntungan menggunakan EmguCV yang paling utama adalah library ini sepenuhnya
ditulis dengan C# yang mana tentunya lebih safe karena pembuatan object ataupun reference
diatur oleh garbage collector. Selain itu, EmguCV juga cross platform sehingga dapat dicompile
lewat Mono dan dijalankan di atas sistem operasi Linux atau Mac OS.
Dengan EmguCV, kita dapat membuat aplikasi apapun seperti layaknya menggunakan OpenCV.
Namun paling tidak ada dua konsep penting yang perlu diketahui terlebih dahulu sebelum
menggunakan Emgu CV. Konsep yang pertama mengenai layer pada EmguCV, EmguCV terdiri
dari 2 layer yaitu basic layer dan second layer. Basic layer mengandung fungsi, struktur, dan
enumerasi yang secara langsung merefleksikan apa yang ada di OpenCV. Dengan adanya layer
inilah kita bisa memanggil fungsi-fungsi pada OpenCV dengan bahasa pemrograman C#.
Sedangkan second layer mengandung kelas-kelas yang memanfaatkan keunggulan teknologi
.NET.
Konsep kedua yang perlu dipahami mengenai code mapping yaitu function mapping, yaitu
bagaimana kode-kode dalam OpenCV dipetakan ke dalam Emgu CV. Fungsi-fungsi pada
OpenCV bisa dipanggil melalui kelas CvInvoke pada Emgu CV. Nama fungsi yang dapat
dipanggil pun sama persis dengan fungsi pada OpenCV. Contohnya kode C# di bawah ini:
CvInvoke.cvCircle( imgOriginal, new Point((int)circle.Center.X, (int)circle.Center.Y), 3, NewMCvScalar(0, 255, 0), -1, LINE_TYPE.CV_AA, 0);
-
5/22/2018 Aplikasi Jari
3/14
Sama dengan kode C di bawah ini:
CvCreateImage.CvCircle(imgOriginal, new Point((int)circle.Center.X, (int)circle.Center.Y), 3,
New MCvScalar(0, 255, 0), -1, LINE_TYPE.CV_AA, 0);
Untuk dapat menggunakan library EmguCV pada Visual Studio C# 2010 diperlukan beberapa
pengaturan yaitu :
1. Pada solution Explorer pada windows form c# baru yang sudah kita buat, kita akan
menambahkan library EmguCV caranya adalah pada menubar klik project lalu pilih add
reference lalu browse dan cari folder EmguCV, karena saya menginstal EmguCV di partisi C
selanjutnya hanya tinggal memilih folder emgucv-windows-x86 2.4.0.1717. Setelah itu pilih
folder bin dan pilih directory EmguCV yang berkahiran.dll seperti:
Emgu.CV.DebuggerVisualizers.VS2010.dll, Emgu.CV.dll, Emgu.CV.GPU.dll,
Emgu.CV.ML.dll, Emgu.CV.OCR.dll, Emgu.CV.UI.dll, Emgu.Util.dll.
2. Pada menubar project pilih add exciting item lalu pilih folder EmguCV. Lalu klik folder
emgucv-windows-x86 2.4.0.1717 setelah itu pilihlah folder bin dan double klik folder x86. Jika
didalam folder x86 tidak ditemukan satu filepun pilihlan all files dan masukan library yang
berawalan OpenCV dan berakhiran .dll
seperti:opencv_calib3d240.dll,opencv_contrib240.dll,opencv_core240.dll,opencv_features2d240
.dll,opencv_ffmpeg240.dll,opencv_ffmpeg240.dll,opencv_gpu240.dll,opencv_highgui240.dll,op
encv_imgproc240.dll,opencv_legacy240.dll,opencv_ml240.dll,opencv_nonfree240.dll,opencv_o
bjdetect240.dll,opencv_photo240.dll,opencv_stitching240.dll, opencv_video240.dll dan
opencv_videostab240.dll.
3. Pada form1 solution explorer library OpenCV yang sudah kita masukan
seperti:opencv_calib3d240.dll,opencv_contrib240.dll,opencv_core240.dll,opencv_features2d240
.dll,opencv_ffmpeg240.dll,opencv_ffmpeg240.dll,opencv_gpu240.dll,opencv_highgui240.dll,opencv_imgproc240.dll,opencv_legacy240.dll,opencv_ml240.dll,opencv_nonfree240.dll,opencv_o
bjdetect240.dll,opencv_photo240.dll,opencv_stitching240.dll, opencv_video240.dll dan
opencv_videostab240.dll diblok menggunakan mouse dan pilih properties pada toolbars. Pada
fungsi copy to output directory pilih copy always lalu save all.
-
5/22/2018 Aplikasi Jari
4/14
4. Pada pengaturan toolbox untuk mengaktifkan picture box yang sudah memiliki library
EmguCV yang dapat digunakan untuk pengolahan citra perlu dilakukan pengaturan untuk
menampilkan toolbox ini, caranya adalah carilah general didalam toolbox lalu klik kanan dan
choose item. Didalam .Net framework components pilih browse lalu carilah folder EmguCV dan
double klik folder emgucv-windows-x86 2.4.0.1717. Setelah itu pilih folder bin dan pilihlan
EmguCV.UI.dll dan ceklistlah image box.
5. Toolbox image box inilah yang dapat digunakan nanti sebagai penampil gambar asli dan
hasil dari pengolahan citra yang didapatkan dengan memanfaatkan fungsi EmguCV pada c#.
-
5/22/2018 Aplikasi Jari
5/14
Program pendeteksi dan penghitung jari
usingSystem;
usingSystem.Collections.Generic;usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
usingEmgu.CV;usingEmgu.CV.CvEnum;
usingEmgu.CV.Structure;
usingEmgu.CV.UI;
usingSystem.Runtime.InteropServices;
namespaceobjecttracking_openCV{
publicpartialclassForm1: Form
{
CaptureCapWebCam;
Seq Hull;
Image imgOrignal;
Seq defects;MCvConvexityDefect[] defectArray;
MCvBox2Dbox;MemStoragestorage = newMemStorage();
//bool button_pressed = false;
publicForm1()
{InitializeComponent();
}
privatevoidForm1_Load(objectsender, EventArgse){
//trying to capture a vedio input device
try{
CapWebCam = newCapture();
-
5/22/2018 Aplikasi Jari
6/14
}
catch(NullReferenceExceptionexcept)
{label3.Text = except.Message;
return;
}
Application.Idle += ProcessFramAndUpdateGUI;
}
privatevoidForm1_FormClosed(objectsender, FormClosedEventArgse)
{
if(CapWebCam != null)
{CapWebCam.Dispose();
}
}
voidProcessFramAndUpdateGUI(objectSender, EventArgsagr)
{
intFinger_num = 0;DoubleResult1 = 0;
DoubleResult2 = 0;
//querying imageimgOrignal = CapWebCam.QueryFrame();
if(imgOrignal == null) return;
//Applying YCrCb filterImage currentYCrCbFrame = imgOrignal.Convert();
Image skin = newImage(imgOrignal.Width,
imgOrignal.Height);
skin = currentYCrCbFrame.InRange(newYcc(0, 131, 80), newYcc(255, 185, 135));
StructuringElementExrect_12 = newStructuringElementEx(10, 10, 5, 5,
Emgu.CV.CvEnum.CV_ELEMENT_SHAPE.CV_SHAPE_RECT);
//Eroding the source image using the specified structuring element
CvInvoke.cvErode(skin, skin, rect_12, 1);
StructuringElementExrect_6 = newStructuringElementEx(6, 6, 3, 3,
Emgu.CV.CvEnum.CV_ELEMENT_SHAPE.CV_SHAPE_RECT);
//dilating the source image using the specified structuring elementCvInvoke.cvDilate(skin, skin, rect_6, 2);
skin = skin.Flip(FLIP.HORIZONTAL);//smoothing the filterd , eroded and dilated image.
-
5/22/2018 Aplikasi Jari
7/14
skin = skin.SmoothGaussian(9);
imgOrignal = imgOrignal.Flip(FLIP.HORIZONTAL);//extracting contours.
Contour contours = skin.FindContours();
Contour biggestContour = null;//extracting the biggest contour.
while(contours != null)
{
Result1 = contours.Area;
if(Result1 > Result2)
{Result2 = Result1;
biggestContour = contours;
}contours = contours.HNext;
}
//applying convexty defect allgoritm to find the count of fingers
if(biggestContour != null){
Finger_num = 0;
biggestContour = biggestContour.ApproxPoly((0.00025));
imgOrignal.Draw(biggestContour, newBgr(Color.LimeGreen), 2);
Hull = biggestContour.GetConvexHull(ORIENTATION.CV_CLOCKWISE);defects = biggestContour.GetConvexityDefacts(storage,
ORIENTATION.CV_CLOCKWISE);
imgOrignal.DrawPolyline(Hull.ToArray(), true, newBgr(0, 0, 256), 2);
box = biggestContour.GetMinAreaRect();
defectArray = defects.ToArray();
for(inti = 0; i < defects.Total; i++)
{
PointFstartPoint = newPointF((float)defectArray[i].StartPoint.X,(float)defectArray[i].StartPoint.Y);
PointFdepthPoint = newPointF((float)defectArray[i].DepthPoint.X,(float)defectArray[i].DepthPoint.Y);
PointFendPoint = newPointF((float)defectArray[i].EndPoint.X,(float)defectArray[i].EndPoint.Y);
-
5/22/2018 Aplikasi Jari
8/14
CircleFstartCircle = newCircleF(startPoint, 5f);CircleFdepthCircle = newCircleF(depthPoint, 5f);
CircleFendCircle = newCircleF(endPoint, 5f);
if((startCircle.Center.Y < box.center.Y || depthCircle.Center.Y < box.center.Y) &&
(startCircle.Center.Y < depthCircle.Center.Y) &&
(Math.Sqrt(Math.Pow(startCircle.Center.X - depthCircle.Center.X, 2) +Math.Pow(startCircle.Center.Y - depthCircle.Center.Y, 2)) >
box.size.Height / 6.5))
{
Finger_num++;}
}
label2.Text = Finger_num.ToString(); // updating finger count
}
// Finding the center of contour{
MCvMomentsmoment = newMCvMoments(); // a new MCvMoments object
try
{
moment = biggestContour.GetMoments(); // Moments of biggestContour}
catch(NullReferenceExceptionexcept)
{label3.Text = except.Message;
return;
}
CvInvoke.cvMoments(biggestContour, refmoment, 0);
doublem_00 = CvInvoke.cvGetSpatialMoment(refmoment, 0, 0);
doublem_10 = CvInvoke.cvGetSpatialMoment(refmoment, 1, 0);doublem_01 = CvInvoke.cvGetSpatialMoment(refmoment, 0, 1);
intcurrent_X = Convert.ToInt32(m_10 / m_00) / 10; // X location of centre ofcontour
intcurrent_Y = Convert.ToInt32(m_01 / m_00) / 10; // Y location of center of
contouriborignal.Image = imgOrignal;
-
5/22/2018 Aplikasi Jari
9/14
}}
privatevoidiborignal_Click(objectsender, EventArgse){
}
}}
Hasil Pengujian
-
5/22/2018 Aplikasi Jari
10/14
-
5/22/2018 Aplikasi Jari
11/14
-
5/22/2018 Aplikasi Jari
12/14
-
5/22/2018 Aplikasi Jari
13/14
-
5/22/2018 Aplikasi Jari
14/14