Perancangan Pendeteksi Kedipan Mata Untuk Fungsi Klik Pada Mouse Melalui Kamera Web.

(1)

i

PERANCANGAN PENDETEKSI KEDIPAN MATA UNTUK

FUNGSI KLIK PADA MOUSE MELALUI KAMERA WEB

Daniel / 0722020

Email : b_aso_1989@hotmail.com

Jurusan Teknik Elektro, Fakultas Teknik, Universitas Kristen Maranatha Jalan Prof. drg. Suria Sumantri, MPH 65, Bandung 40164, Indonesia

ABSTRAK

Dalam penggunaan Personal Computer (PC) dibutuhkan beberapa

perangkat, salah satunya adalah mouse. Mouse merupakan perangkat penting bagi pemakai untuk memberikan perintah-perintah pada PC. Akan tetapi, bagi

pemakai yang mempunyai kekurangan fisik (cacat) sehingga pemakai tidak dapat menggerakkan atau mengendalikan anggota tubuhnya kecuali mata, maka pemakai tersebut tidak dapat menggerakkan mouse. Oleh karena itu dibutuhkan suatu aplikasi yang dapat membantu pemakai tersebut untuk mengendalikan

mouse.

Dalam Tugas Akhir ini, dibuat program aplikasi pendeteksi kedipan mata untuk fungsi klik pada mouse melalui kamera web. Kamera web menangkap citra kedipan mata secara real time dengan bantuan kotak panduan yang disediakan. Kamera web menangkap 4 citra secara real time dan mengubahnya menjadi citra biner sehingga setiap citra dapat dihitung jumlah piksel hitamnya. Setelah itu, dilakukan perbandingan jumlah piksel hitam masing-masing citra dari 4 citra biner yang dicapture secara real time dengan jumlah piksel hitam dari citra referensi pada saat buka mata dan tutup mata. Jika 4 citra tersebut digolongkan citra sedang melakukan kedipan paksa maka akan dilakukan eksekusi fungsi klik kiri mouse.


(2)

ii

Dari hasil uji coba untuk pemakai dengan bentuk mata yang berbeda-beda, program aplikasi dapat berfungsi dengan baik dengan tingkat keberhasilan rata-rata 80%. Jarak optimal mata pemakai ke kamera web adalah 30-35cm.


(3)

iii

DESIGN OF EYE BLINK DETECTION FOR MOUSE CLICK

FUNCTION THROUGH WEBCAM

Daniel / 0722020

Email : b_aso_1989@hotmail.com

Electrical Engineering Departement, Faculty of Engineering, Maranatha Christian University

Prof. drg. Suria Sumantri, MPH 65 Street, Bandung 40164, Indonesia

ABSTRACT

In using Personal Computer (PC) need some set of device and one of them is mouse. Mouse is an important device for the user to give commands to the PC. However, for users who have a disability such as in which the users cannot move or control parts of the body except the eyes, so they cannot control the mouse. It is needed an application to help those users to control the mouse.

In this Final Project is designed an eye blink detection for mouse click function through webcam. Webcam captures the eye blink of image in real time with the help of a guide box provided. Webcam captures four images in real time and turn it into a binary image so that each image can be calculated number of black pixels. After that, to compare the number of black pixels of each image from four binary images captured in real time with the number of black pixels of the reference image when the eyes open and eyes closed. If the four images were classified as a forced eye-blink images, then execute the left click function of mouse.


(4)

iv

From the test results to the user with a different eye, application programs can function well with an average success rate of 80%. Optimal distance between the eyes and webcam are 30-35cm.


(5)

vii

DAFTAR ISI

ABSTRAK ... i

ABSTRACT ... iii

KATA PENGANTAR ... v

DAFTAR ISI ... vii

DAFTAR TABEL ... x

DAFTAR GAMBAR ... xi

BABI PENDAHULUAN 1.1 Latar Belakang Masalah ... 1

1.2 Perumusan Masalah ... 2

1.3 Tujuan ... 2

1.4 Pembatasan Masalah... 2

1.5 Metodologi ... 2

1.6 Sistematika Penulisan ... 3

BABII LANDASANTEORI 2.1 Pengertian Citra ... 4

2.2 Dasar Warna ... 6

2.3 Konversi Citra Warna Ke Citra Biner ... 7

2.4 Kamera Web ... 9

2.5 Application Program Interface ... 10

2.6 Dynamic Link Library ... 11

2.6.1 Avicap32.dl ... 12

2.6.2 Kernel32.dll ... 13

2.6.3 User32.dll ... 13

2.6.3.1 Fungsi SendMessage... 14


(6)

viii

2.7 Class Module FastDrawing ... 16

2.7.1 Fungsi untuk mengambil data RGB ... 17

2.7.2 Fungsi untuk menyimpan data RGB pada suatu piksel ... 17

2.8 Class Module CMouseEvent ... 18

2.9 Visual Basic 6.0 Untuk Representasi Citra Digital ... 19

2.9.1 If…Then…Else Statement ... 20

2.9.1 For…Next Statement... 21

BABIII PERANCANGAN DAN REALISASI 3.1 Perancangan. ... 23

3.2 Setting Mata ... 26

3.3 Perbandingan Jumlah Piksel Hitam Citra ... 27

3.4 Form yang aplikasi dirancang ... 29

3.5 Klik Mouse ... 31

BABIV DATA PENGAMATAN DAN ANALISIS DATA 4.1 Setting Mata Untuk Referensi Terhadap Bentuk Mata Pemakai Yang Berbeda-beda. ... 32

4.1.1 Setting Mata Untuk Referensi Terhadap Pemakai Berkacamata dan Bermata Sedang. ... 34

4.1.2 Setting Mata Untuk Referensi Terhadap Pemakai Berkacamata dan Bermata Sipit. ... 34

4.1.3 Setting Mata Untuk Referensi Terhadap Pemakai Bermata Besar. ... 35

4.1.4 Setting Mata Untuk Referensi Terhadap Pemakai Bermata Sedang. ... 36

