• Tidak ada hasil yang ditemukan

Dari desain sistem yang telah dibuat sebelumnya, maka dapat di implementasikan seperti beberapa contoh tampilan berikut :

4.1.1 Tampilan splash screen

Gambar di bawah ini merupakan tampilan awal pada saat aplikasi di panggil :

Gambar 4.1 Tampilan splash screen

Pada tampilan splash screen ini, terdapat 2 masukkan yaitu username dan password, di sini terdapat 2 macam login yaitu admin dan standard user. Tombol login untuk masuk ke aplikasi dan tombol Keluar untuk menutup aplikasi.

4.1.2 Halaman utama admin

Halaman ini berfungsi untuk mengakses semua sub-menu dalam program ini, dimana semua menu dapat diakses oleh admin saja.

Gambar 4.2 Halaman utama admin 4.1.3 Halaman utama user standard

Halaman ini berfungsi untuk mengakses semua sub-menu dalam program ini, dimana semua menu terbatas bagi standard user.

4.1.4 Sub-Menu File

Pada pilihan menu File terdapat sub-menu seperti pada gambar berikut :

Gambar 4.4 Submenu File Terdapat 2 pilihan yaitu :

a) Logout : Digunakan untuk logout akun yang aktif. b) Exit : Digunakan untuk menutup program.

4.1.5 Sub-Menu Master Data

Pada pilihan menu Master Data adalah sub-menu seperti pada gambar berikut ini :

Terdapat 6 pilihan yaitu :

a) Bagian : Melihat daftar bagian karyawan yang ada di kantor. b) Jabatan : Melihat daftar jabatan karyawan yang ada di kantor.

c) Karyawan : Melihat, merubah, menambah, menghapus karyawan yang aktif saat ini. (NB: Menghapus digunakan untuk menghapus karyawan dikarenakan menghindari uniqueness data).

d) Petugas Presensi : Merubah username dan password dari petugas. e) Ganti Password : Merubah Password untuk admin.

f) Akurasi Kamera : Menentukan keakuratan kamera. (Penentuan akurasi nilai eigenface semakin akurat maka semakin lama prosesnya).

4.1.6 Sub-Menu Pr esensi

Pada pilihan menu Presensi adalah sub-menu seperti pada gambar berikut ini :

Gambar 4.6 Submenu Presensi Terdapat 1 pilihan saja :

Absensi : Merupakan operasi absensi, dimana proses absensi dilakukan dengan membandingkan wajah user dengan wajah pada database.

4.1.7 Sub-Menu Laporan

Pada pilihan menu Laporan adalah sub-menu seperti pada gambar berikut ini :

Gambar 4.7 Submenu Laporan Terdapat 1 pilihan saja :

Laporan absensi : Laporan absensi, laporan potongan gaji karyawan dimana seluruh sejarah karyawan dicatat di laporan ini.

4.1.8 Menu Help

Pada pilihan menu Help adalah manual usage dari program gambar berikut ini :

4.1.9 Menu About

Pada pilihan menu About adalah informasi mengenai program, berikut gambarnya :

Gambar 4.9 Menu About 4.1.10 Sub-Menu Bagian Peker jaan

Pada pilihan submenu bagian adalah informasi mengenai bagian apa saja yang ada di kantor, berikut gambarnya :

4.1.11 Sub-Menu J abatan

Pada pilihan submenu bagian adalah informasi mengenai jabatan apa saja yang ada di kantor, berikut gambarnya :

Gambar 4.11 Sub Menu Jabatan 4.1.12 Sub-Menu Kar yawan

Pada pilihan submenu karyawan adalah informasi mengenai karyawan yang bekerja di kantor tersebut dan bisa mengganti foto karyawan tersebut, berikut gambarnya :

4.1.13 Sub-Menu Petugas Pr esensi

Pada pilihan submenu petugas presensi adalah informasi mengenai petugas presensi dimana username petugas dan password petugas dapat dirubah, berikut gambarnya :

Gambar 4.13 Sub Menu Petugas Presensi 4.1.14 Sub-Menu Ganti Passwor d

Pada pilihan submenu ganti password adalah merubah password dari admin, berikut gambarnya :

