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