4.1.5 Setting Mata Untuk Referensi Terhadap Pemakai Bermata Sipit. ... 36

4.2 Batas Toleransi Jumlah Piksel Hitam Terhadap Referensi Hasil Setting Mata. ... 37


(7)

ix

4.3 Pengujian Jarak Mata Ke Kamera Web. ... 39 4.4 Pengujian Tingkat Keberhasilan Aplikasi ... 41 4.5 Analisa Data. ... 45

BABV KESIMPULAN DAN SARAN

5.1 Kesimpulan. ... 46 5.2 Saran. ... 46

DAFTAR PUSTAKA. ... 47


(8)

x

DAFTAR TABEL

Tabel 2.1 Tabel Fungsi mouse_event ... 15

Tabel 3.1 Keterangan-Keterangan Objek GUI Dalam Aplikasi ... 30

Tabel 4.1 Hubungan Nilai Variabel x Dengan Sentivitas ... 37

Tabel 4.2 Hubungan Nilai Variabel y Dengan Sensitivitas ... 38

Tabel 4.3 Pengaruh Jarak Mata Ke Kamera Web Terhadap Tingkat Keberhasilan ... 39

Tabel 4.4 Kode Mata dan Tipe Mata ... 41

Tabel 4.5 Hasil Pengujian dan Tingkat Keberhasilan Aplikasi (Normal / Default Settings) ... 42

Tabel 4.6 Hasil Pengujian dan Tingkat Keberhasilan Aplikasi (Diatur)... 43


(9)

xi

DAFTAR GAMBAR

Gambar 2.1 Citra Digital ... 5

Gambar 2.2 Ruang Warna RGB ... 7

Gambar 2.3 Citra Biner ... 8

Gambar 2.4 Kamera Web Logitech QuickCam Pro For Notebook... 9

Gambar 2.5 IDE Visual Basic ... 19

Gambar 3.1 Diagram Blok ... 22

Gambar 3.2 Diagram Alir Keseluruhan ... 23

Gambar 3.3 Kotak Panduan Pada Aplikasi ... 24

Gambar 3.4 Empat Citra Biner Yang Ditangkap Secara Real Time ... 24

Gambar 3.5 Aplikasi Kamera Web... 25

Gambar 3.6 Diagram Alir Subrutin Setting Mata ... 26

Gambar 3.7 Diagram Alir Subrutin Perbandingan Jumlah Piksel Hitam Citra ... 28

Gambar 3.8 Form Aplikasi Yang Dirancang ... 29

Gambar 4.1 Bentuk-Bentuk Mata Pemakai Pada Uji Coba ... 33

Gambar 4.2 Pemakai Berkacamata dan Bermata Sedang ... 34

Gambar 4.3 Pemakai Berkacamata dan Bermata Sipit ... 35

Gambar 4.4 Pemakai Bermata Besar ... 35

Gambar 4.5 Pemakai Bermata Sedang ... 36

Gambar 4.6 Pemakai Bermata Sipit ... 37

Gambar 4.7 Penggunaan aplikasi pada saat jarak 30cm ... 40

Gambar 4.8 Penggunaan aplikasi pada saat jarak 35cm ... 40

Gambar 4.9 Kamera Web Terkena Banyak Cahaya Dan Pengaturan Aplikasi Kamera Web Normal (Default Settings) ... 44

Gambar 4.10 Kamera Web Terkena Banyak Cahaya Dan Pengaturan Aplikasi Kamera Web Diatur ... 44


(10)

LAMPIRAN A

LISTING PROGRAM


(11)

A-1 1. Listing Program Utama

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Declare Function capCreateCaptureWindow Lib "avicap32.dll" Alias "capCreateCaptureWindowA" (ByVal lpszWindowName As String, ByVal dwStyle As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hwndParent As Long, ByVal nID As Long) As Long

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private mCapHwnd As Long

Private Const CONNECT As Long = 1034 Private Const DISCONNECT As Long = 1035 Private Const GET_FRAME As Long = 1084 Private Const COPY As Long = 1054

Dim continue As Boolean

Private m_Mouse As CMouseEvent

Dim i As Integer, j As Integer

Dim r As Integer, G As Integer, B As Integer, L As Long Dim X As Long, Y As Long

Dim hitam9 As Integer, hitam10 As Integer

Dim hitam1 As Integer, hitam2 As Integer, hitam3 As Integer, hitam4 As Integer, hitam5 As Integer, hitam6 As Integer, hitam7 As Integer, hitam8 As Integer Dim totalhitam As Long

Option Explicit

Dim fDraw As New FastDrawing Dim ImageData() As Byte

Dim Rb As Long, Gb As Long, Bb As Long Dim lebarFot As Long, tinggiFot As Long Dim QuickX As Long

Dim z As Integer

Sub STARTCAM() 'Memulai kamera untuk mengambil gambar

mCapHwnd = capCreateCaptureWindow("WebcamCapture", 0, 0, 0, 320, 240, Me.hWnd, 0)

DoEvents

SendMessage mCapHwnd, CONNECT, 0, 0 'menghubungkan kamera End Sub


(12)

A-2

Sub STOPCAM() ' untuk memberhentikan kamera DoEvents: SendMessage mCapHwnd, DISCONNECT, 0, 0 End Sub

TOMBOL STARTCAM

Private Sub cmdstart_Click() ' STARTCAM STARTCAM

Timer2.Enabled = False End Sub

TOMBOL CAPTURE

Private Sub cmdcapture_Click() ' CAPTURE Timer2.Enabled = True

Timer3.Enabled = False End Sub

TOMBOL STOPCAM

Private Sub cmdstop_Click() 'STOPCAM continue = False

Timer2.Enabled = False Timer3.Enabled = False STOPCAM

End Sub

TOMBOL BUKA MATA PADA SETTING MATA Private Sub Command1_Click()

Picture4.Picture = Picture3.Picture hitam9 = 0

lebarFot = fDraw.GetImageWidth(Picture4) tinggiFot = fDraw.GetImageHeight(Picture4) fDraw.GetImageData2D Picture4, ImageData() For X = 0 To lebarFot - 1