4.1.15 Sub-Menu Akurasi Kamer a

Pada pilihan submenu akurasi kamera adalah merubah akurasi dari kamera, kemiripan minimumnya adalah antar 50% sampai dengan 99%, jika 100% maka tidak akan bisa valid, berikut gambarnya :

Ga mbar 4.15 Sub Menu Akurasi Kamera 4.1.16 Sub-Menu Absensi

Pada pilihan submenu absensi adalah tempat melakukan operasi absensi dengan pembandingan foto di database dan foto pada hasil tangkapan kamera, berikut gambarnya :

4.1.17 Sub-Menu Laporan Absensi

Pada pilihan submenu laporan adalah tempat melihat laporan dari setiap karyawan, berikut gambarnya :

Gambar 4.17 Sub Menu Laporan Absensi

4.2 Car a Ker ja Sistem Infor masi

Sistem ini bekerja seperti halnya dengan proses absensi pada umumnya dimana masih membutuhkan petugas operator untuk memantau apakah benar wajah dari orang yang melakukan absensi sesuai dengan prosedur. Pertama-tama karyawan datang ke kantor, ketika ke kantor petugas absensi memanggil karyawan lalu petugas absensi login ke sistem lalu petugas operator melakukan operasi absensi dengan karyawan yang sudah siap untuk diambil gambarnya, jika nama dan foto sesuai maka absensi berhasil. Berikut merupakan diagram alur sistem absensi pengenalan wajah :

4.3 Kebutuhan Per angkat Keras

Sistem presensi karyawan dirancang menggunakan media input berupa webcam, tetapi jika dilihat dari segi harga harga webcam terlihat lmurah daripada alat biometrik dan merupakan media capture murah saat ini dengan fungsionalitas yang mumpuni. Hardware webcam yang digunakan untuk aplikasi ini, saya menggunakan webcam laptop HP CQ 41-110 AU berbekal 0,3 Megapixel (QVGA), karena driver kamera ini mudah dicari dan bisa diimplementasikan dengan mudah meskipun resolusi kamera ini sangat kecil. Dengan plugin ezvid60 untuk VB 6.0, Web camera bisa diatur resolusi kameranya, untuk kasus ini sistem menggunakan resolusi 160 x 120 piksel karena lebih cepat untuk merubah menjadi ukuran 80 x 80 piksel (Normalisasi citra agar mempercepat proses pengenalan wajah). Driver webcam harus sudah terinstall supaya kamera dapat terdeteksi. Dan printer yang telah terinstall agar print dapat dengan mudah dilakukan karena laporannya langsung cetak dengan format yang sudah ada.

4.3 Kebutuhan Per angkat Lunak

Perangkat lunak yang digunakan untuk absensi ini adalah program ini sendiri dengan OS Windows XP Professional Service Pack 2 (5.1). Alasan mengapa memakai OS ini adalah masih banyaknya instansi maupun kantor swasta yang memakai ini. Untuk bahasa pemrogramannya yang digunakan Microsoft Visual Basic 6.0. Seiring dengan penggunaan bahasa pemrograman ini tentunya database yang dipakai adalah Microsoft

Access, dikarenakan data pada karyawan tidaklah banyak yaitu sekitar 25 orang.

4.4 Input Data Kar yawan

Sebelum melakukan absensi, karyawan yang akan diabsen harus sudah ada fotonya dengan cara login sebagai admin lalu masuk ke Master Data lalu klik sub-menu karyawan maka akan tampil banyak sub-jendela, tetapi saya hanya menampilkan khusus yang input data karyawan terlebih dahulu :

Gambar 4.18 Input Data Karyawan

Klik tambah terlebih dahulu lalu isi data karyawan yang aktif, setelah itu isi form lalu klik tombol Ubah/Simpan untuk menyimpan data tersebut. Jika ingin menghapus klik tombol hapus (data dan foto karyawan harus sudah ada sebelumnya).

Gambar berikut merupakan data grid dari database karyawan yang berisikan nomer induk dan nama saja :

Gambar 4.19 Data Grid Karyawan

Gambar berikut merupakan hasil citra tangkapan yang didapat dari kamera dan kamera bisa diatur sesuai dengan resolusi yang didukung.

