aplikasi jari

Upload: putra-chan

Post on 13-Oct-2015

73 views

Category:

Documents


0 download

DESCRIPTION

refrensi

TRANSCRIPT

  • 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