QuickX = X * 3

For Y = 0 To tinggiFot - 1

r = ImageData(QuickX + 2, Y) G = ImageData(QuickX + 1, Y) B = ImageData(QuickX, Y) L = (r + G + B) \ 3

If r = 0 And G = 0 And B = 0 Then hitam9 = hitam9 + 1

Label1.Caption = hitam9 End If

Next Y Next X End Sub


(13)

A-3

TOMBOL TUTUP MATA PADA SETTING MATA Private Sub Command2_Click()

Picture5.Picture = Picture3.Picture hitam10 = 0

lebarFot = fDraw.GetImageWidth(Picture5) tinggiFot = fDraw.GetImageHeight(Picture5) fDraw.GetImageData2D Picture5, ImageData() For X = 0 To lebarFot - 1

QuickX = X * 3

For Y = 0 To tinggiFot - 1

r = ImageData(QuickX + 2, Y) G = ImageData(QuickX + 1, Y) B = ImageData(QuickX, Y) L = (r + G + B) \ 3

If r = 0 And G = 0 And B = 0 Then hitam10 = hitam10 + 1

Label2.Caption = hitam10 End If

Next Y Next X End Sub

TOMBOL RUN

Private Sub cmdrun_Click() Timer3.Enabled = True End Sub

Private Sub Form_Load() Call cmdstart_Click

Set m_Mouse = New CMouseEvent 'z = 0

Text1.BackColor = &H8000000F End Sub

TIMER 1

Private Sub Timer1_Timer()

SendMessage mCapHwnd, GET_FRAME, 0, 0 SendMessage mCapHwnd, COPY, 0, 0 Picture1(0).Picture = Clipboard.GetData Image1(0).Picture = Picture1(0).Picture End Sub

TIMER 2

Private Sub Timer2_Timer()


(14)

A-4 For i = 1 To 4 Step 1

Dim ImageData() As Byte

Dim Rb As Long, Gb As Long, Bb As Long Dim lebarFot As Long, tinggiFot As Long Dim QuickX As Long

'Picture diambil nilai RGB nya

lebarFot = fDraw.GetImageWidth(Picture1(0)) tinggiFot = fDraw.GetImageHeight(Picture1(0)) fDraw.GetImageData2D Picture1(0), ImageData() For X = 0 To lebarFot - 1

QuickX = X * 3

For Y = 0 To tinggiFot - 1

r = ImageData(QuickX + 2, Y) G = ImageData(QuickX + 1, Y) B = ImageData(QuickX, Y) L = (r + G + B) \ 3

Next Y Next X

'picture menjadi hitam putih (biner)

fDraw.SetImageData2D Picture1(0), lebarFot, tinggiFot, ImageData(), False Image1(0).Picture = Picture1(0).Picture

Picture1(i).Picture = Picture1(0).Picture Picture1(i).Height = shp1(0).Height Picture1(i).Width = shp1(0).Width Picture1(i).Refresh

Picture1(i).PaintPicture Picture1(0).Image, 0, 0, shp1(0).Width, shp1(0).Height, shp1(0).Left, shp1(0).Top, shp1(0).Width, shp1(0).Height, vbSrcCopy

lebarFot = fDraw.GetImageWidth(Picture1(i)) tinggiFot = fDraw.GetImageHeight(Picture1(i)) fDraw.GetImageData2D Picture1(i), ImageData() For X = 0 To lebarFot - 1

QuickX = X * 3

For Y = 0 To tinggiFot - 1

r = ImageData(QuickX + 2, Y) G = ImageData(QuickX + 1, Y) B = ImageData(QuickX, Y) L = (r + G + B) \ 3

If L >= 75 Then L = 255 Else L = 0 ImageData(QuickX + 2, Y) = L ImageData(QuickX + 1, Y) = L ImageData(QuickX, Y) = L Next Y

Next X


(15)

A-5 'PICTURE 1

hitam1 = 0

lebarFot = fDraw.GetImageWidth(Picture1(1)) tinggiFot = fDraw.GetImageHeight(Picture1(1)) fDraw.GetImageData2D Picture1(1), ImageData() For X = 0 To lebarFot - 1

QuickX = X * 3

For Y = 0 To tinggiFot - 1

r = ImageData(QuickX + 2, Y) G = ImageData(QuickX + 1, Y) B = ImageData(QuickX, Y) L = (r + G + B) \ 3

If r = 0 And G = 0 And B = 0 Then hitam1 = hitam1 + 1

Label15.Caption = hitam1 End If Next Y Next X PICTURE 2 hitam2 = 0

lebarFot = fDraw.GetImageWidth(Picture1(2)) tinggiFot = fDraw.GetImageHeight(Picture1(2)) fDraw.GetImageData2D Picture1(2), ImageData() For X = 0 To lebarFot - 1

QuickX = X * 3

For Y = 0 To tinggiFot - 1

r = ImageData(QuickX + 2, Y) G = ImageData(QuickX + 1, Y) B = ImageData(QuickX, Y) L = (r + G + B) \ 3

If r = 0 And G = 0 And B = 0 Then hitam2 = hitam2 + 1

Label26.Caption = hitam2 End If

Next Y Next X PICTURE 3 hitam3 = 0

lebarFot = fDraw.GetImageWidth(Picture1(3)) tinggiFot = fDraw.GetImageHeight(Picture1(3)) fDraw.GetImageData2D Picture1(3), ImageData() For X = 0 To lebarFot - 1


(16)

A-6 For Y = 0 To tinggiFot - 1

r = ImageData(QuickX + 2, Y) G = ImageData(QuickX + 1, Y) B = ImageData(QuickX, Y) L = (r + G + B) \ 3

If r = 0 And G = 0 And B = 0 Then hitam3 = hitam3 + 1

Label31.Caption = hitam3 End If

Next Y Next X

PICTURE NOMOR 4 hitam4 = 0

lebarFot = fDraw.GetImageWidth(Picture1(4)) tinggiFot = fDraw.GetImageHeight(Picture1(4)) fDraw.GetImageData2D Picture1(4), ImageData() For X = 0 To lebarFot - 1