Ga mbar 4.20 Jendela hasil tangkapan kamera

Gambar berikut merupakan hasil tangkapan kamera yang sudah di ambil citranya yaitu dengan menekan tombol ambil gambar, maka gambar akan tampil pada picture box dan fitur buka file untuk mengambil data gambar berupa foto seseorang tersebut.

Gambar 4.21 Jendela tempat menyimpan foto sementara

4.5 Car a Ker ja Algor itma Eigenface

Data karyawan yang dimasukkan akan disimpan dalam tabel karyawan, dan terdapat 2 metode untuk mendapat citra dari seseorang yaitu dengan foto langsung atau file foto karyawan. Foto karyawan akan disimpan dalam folder Images dengan format *.jpg, dengan ukuran 80x80 piksel. Berikut algoritmanya yang akan diterapkan pada program ini : a) Citra wajah di-capture dengan menggunakan webcam, dihasilkan citra

wajah dengan format warna RGB, dengan resolusi yang sesuai dengan aturan kamera. Semua gambar harus dinormalisasi menjadi 80x80 piksel agar seragam. Jika resolusi kamera adalah 160x120 piksel maka akan di-crop menjadi 80x80 piksel.

‘Cropping Image pict.Picture = LoadPicture(filename) X = pict.ScaleWidth Y = pict.ScaleHeight For i = 20 To 99 For j = 40 To 119 pixel = pict.Point(j, i) red = pixel& Mod 256

green = ((pixel And &HFF00) / 256&) Mod 256& blue = (pixel And &HFF0000) / 65536

ImagePixels(0, i, j) = red ImagePixels(1, i, j) = green ImagePixels(2, i, j) = blue Next Next pict.height = 1253 pict.width = 1253 pict.ScaleWidth = 80 pict.ScaleHeight = 80 pict.Picture = Nothing For i = 20 To 99 For j = 40 To 119

pict.PSet (j - 40, i - 20), RGB(ImagePixels(0, i, j), ImagePixels(1, i, j), ImagePixels(2, i, j))

Next

pict.Refresh Next

End Sub

Gambar 4.22 Kode Sumber Cropping Image

Setelah dihasilkan gambar dengan ukuran 80x80 piksel maka gambar RGB tadi diubah ke dalam format grayscale (8bit), dengan tujuan agar mempunyai matriks yang berkorespondensi dengan 1 image saja. Adapun kode sumber untuk merubah RGB menjadi grayscale :

'Merub

ah RGB menjadi Grayscale

Public Sub GrayScale(pict As PictureBox) On Error Resume Next

X = pict.ScaleWidth Y = pict.ScaleHeight For i = 0 To Y - 1 For j = 0 To X - 1

pixel = pict.Point(j, i) red = pixel& Mod 256

green = ((pixel And &HFF00) / 256&) Mod 256& blue = (pixel And &HFF0000) / 65536 red = (red * 5) \ 10

green = (green * 8) \ 10 blue = (blue * 3) \ 10

gray = ((red + green + blue) * 10) \ 16

pict.PSet (j, i), RGB(gray, gray, gray) Next

pict.Refresh Next

End Sub

Dari kode sumber diatas belum membuat file menjadi format *.jpg karena masih berformat *.bmp. Berikut kode sumber untuk sumber kode di atas :

'Save image ke Folder

Public Sub SavePhoto(pict As PictureBox, index As Integer) On Error Resume Next

SavePicture pict.image, App.Path & PictName & index & ".bmp" ConvertBMPtoJPG App.Path & PictName & index & ".bmp", 80, False MsgBox "File telah tersimpan", , App.Title

End Sub

Gambar 4.24 Fungsi menyimpan image ke folder image Untuk fungsi merubah format *.bmp ke *.jpg ditangani oleh file JPGUtils.dll yang berfungsi untuk merubah *.bmp menjadi *.jpg. Hal yang sama juga berlaku ketika memasukkan citra wajah melalui file lokal.

b) Proses presensi ditangani oleh submenu absensi. Karyawan menggunakan webcam untuk meng-capture citra wajah seperti pada saat pengisian foto untuk data karyawan. Hasil capture kemudian dicocokkan dengan foto karyawan pada folder Image dan dilakukan proses identifikasi dengan langkah sebagai berikut :