QuickX = X * 3

For Y = 0 To tinggiFot - 1

r = ImageData(QuickX + 2, Y) G = ImageData(QuickX + 1, Y) B = ImageData(QuickX, Y) L = (r + G + B) \ 3

If r = 0 And G = 0 And B = 0 Then hitam4 = hitam4 + 1

Label36.Caption = hitam4 End If

Next Y Next X End Sub

TIMER 3

Private Sub Timer3_Timer()

'mengaktifkan fungsi klik pada mouse Text1.BackColor = &HC00000

z = 0

If hitam1 < (hitam9 - 10) And hitam1 > (hitam10) Then z = z + 1 Else z = 0 If hitam2 < (hitam9 - 10) And hitam2 > (hitam10) Then z = z + 1 Else z = 0 If hitam3 < (hitam9 - 10) And hitam3 > (hitam10) Then z = z + 1 Else z = 0 If hitam4 < (hitam9 - 10) And hitam4 > (hitam10) Then z = z + 1 Else z = 0 Label3.Caption = z

If z = 4 Then m_Mouse.Click


(17)

A-7 hitam1 = 0

hitam2 = 0 hitam3 = 0 hitam4 = 0 z = 0

Text1.BackColor = &HFF00& Text1.Refresh

End If End Sub

2. Listing Program Class Module CMouseEvent Option Explicit

Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dX As Long, ByVal dY As Long, ByVal dwData As Long, ByVal dwExtraInfo As Long)

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) ' Flags used with mouse_event

Private Const MOUSEEVENTF_ABSOLUTE = &H8000& ' absolute move Private Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down Private Const MOUSEEVENTF_LEFTUP = &H4 ' left button up

Private Const MOUSEEVENTF_MIDDLEDOWN = &H20 ' middle button down Private Const MOUSEEVENTF_MIDDLEUP = &H40 ' middle button up Private Const MOUSEEVENTF_MOVE = &H1 ' mouse move

Private Const MOUSEEVENTF_RIGHTDOWN = &H8 ' right button down Private Const MOUSEEVENTF_RIGHTUP = &H10 ' right button up Private Const MOUSEEVENTF_WHEEL = &H800 ' wheel button rolled

' A few module level variables... Private m_ClickDelay As Long

' *********************************************************** ' Initialize

' *********************************************************** Private Sub Class_Initialize()

' Default duration for mousedown m_ClickDelay = 250 'milliseconds End Sub

' *********************************************************** ' Public Properties

' *********************************************************** Public Property Let ClickDelay(ByVal NewVal As Long)


(18)

A-8 End Property

Public Property Get ClickDelay() As Long ClickDelay = m_ClickDelay

End Property Public Sub Click()

' Click the mouse, with delay to simulate human timing. Call mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) If m_ClickDelay Then

DoEvents ' allow down position to paint Call Sleep(m_ClickDelay)

End If

Call mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) End Sub

3. Listing Program ClassModule FastDrawing Option Explicit

'Stripped down bitmap information Private Type Bitmap

bmType As Long bmWidth As Long bmHeight As Long bmWidthBytes As Long bmPlanes As Integer bmBitsPixel As Integer bmBits As Long End Type

'Call to transfer an object's properties into a custom variable

Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, ByRef lpObject As Any) As Long 'Standard pixel data

Private Type RGBQUAD rgbBlue As Byte rgbGreen As Byte rgbRed As Byte rgbAlpha As Byte End Type

'Full-size bitmap header

Private Type BITMAPINFOHEADER bmSize As Long

bmWidth As Long bmHeight As Long bmPlanes As Integer bmBitCount As Integer


(19)

A-9 bmCompression As Long

bmSizeImage As Long bmXPelsPerMeter As Long bmYPelsPerMeter As Long bmClrUsed As Long bmClrImportant As Long End Type

'Extended header for 8-bit images Private Type BITMAPINFO

bmHeader As BITMAPINFOHEADER bmColors(0 To 255) As RGBQUAD End Type

'Used to ensure quality stretching of color images

Private Declare Function SetStretchBltMode Lib "gdi32" (ByVal hdc As Long, ByVal nStretchMode As Long) As Long

'DIB section interfaces

Private Declare Function GetDIBits Lib "gdi32" (ByVal hdc As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long Private Declare Function StretchDIBits Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal dX As Long, ByVal dY As Long, ByVal SrcX As Long, ByVal SrcY As Long, ByVal SrcWidth As Long, ByVal SrcHeight As Long, lpBits As Any, lpBitsInfo As BITMAPINFO, ByVal wUsage As Long, ByVal dwRop As Long) As Long

'Get the image width (via API - always accurate, unlike PictureBox.ScaleWidth)

Public Function GetImageWidth(SrcPictureBox As PictureBox) As Long Dim bm As Bitmap

GetObject SrcPictureBox.Image, Len(bm), bm GetImageWidth = bm.bmWidth

End Function

'Get the image height (via API - always accurate)

Public Function GetImageHeight(SrcPictureBox As PictureBox) As Long Dim bm As Bitmap

GetObject SrcPictureBox.Image, Len(bm), bm GetImageHeight = bm.bmHeight

End Function

'Get the stream length of an image (via API - always accurate)

Public Function GetImageStreamLength(SrcPictureBox As PictureBox) As Long Dim bm As Bitmap


(20)

A-10 GetObject SrcPictureBox.Image, Len(bm), bm

GetImageStreamLength = (bm.bmWidth * (bm.bmHeight + 1)) * 3 End Function

'Get an image's pixel information into an array dimensioned (x * 3 + bgr, y), with the option to get it in its true orientation

Public Sub GetImageData2D(SrcPictureBox As PictureBox, ImageData() As Byte, Optional ByVal CorrectOrientation As Boolean = False)

Dim bm As Bitmap

'Get the picture box information

GetObject SrcPictureBox.Image, Len(bm), bm 'Build a correctly sized array

Erase ImageData()

'Generate a correctly-dimensioned array (for 2-dimensional access) Dim ArrayWidth As Long

ArrayWidth = (bm.bmWidth * 3) - 1

ArrayWidth = ArrayWidth + (bm.bmWidth Mod 4) '4-bit alignment ReDim ImageData(0 To ArrayWidth, 0 To bm.bmHeight) As Byte ReDim tmpData(0 To ArrayWidth, 0 To bm.bmHeight) As Byte

'Create a temporary header to pass to the GetDIBits call Dim bmi As BITMAPINFO

bmi.bmHeader.bmWidth = bm.bmWidth bmi.bmHeader.bmHeight = bm.bmHeight

bmi.bmHeader.bmSize = 40 'Size, in bytes, of the header

bmi.bmHeader.bmPlanes = 1 'Number of planes (always one for this instance)

bmi.bmHeader.bmBitCount = 24 'Bits per pixel (always 24 for this instance)

bmi.bmHeader.bmCompression = 0 'Compression :standard/none or RLE

'Get the image data into our array If CorrectOrientation = False Then

GetDIBits SrcPictureBox.hdc, SrcPictureBox.Image, 0, bm.bmHeight, ImageData(0, 0), bmi, 0

Else

GetDIBits SrcPictureBox.hdc, SrcPictureBox.Image, 0, bm.bmHeight, tmpData(0, 0), bmi, 0

End If

'This code is to orient the image data correctly in the array (i.e. (0,0) as top-left, (max,max) as bottom right)

' (if this option is enabled, we must set the DIB height to negative in the SetImageData routine below)


(21)

A-11

Dim X As Long, Y As Long, z As Long Dim QuickVal As Long

For X = 0 To bm.bmWidth - 1 QuickVal = X * 3

For Y = 0 To bm.bmHeight - 1 For z = 0 To 2

ImageData(QuickVal + z, Y) = tmpData(QuickVal + z, bm.bmHeight - Y) Next z

Next Y Next X End If

'Save memory...? Erase tmpData End Sub

'Set an image's pixel information from an array dimensioned (x * 3 + bgr, y) Public Sub SetImageData2D(DstPictureBox As PictureBox, OriginalWidth As Long, OriginalHeight As Long, ImageData() As Byte, Optional ByVal CorrectOrientation As Boolean = False)

Dim bm As Bitmap

'Get the picture box information

GetObject DstPictureBox.Image, Len(bm), bm

'Create a temporary header to pass to the StretchDIBits call Dim bmi As BITMAPINFO

bmi.bmHeader.bmWidth = OriginalWidth If CorrectOrientation = False Then

bmi.bmHeader.bmHeight = OriginalHeight Else

bmi.bmHeader.bmHeight = -OriginalHeight End If

bmi.bmHeader.bmSize = 40 'Size, in bytes, of the header

bmi.bmHeader.bmPlanes = 1 'Number of planes (always one for this instance)

bmi.bmHeader.bmBitCount = 24 'Bits per pixel (always 24 for this instance)

bmi.bmHeader.bmCompression = 0 'Compression :standard/none or RLE 'Assume color images and set the corresponding best stretch mode

SetStretchBltMode DstPictureBox.hdc, 3&

'Send the array to the picture box and draw it accordingly

StretchDIBits DstPictureBox.hdc, 0, 0, bm.bmWidth, bm.bmHeight, 0, 0, OriginalWidth, OriginalHeight, ImageData(0, 0), bmi, 0, vbSrcCopy


(22)

A-12

'Since this doesn't automatically initialize AutoRedraw, we have to do it manually

If DstPictureBox.AutoRedraw = True Then DstPictureBox.Picture = DstPictureBox.Image DstPictureBox.Refresh

End If

'Always good to manually halt for external processes after heavy API usage

DoEvents End Sub

'Get an image's pixel information into an array dimensioned (r/g/b, x, y) Public Sub GetImageData(SrcPictureBox As PictureBox, ImageData() As Byte) Dim bm As Bitmap

'Get the picture box information

GetObject SrcPictureBox.Image, Len(bm), bm 'Build a correctly sized array

Erase ImageData()

ReDim ImageData(0 To 2, 0 To bm.bmWidth - 1, 0 To bm.bmHeight - 1) 'Create a temporary header to pass to the GetDIBits call

Dim bmi As BITMAPINFO

bmi.bmHeader.bmWidth = bm.bmWidth bmi.bmHeader.bmHeight = bm.bmHeight

bmi.bmHeader.bmSize = 40 'Size, in bytes, of the header

bmi.bmHeader.bmPlanes = 1 'Number of planes (always one for this instance)

bmi.bmHeader.bmBitCount = 24 'Bits per pixel (always 24 for this instance) bmi.bmHeader.bmCompression = 0 'Compression :standard/none or RLE

'Get the image data into our array

GetDIBits SrcPictureBox.hdc, SrcPictureBox.Image, 0, bm.bmHeight, ImageData(0, 0, 0), bmi, 0

End Sub

'Set an image's pixel information from an array dimensioned (r/g/b, x, y) Public Sub SetImageData(DstPictureBox As PictureBox, OriginalWidth As Long, OriginalHeight As Long, ImageData() As Byte)

Dim bm As Bitmap

'Get the picture box information

GetObject DstPictureBox.Image, Len(bm), bm

'Create a temporary header to pass to the StretchDIBits call Dim bmi As BITMAPINFO

bmi.bmHeader.bmWidth = OriginalWidth bmi.bmHeader.bmHeight = OriginalHeight


(23)

A-13

bmi.bmHeader.bmPlanes = 1 'Number of planes (always one for this instance)

bmi.bmHeader.bmBitCount = 24 'Bits per pixel (always 24 for this instance)

bmi.bmHeader.bmCompression = 0 'Compression :standard/none or RLE

'Assume color images and set the corresponding best stretch mode SetStretchBltMode DstPictureBox.hdc, 3&

'Send the array to the picture box and draw it accordingly