1) Capture citra wajah karyawan :

'stage 1 - capture camera Capture ezVC

Crop Picture6, App.Path & CaptName Kill App.Path & CaptName

GrayScale Picture6

Gambar 4.25 Capture image dengan webcam

2) Pada langkah kedua yaitu proses pencocokkan pada citra wajah sekarang dengan yang ada di database. Proses matching dilakukan oleh prosedur fungsi pict(picture5,picture6)match , dengan kode sumber di bawah ini :

'Proses pencocokan foto

Public Function MatchPict(pict1 As PictureBox, pict2 As PictureBox) As Integer

Dim closestImage As Integer pict2.Picture = Nothing

closestImage = Val(faces.Identify(pict1))

If ((closestImage <> 0) And (Dir$(App.Path & PictName & closestImage & ".jpg") <> "")) Then

pict2.Picture = LoadPicture(App.Path & PictName & closestImage & ".jpg")

Else

MsgBox "Tidak ditemukan kemiripan", vbExclamation, App.Title

End If

MatchPict = closestImage End Function

Gambar 4.26 Proses pencocokan citra

Hasil capture pada saat presensi disimpan pada variabel pict1, kemudian proses pencocokkan dilakukan dengan memanggil baris perintah:

close

stImage = Val(faces.Identify(pict1))

Dimana faces adalah objek yang merupakan bagian dari classFace Recogniser dan Identify adalah salah satu propertinya. Untuk menjelaskan bagaimana proses identifikasi dilakukan, perhatikan apa yang dilakukan oleh classFace Recogniser berikut ini.

classFace Recogniser adalah kelas yang digunakan untuk melakukan deteksi wajah berdasarkan pada algoritma eigenface. Adapun cara kerjanya adalah sebagai berikut:

Pertama kali kelas akan menghitung rataan eigenvector. Sebelumnya semua citra wajah yang ada di dalam folder Image diambil dan dibuat eigenvectornya dengan subprogram

faceTemplate(). Kemudian dilakukan perhitungan rataan

eigenvector-nya, simpan dalam faceTemplate(), dengan kode sumber sebagai berikut :

Private Sub updateFaceTemplate()

'calculates an average face template Dim i As Integer Dim x As Integer Dim y As Integer For i = 0 To NoOfFaces - 1 For x = 0 To imageWidth - 1 For y = 0 To imageHeight - 1 If (i > 0) Then faceTemplate(x, y) = faceTemplate(x, y) + Face(i).getPoint(x, y) Else faceTemplate(x, y) = Face(i).getPoint(x, y) End If Next Next Next For x = 0 To imageWidth - 1 For y = 0 To imageHeight - 1

faceTemplate(x, y) = Int(faceTemplate(x, y) / NoOfFaces) Next

Next End Sub

Gambar 4.27 Proses cetakan citra hasil olah

Rataan eigenvector yang tersimpan pada faceTemplate() yang digunakan untuk menghitung nilai eigen (eigenfaces value), untuk semua image yang ada dalam folder image. Perhitungan dilakukan dengan :

Private Sub updateEigenFaces() 'updates all the eigenfaces Dim i As Integer Dim x As Integer Dim y As Integer Dim df As Integer For i = 0 To NoOfFaces - 1 For x = 0 To imageWidth - 1 For y = 0 To imageHeight - 1 df = Face(i).getPoint(x, y) - faceTemplate(x, y) If (df < 0) Then df = 0 End If

Call EigenFace(i).setPoint(x, y, CByte(df)) Next

Next Next End Sub

Gambar 4.28 Proses ekstraksi nilai eigenface

Nilai eigenface untuk semua wajah disimpan dalam face(i). Tinggal sekarang lakukan identifikasi jika ada citra wajah yang masuk pada saat presensi. Proses identifikasi dilakukan sebagai berikut:

Citra wajah yang di-capture saat presensi disimpan dalam testface. Citra wajah ini kemudian dikalkulasi nilai eigenface-nya berdasarkan faceTemplate yang tadi telah dihitung. Jika eigenface dari testface sudah dikalkulasi maka tinggal menghitung “jarak” dengan nilai-nilai yang disimpan dalam face(i). Jika ditemukan bahwa I yang berkorespondensi maka I menunjukkan urutan citra wajah hasil identifikasi. Berikut kode sumbernya :