StretchDIBits DstPictureBox.hdc, 0, 0, bm.bmWidth, bm.bmHeight, 0, 0, OriginalWidth, OriginalHeight, ImageData(0, 0, 0), bmi, 0, vbSrcCopy

'Since this doesn't automatically initialize AutoRedraw, we have to do it manually

If DstPictureBox.AutoRedraw = True Then DstPictureBox.Picture = DstPictureBox.Image DstPictureBox.Refresh

End If

'Always good to manually halt for external processes after heavy API usage

DoEvents End Sub

'Get an image's pixel data into a one-dimesional array (stream)

Public Sub GetImageDataStream(SrcPictureBox As PictureBox, ImageData() As Byte)

Dim bm As Bitmap

'Get the picture box information

GetObject SrcPictureBox.Image, Len(bm), bm

'Build a correctly sized array - in this case, designed as a stream Erase ImageData()

ReDim ImageData(0 To GetImageStreamLength(SrcPictureBox)) 'Create a temporary header to pass to the GetDIBits call Dim bmi As BITMAPINFO

bmi.bmHeader.bmWidth = bm.bmWidth bmi.bmHeader.bmHeight = bm.bmHeight

bmi.bmHeader.bmSize = 40 'Size, in bytes, of the header

bmi.bmHeader.bmPlanes = 1 'Number of planes (always one for this instance)

bmi.bmHeader.bmBitCount = 24 'Bits per pixel (always 24 for this instance)

bmi.bmHeader.bmCompression = 0 'Compression :standard/none or RLE

'Get the image data into our array

GetDIBits SrcPictureBox.hdc, SrcPictureBox.Image, 0, bm.bmHeight, ImageData(0), bmi, 0


(24)

A-14

'Set an image's data from a one-dimensional array (stream)

Public Sub SetImageDataStream(DstPictureBox As PictureBox, OriginalWidth As Long, OriginalHeight As Long, ImageData() As Byte)

Dim bm As Bitmap

'Get the picture box information

GetObject DstPictureBox.Image, Len(bm), bm

'Create a temporary header to pass to the StretchDIBits call Dim bmi As BITMAPINFO

bmi.bmHeader.bmWidth = OriginalWidth bmi.bmHeader.bmHeight = OriginalHeight

bmi.bmHeader.bmSize = 40 'Size, in bytes, of the header

bmi.bmHeader.bmPlanes = 1 'Number of planes (always one for this instance)

bmi.bmHeader.bmBitCount = 24 'Bits per pixel (always 24 for this instance)

bmi.bmHeader.bmCompression = 0 'Compression :standard/none or RLE

'Send the array to the picture box and draw it accordingly

StretchDIBits DstPictureBox.hdc, 0, 0, bm.bmWidth, bm.bmHeight, 0, 0, OriginalWidth, OriginalHeight, ImageData(0), bmi, 0, vbSrcCopy

'Since this doesn't automatically initialize AutoRedraw, we have to do it manually

If DstPictureBox.AutoRedraw = True Then DstPictureBox.Picture = DstPictureBox.Image DstPictureBox.Refresh

End If

'Always good to manually halt for external processes after heavy API usage

DoEvents End Sub


(25)

1

Universitas Kristen Maranatha

BAB I

PENDAHULUAN

1.1 Latar Belakang Masalah

Dunia teknologi dan komputer sudah berkembang sangat pesat. Aplikasi komputer kini juga tidak hanya diterapkan dalam dunia industri tetapi juga dalam dunia hiburan, sosial, bisnis, politik dan keamanan. Salah satunya yang paling sering digunakan adalah Personal Computer (PC), terutama oleh masyarakat awam.

Pada Personal Computer, penghubung antara pengguna dengan mesin adalah bagian yang sangat penting. Mouse merupakan salah satunya yang berperan untuk menggerakkan kursor yang sangat dibutuhkan untuk memberikan perintah pada PC. Kebutuhan-kebutuhan akan penggerak kursor ini pun semakin beragam, antara lain untuk menggerakkan kursor dari jarak jauh misalnya untuk bermain game, menggunakan aplikasi-aplikasi dari PC (word, powerpoint, excel, dll). Untuk pemakai yang menyandang cacat ALS (Lou Gehrig’s disease) atau

multiple sclerosis dimana pemakai tidak dapat menggerakkan atau mengendalikan

anggota tubuhnya kecuali mata. Dengan demikian dibutuhkan aplikasi yang dapat membantu pemakai tersebut untuk mengendalikan kursor.

Kemajuan di bidang teknologi optikal khusunya webcam (kamera web) dapat dimanfaatkan sebagai sarana untuk fungsi klik pada mouse. Hal ini dikarenakan webcam (kamera web) dapat digunakan sebagai indera penglihatan untuk komputer karena bisa menangkap objek di depan kamera sebagai citra. Citra tersebut dapat diolah di dalam komputer dengan memanfaatkan teknologi pengolahan citra serta pemrograman aplikasi, sehingga dapat digunakan untuk melakukan fungsi klik pada mouse.

Dengan latar belakang tersebut, maka dalam Tugas Akhir ini dibuat sebuah aplikasi pendeteksi kedipan mata untuk fungsi klik pada mouse melalui kamera web.


(26)

Bab I Pendahuluan 2

Universitas Kristen Maranatha

1.2 Perumusan Masalah

Permasalahan yang akan dibahas dalam Tugas Akhir ini meliput:

Bagaimana algoritma untuk mendeteksi kedipan mata yang digunakan untuk menggantikan fungsi klik pada mouse.

1.3 Tujuan

Membuat aplikasi untuk melakukan fungsi klik pada mouse dengan kedipan mata melalui kamera web.

1.4 Pembatasan Masalah

1. Aplikasi program ini hanya dapat digunakan untuk melakukan fungsi klik kiri pada tombol mouse.

2. Hanya dapat digunakan pada keadaan cahaya yang masuk ke kamera web cukup (tidak terlalu terang dan tidak terlalu gelap).

3. Jarak mata dengan kamera web dibatasi antara 25 cm sampai 35 cm. 4. Program ini direalisasikan dalam Visual Basic 6.0.