'calculate the eigenface (Hitung Nilai Eigenfacenya) For x = 0 To imageWidth - 1 For y = 0 To imageHeight - 1 df = testFace.getPoint(x, y) - faceTemplate(x, y) If (df < 0) Then df = 0 End If

Call testEigenFace.setPoint(x, y, CByte(df)) Next

Next

'compare it to other eigenfaces (Komparasi citra) minDistance = ((100 - MinimumEigen) * 99999999#) / 100

'MsgBox minDistance value by default 99999999# For i = 0 To NoOfFaces - 1 Distance = 0 For x = 0 To imageWidth - 1 For y = 0 To imageHeight - 1 a = EigenFace(i).getPoint(x, y) b = testEigenFace.getPoint(x, y) df = Abs(a - b) Distance = Distance + df Next Next

If (Distance < minDistance) Then minDistance = Distance

retval = NameOfFace(i) Set Identity = Face(i) End If

Next

Identify = retval End Function

Gambar 4.29 Proses penghitungan nilai eigenface

Pada pencarian ini eigenface yang dianggap valid adalah nilai dengan jarak terkecil dengan facetemplate tetapi masih harus dalam range kemiripan yang diatur di awal. Misalnya kita memgeset nilai kemiripan adalah 80%. Andaikan saja facetemplate

yang kita miliki mempunyai nilai 1000, maka seandainya ditemukan jarak paling dekat adalah 700 maka wajah yang berkorespondensi dengan nilai 700 tidak akan dapat diambil karena nilai kemiripannya lebih kecil dari 80%. Jika citra yang sesuai dengan testface sudah didapatkan, misalnya face(k), tinggal mencari file yang sesuai yang tersimpan pada folder Image. Di sinilah field karyawan_id. Misalnya file pict58.jpg akan berkorespondensi dengan karyawan karyawan_id bernilai 7. Jika karyawan_id sudah teridentifikasi maka tinggal mengambil semua data pada record karyawan dengan karyawan_id tersebut.

rsKaryawan.MoveFirst

rsKaryawan.Find "karyawan_id=" & index rsBagian.MoveFirst

rsBagian.Find"bagian_id=" & rsKaryawan.Fields(3).value rsJabatan.MoveFirst rsJabatan.Find "jabatan_id=" & rsKaryawan.Fields(4).value

txtNoInduk.Text = rsKaryawan.Fields(1).value txtNama.Text = rsKaryawan.Fields(2).value txtBagian.Text = rsBagian.Fields(1).value txtJabatan.Text = rsJabatan.Fields(1).value

Gambar 4.30 Proses pengambilan data sesuai dengan nilai eigen Jika pada waktu absensi, karyawan yang melakukan absen keluar maka karyawan tersebut telah selesai dari pekerjaanya jadi tipe absen yang sebelumnya 1 menjadi 0. Berikut sumber kodenya :

If rsAbsen.EOF Then

cmAbsen.CommandText = "insert into absensi(karyawan_id, absensi_tanggal, absensi_waktu, absensi_tipe) " & "values(" & rsKaryawan.Fields(0).value & ",#" & Format(Now, "yyyy-mm-dd") & "#," & "#" & Format(Now, "hh:mm:ss") & "#,1)"

cmAbsen.Execute

MsgBox "ABSEN MASUK SUKSES", vbInformation, App.Title Else

If MsgBox("Anda telah melakukan ABSEN MASUK!!" & Chr(13) & "Apakah Anda akan melakukan ABSEN KELUAR?", vbYesNo, App.Title) = vbYes Then

cmAbsen.CommandText = "insert into absensi(karyawan_id, absensi_tanggal, absensi_waktu, absensi_tipe) " & "values(" & rsKaryawan.Fields(0).value & ",#" & Format(Now, "yyyy-mm-dd") & "#," & "#" & Format(Now, "hh:mm:ss") & "#,0)"

cmAbsen.Execute

MsgBox "ABSEN KELUAR SUKSES", vbInformation, App.Title End If

Dokumen terkait