5. Masih memakai kotak panduan untuk mengetahui letak posisi mata. 6. Proses klik kiri mouse terjadi ketika sedang tutup mata.

1.5 Metodologi

Metodologi yang digunakan pada Tugas Akhir ini adalah menggunakan metodologi experimental.


(27)

Bab I Pendahuluan 3

Universitas Kristen Maranatha

1.6 Sistematika Penulisan

Penyusunan laporan Tugas Akhir terdiri dari lima bab sebagai berikut:

 BAB I. PENDAHULUAN

Pada bab ini dibahas mengenai latar belakang, perumusan masalah, tujuan, pembatasan masalah, metodologi, dan sistematika penulisan.

 BAB II. LANDASAN TEORI

Pada bab ini berisi teori dasar dari pengertian citra, dasar warna, pengolahan citra digital, mouse, kamera web, application program

interface, dynamic link library, Class Module FastDrawing, Class

Module CmouseEvent, serta Visual Basic 6.0 untuk representasi citra digital.

 BAB III. PERANCANGAN dan REALISASI

Pada bab ini berisi perancangan, penjelasan, serta diagram alir dari program yang telah dibuat.

 BAB IV. DATA PENGAMATAN dan ANALISA

Pada bab ini berisi pengujian program, data pengamatan serta analisis dari program yang telah dibuat.

 BAB V. KESIMPULAN dan SARAN

Pada bab ini berisi kesimpulan dari Tugas Akhir dan saran-saran yang perlu dilakukan untuk perbaikan di masa mendatang.


(28)

46

Universitas Kristen Maranatha

BAB V

KESIMPULAN DAN SARAN

Bab ini merupakan bab penutup yang berisi kesimpulan analisa dari Tugas Akhir yang berjudul “Perancangan Pendeteksi Kedipan Mata Untuk Fungsi Klik Pada Mouse Melalui Kamera Web”.

5.1 KESIMPULAN

1. Pada Tugas Akhir ini, program aplikasi dapat direalisasikan dan berfungsi dengan baik dengan persentase keberhasilan rata-rata 80%. 2. Persentase keberhasilan melakukan fungsi klik dengan kedipan mata

lebih tinggi untuk pemakai program aplikasi ini yang mempunyai mata besar dibandingkan dengan yang berkacamata dan bermata sedang, berkacamata dan bermata sipit, bermata sedang, atau bermata sipit.

3. Jarak optimal dari mata ke kamera web adalah 35cm

5.2 SARAN.

1. Aplikasi ini dapat dikembangkan sehingga tidak memerlukan kotak panduan untuk mengetahui letak posisi mata.

2. Aplikasi ini dapat dikembangkan sehingga tidak memerlukan setting mata supaya pemakaian aplikasi lebih praktis.


(29)

47 Universitas Kristen Maranatha

DAFTAR PUSTAKA

1.

Hestiningsih,

Idhawati.

2009,

Pengolahan

Citra,

http://images.moedy9.multiply.multiplycontent.com/attachmen

t/0/SMuuNwoKCBkAAHPHjZk1/Pengolahan%20Citra.pdf?n

mid=115281461

2.

Munir, Rinaldi. 2004. Pengolahan Citra Digital dengan

Pendekatan Algoritmik. Bandung : Informatika.

3.

Pearson, Don. 1991. Image Processing. Singapore :

McGraw-Hill Book.

4.

http://en.wikipedia.org/wiki/Application_programming_interfa

ce

5.

http://en.wikipedia.org/wiki/Dynamic-link_library

6.

http://en.wikipedia.org/wiki/Webcam

7.

http://msdn.microsoft.com/en-us/library/default.aspx

8.

http://www.mvps.org/vb

9.

M.Chau, M. Betke. 2005. Real Time Eye Tracking and Blink

Detection with USB Cameras. Boston University : Computer


(1)

A-14

'Set an image's data from a one-dimensional array (stream)

Public Sub SetImageDataStream(DstPictureBox As PictureBox, OriginalWidth As Long, OriginalHeight As Long, ImageData() As Byte)

Dim bm As Bitmap

'Get the picture box information

GetObject DstPictureBox.Image, Len(bm), bm

'Create a temporary header to pass to the StretchDIBits call Dim bmi As BITMAPINFO

bmi.bmHeader.bmWidth = OriginalWidth bmi.bmHeader.bmHeight = OriginalHeight

bmi.bmHeader.bmSize = 40 'Size, in bytes, of the header

bmi.bmHeader.bmPlanes = 1 'Number of planes (always one for this

instance)

bmi.bmHeader.bmBitCount = 24 'Bits per pixel (always 24 for this

instance)

bmi.bmHeader.bmCompression = 0 'Compression :standard/none or

RLE

'Send the array to the picture box and draw it accordingly

StretchDIBits DstPictureBox.hdc, 0, 0, bm.bmWidth, bm.bmHeight, 0, 0, OriginalWidth, OriginalHeight, ImageData(0), bmi, 0, vbSrcCopy

'Since this doesn't automatically initialize AutoRedraw, we have to do it

manually

If DstPictureBox.AutoRedraw = True Then DstPictureBox.Picture = DstPictureBox.Image DstPictureBox.Refresh

End If

'Always good to manually halt for external processes after heavy API usage

DoEvents End Sub


(2)

1

Universitas Kristen Maranatha

BAB I

PENDAHULUAN

1.1 Latar Belakang Masalah

Dunia teknologi dan komputer sudah berkembang sangat pesat. Aplikasi komputer kini juga tidak hanya diterapkan dalam dunia industri tetapi juga dalam dunia hiburan, sosial, bisnis, politik dan keamanan. Salah satunya yang paling sering digunakan adalah Personal Computer (PC), terutama oleh masyarakat awam.

Pada Personal Computer, penghubung antara pengguna dengan mesin adalah bagian yang sangat penting. Mouse merupakan salah satunya yang berperan untuk menggerakkan kursor yang sangat dibutuhkan untuk memberikan perintah pada PC. Kebutuhan-kebutuhan akan penggerak kursor ini pun semakin beragam, antara lain untuk menggerakkan kursor dari jarak jauh misalnya untuk bermain game, menggunakan aplikasi-aplikasi dari PC (word, powerpoint, excel, dll). Untuk pemakai yang menyandang cacat ALS (Lou Gehrig’s disease) atau multiple sclerosis dimana pemakai tidak dapat menggerakkan atau mengendalikan anggota tubuhnya kecuali mata. Dengan demikian dibutuhkan aplikasi yang dapat membantu pemakai tersebut untuk mengendalikan kursor.

Kemajuan di bidang teknologi optikal khusunya webcam (kamera web) dapat dimanfaatkan sebagai sarana untuk fungsi klik pada mouse. Hal ini dikarenakan webcam (kamera web) dapat digunakan sebagai indera penglihatan untuk komputer karena bisa menangkap objek di depan kamera sebagai citra. Citra tersebut dapat diolah di dalam komputer dengan memanfaatkan teknologi pengolahan citra serta pemrograman aplikasi, sehingga dapat digunakan untuk melakukan fungsi klik pada mouse.

Dengan latar belakang tersebut, maka dalam Tugas Akhir ini dibuat sebuah aplikasi pendeteksi kedipan mata untuk fungsi klik pada mouse melalui kamera web.


(3)

Bab I Pendahuluan 2

Universitas Kristen Maranatha

1.2 Perumusan Masalah

Permasalahan yang akan dibahas dalam Tugas Akhir ini meliput:

Bagaimana algoritma untuk mendeteksi kedipan mata yang digunakan untuk menggantikan fungsi klik pada mouse.

1.3 Tujuan

Membuat aplikasi untuk melakukan fungsi klik pada mouse dengan kedipan mata melalui kamera web.

1.4 Pembatasan Masalah

1. Aplikasi program ini hanya dapat digunakan untuk melakukan fungsi klik kiri pada tombol mouse.

2. Hanya dapat digunakan pada keadaan cahaya yang masuk ke kamera web cukup (tidak terlalu terang dan tidak terlalu gelap).

3. Jarak mata dengan kamera web dibatasi antara 25 cm sampai 35 cm. 4. Program ini direalisasikan dalam Visual Basic 6.0.

5. Masih memakai kotak panduan untuk mengetahui letak posisi mata. 6. Proses klik kiri mouse terjadi ketika sedang tutup mata.

1.5 Metodologi

Metodologi yang digunakan pada Tugas Akhir ini adalah menggunakan metodologi experimental.


(4)

Bab I Pendahuluan 3

Universitas Kristen Maranatha

1.6 Sistematika Penulisan

Penyusunan laporan Tugas Akhir terdiri dari lima bab sebagai berikut:  BAB I. PENDAHULUAN

Pada bab ini dibahas mengenai latar belakang, perumusan masalah, tujuan, pembatasan masalah, metodologi, dan sistematika penulisan.  BAB II. LANDASAN TEORI

Pada bab ini berisi teori dasar dari pengertian citra, dasar warna, pengolahan citra digital, mouse, kamera web, application program interface, dynamic link library, Class Module FastDrawing, Class Module CmouseEvent, serta Visual Basic 6.0 untuk representasi citra digital.

 BAB III. PERANCANGAN dan REALISASI

Pada bab ini berisi perancangan, penjelasan, serta diagram alir dari program yang telah dibuat.

 BAB IV. DATA PENGAMATAN dan ANALISA

Pada bab ini berisi pengujian program, data pengamatan serta analisis dari program yang telah dibuat.

 BAB V. KESIMPULAN dan SARAN

Pada bab ini berisi kesimpulan dari Tugas Akhir dan saran-saran yang perlu dilakukan untuk perbaikan di masa mendatang.


(5)

46

Universitas Kristen Maranatha

BAB V

KESIMPULAN DAN SARAN

Bab ini merupakan bab penutup yang berisi kesimpulan analisa dari Tugas Akhir yang berjudul “Perancangan Pendeteksi Kedipan Mata Untuk Fungsi Klik Pada Mouse Melalui Kamera Web”.

5.1 KESIMPULAN

1. Pada Tugas Akhir ini, program aplikasi dapat direalisasikan dan berfungsi dengan baik dengan persentase keberhasilan rata-rata 80%. 2. Persentase keberhasilan melakukan fungsi klik dengan kedipan mata

lebih tinggi untuk pemakai program aplikasi ini yang mempunyai mata besar dibandingkan dengan yang berkacamata dan bermata sedang, berkacamata dan bermata sipit, bermata sedang, atau bermata sipit.

3. Jarak optimal dari mata ke kamera web adalah 35cm

5.2 SARAN.

1. Aplikasi ini dapat dikembangkan sehingga tidak memerlukan kotak panduan untuk mengetahui letak posisi mata.

2. Aplikasi ini dapat dikembangkan sehingga tidak memerlukan setting mata supaya pemakaian aplikasi lebih praktis.


(6)

47 Universitas Kristen Maranatha

DAFTAR PUSTAKA

1.

Hestiningsih,

Idhawati.

2009,

Pengolahan

Citra,

http://images.moedy9.multiply.multiplycontent.com/attachmen

t/0/SMuuNwoKCBkAAHPHjZk1/Pengolahan%20Citra.pdf?n

mid=115281461

2.

Munir, Rinaldi. 2004. Pengolahan Citra Digital dengan

Pendekatan Algoritmik. Bandung : Informatika.

3.

Pearson, Don. 1991. Image Processing. Singapore :

McGraw-Hill Book.

4.

http://en.wikipedia.org/wiki/Application_programming_interfa

ce

5.

http://en.wikipedia.org/wiki/Dynamic-link_library

6.

http://en.wikipedia.org/wiki/Webcam

7.

http://msdn.microsoft.com/en-us/library/default.aspx

8.

http://www.mvps.org/vb

9.

M.Chau, M. Betke. 2005. Real Time Eye Tracking and Blink

Detection with USB Cameras. Boston University : Computer

Science Departement.