Penerapan Face Recognition pada Keamanan Folder Menggunakan Metode Eigenface

  

LAMPIRAN : LISTING PROGRAM

  //Form Utama Public Class FormUtama Public Sub menuutama() Dim UCUtama As New UserControlUtama PanelControl.Controls.RemoveAt(0) PanelControl.Controls.Add(UCUtama) End Sub Public Sub menuLogin() Dim UCLogin As New UserControlLogin PanelControl.Controls.RemoveAt(0) PanelControl.Controls.Add(UCLogin) End Sub Public Sub Daftar() Dim UCDaftar As New UserControlDaftar PanelControl.Controls.RemoveAt(0) PanelControl.Controls.Add(UCDaftar) End Sub Public Sub Profil() Dim UCProfil As New UserControlProfil PanelControl.Controls.RemoveAt(0) PanelControl.Controls.Add(UCProfil) End Sub Private Sub FormUtama_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Dim UCLogin As New UserControlLogin Dim UCLogin As New UserControlLogin2 PanelControl.Controls.Add(UCLogin) End Sub End Class //Form Login Alternatif Public Class FormLoginAlternatif Private Sub Button1_Click(sender As Object, e As EventArgs) End Sub Private Sub ButtonLogin_Click(sender As Object, e As EventArgs) Handles ButtonLogin.Click Dim gagal As Boolean = True For i As Integer = 0 To _listuser.getcount - 1

  If (TextBox1.Text = _listuser.getlistuser(i).UID And TextBox2.Text = _listuser.getlistuser(i).password) Then username = TextBox1.Text FormUtama.menuutama() gagal = False Exit For End If Next If gagal Then MsgBox("UID atau Password anda salah") End If Me.Close() End Sub End Class //List Folder <Serializable()> _ Public Class ListFolder <Serializable()> _ Structure ListFolder Dim AlamatFolder As String Dim Status As String End Structure Dim _ListFolder As List(Of ListFolder) Sub New() _ListFolder = New List(Of ListFolder) End Sub Sub hapus(ByVal index As Integer) If _ListFolder.Count - 1 = 0 Then MessageBox.Show("Tidak Ada Folder di dalam daftar") Else _ListFolder.Remove(_ListFolder(index)) End If End Sub Public Sub Tambah(ByVal alamatfolder As String, ByVal status As String) For Each A As ListFolder In _ListFolder If A.AlamatFolder = alamatfolder Then MsgBox("Folder Telah ada dalam Daftar!") Exit Sub End If Next Dim TmpListfolder As ListFolder TmpListfolder.AlamatFolder = alamatfolder TmpListfolder.Status = status _ListFolder.Add(TmpListfolder) End Sub Function getAlamat(ByVal index As Integer) As String If index < 0 Then Return "Tidak Ada" Else Return _ListFolder(index).AlamatFolder End If

  End Function Function jumlah() As Integer Return _ListFolder.Count End Function Function getStatus(ByVal index As Integer) As String If index < 0 Or _ListFolder.Count = 0 Then Return "Tidak Ada" Else Return _ListFolder(index).Status End If End Function Sub setAlamat(ByVal index As Integer, ByVal alamat As String) If index < 0 Then MsgBox("Tidak Ada") Else Dim tmpList As ListFolder tmpList.AlamatFolder = alamat tmpList.Status = _ListFolder(index).Status _ListFolder(index) = tmpList End If End Sub Sub setStatus(ByVal index As Integer, ByVal status As String) If index < 0 Then MsgBox("Tidak Ada") Else Dim tmpList As ListFolder tmpList.AlamatFolder = _ListFolder(index).AlamatFolder tmpList.Status = status _ListFolder(index) = tmpList End If End Sub End Class //List User <Serializable()> _ Public Class listUser <Serializable()> _ Structure ListUser Dim UID As String Dim Nama As String Dim password As String Dim gbr1 As Bitmap Dim gbr2 As Bitmap Dim gbr3 As Bitmap End Structure Dim _ListUser As List(Of ListUser) Sub New() _ListUser = New List(Of ListUser) End Sub 'Public Sub Tambah(ByVal UID As String, ByVal nama As String, ByVal password As String) 'End Sub Public Sub Tambah(ByVal UID As String, ByVal nama As String, ByVal password As String, ByVal gbr1 As Bitmap, ByVal gbr2 As Bitmap, ByVal gbr3 As Bitmap) For Each A As ListUser In _ListUser

  If A.UID = UID Then MsgBox("UID Telah ada dalam Daftar!") Exit Sub End If Next Dim tmplistuser As ListUser tmplistuser.UID = UID tmplistuser.Nama = nama tmplistuser.password = password tmplistuser.gbr1 = gbr1 tmplistuser.gbr2 = gbr2 tmplistuser.gbr3 = gbr3 _ListUser.Add(tmplistuser) MessageBox.Show("Data anda telah disimpan") End Sub Function getlistuser(ByVal index As Integer) As ListUser Return _ListUser(index) End Function Function getlistuserimage(ByVal index As Integer) As List(Of Bitmap) Dim hasil As New List(Of Bitmap) hasil.Add(Citra.grayscale(Citra.resize(_ListUser(index).gbr1))) hasil.Add(Citra.grayscale(Citra.resize(_ListUser(index).gbr2))) hasil.Add(Citra.grayscale(Citra.resize(_ListUser(index).gbr3))) Return hasil End Function Function getcount() Return _ListUser.Count End Function End Class //ModuleGlobal Imports System.IO Imports System.Runtime.Serialization.Formatters.Binary Module ModuleGlobal Public _listuser As listUser Public username As String Function cekFile(ByVal path As String, ByVal tampilpesan As Boolean, Optional Pesan As String = "") As Boolean If System.IO.File.Exists(path) Then If Not Pesan = "" Then MessageBox.Show(Pesan, "Pemberitahuan", MessageBoxButtons.OK, MessageBoxIcon.Information) End If Return True Else Return False End If End Function Function cekFolder(ByVal path As String, ByVal tampilpesan As Boolean, Optional Pesan As String = "") As Boolean If System.IO.Directory.Exists(path) Then If Not Pesan = "" Then

  MessageBox.Show(Pesan, "Pemberitahuan", MessageBoxButtons.OK, MessageBoxIcon.Information) End If Return True Else Return False End If End Function Sub simpan(ByVal path As String, ByVal Data As Object) Dim FS As New FileStream(path, FileMode.Append) ' FileStream FS = new FileStream(path, FileMode.Create); Dim BF As New BinaryFormatter BF.Serialize(FS, Data) FS.Close() MsgBox("Selesai Menyimpan") End Sub Public Sub simpanListUser() If File.Exists("ListUser") Then File.Delete("ListUser") End If Dim FS As New FileStream("ListUser", FileMode.Append) Dim BF As New BinaryFormatter BF.Serialize(FS, _listuser) FS.Close() End Sub Public Sub LoadListUser() Dim FS As New FileStream("ListUser", FileMode.Open) Dim BF As New BinaryFormatter _listuser = BF.Deserialize(FS) FS.Close() End Sub End Module //PCA Imports Accord.Math Imports Accord.Math.Decompositions Imports Accord.Statistics Imports Accord.Statistics.Analysis Imports Accord.Math.Comparers Public Class PCA Structure wajah Dim nama As String Dim matrikskovarian(,) As Double Dim finaldata(,) As Double Dim tmpi As Integer End Structure Dim data As New List(Of wajah) Sub addData(ByVal someface As List(Of Bitmap), ByVal nama As String) Dim matrikskov(,) As Double = converttoimgKov(someface) Dim mean() As Double = matrikskov.Mean() Dim dataadjust(,) As Double = matrikskov.Subtract(mean) Dim cov(,) As Double = dataadjust.Covariance()

  Dim evd = New EigenvalueDecomposition(cov) Dim eigenval() As Double = evd.RealEigenvalues Dim eigenvector(,) As Double = evd.Eigenvectors Dim urut(eigenvector.GetLength(1)) As Double Dim nilaimax(eigenvector.GetLength(1) - 1) As Double Dim max As Double = -100 Dim tmpi As Integer = 0 Dim sum As Double = 0 'urutkan vektor For i As Integer = 0 To eigenvector.GetLength(1) - 1 For j As Integer = 0 To eigenvector.GetLength(0) - 1 Application.DoEvents() sum += Math.Round(eigenvector(j, i), 5) Next urut(i) = sum nilaimax(i) = sum sum = 0 Next Array.Sort(nilaimax) For ii As Integer = 0 To nilaimax.Count - 1 For iii As Integer = 0 To urut.Count - 1 If urut(iii) = nilaimax(ii) Then For j As Integer = 0 To eigenvector.GetLength(0) - 1 Dim tmp As Double tmp = eigenvector(j, ii) eigenvector(j, ii) = eigenvector(j, iii) eigenvector(j, iii) = tmp Next Exit For End If Next Next 'Dim eigenvectorbaru(eigenvector.GetLength(0) - 1, eigenvector.GetLength(1) - 1) As Double ComparerDirection.Descending) Dim finaldata(,) As Double = dataadjust.Multiply(eigenvector) For i As Integer = 0 To finaldata.GetLength(1) - 1 For j As Integer = 0 To finaldata.GetLength(0) - 1 Application.DoEvents() sum += Math.Round(finaldata(j, i), 5) Next If sum > max Then max = sum tmpi = i End If sum = 0 Next Dim tmpdata As New wajah tmpdata.matrikskovarian = matrikskov tmpdata.finaldata = finaldata tmpdata.nama = nama tmpdata.tmpi = tmpi data.Add(tmpdata) End Sub Function ambildata(ByVal index As Integer) As wajah If index > data.Count - 1 Then Return New wajah Else

  Return data(index) End If End Function Function getratavektor() As Double(,) Dim hasil(data(0).finaldata.GetLength(0) - 1, 0) As Double For j As Integer = 0 To data(0).finaldata.GetLength(0) - 1 Dim rata As Double = 0 For i As Integer = 0 To data.Count - 1 Dim tmpi As Integer = data(i).tmpi rata += data(i).finaldata(j, tmpi) Next rata /= data.Count hasil(j, 0) = rata Next Return hasil End Function Function bandingwajah(ByVal WajahInputan As Bitmap) As String Dim hasil As String = "" 'inisialisasi gbr inputan WajahInputan = Citra.grayscale(Citra.resize(WajahInputan)) Dim tmp2 As New List(Of Bitmap) tmp2.Add(WajahInputan) Dim matriks(,) As Double = converttoimgKov(tmp2) 'kurangi dengan rata rata matriks Dim ratavektor(,) As Double = getratavektor() Dim matrikpengurangan(,) As Double = matriks.Subtract(ratavektor) 'cari nilai eigen terkecil Dim min As Integer = 1000 Dim stringhasil As String = "" For i As Integer = 0 To data.Count - 1 Dim total As Double = 0 Dim tmpi As Integer = data(i).tmpi For j As Integer = 0 To matriks.GetLength(1) - 1 total += Math.Pow(matrikpengurangan(j, 0) - data(i).finaldata(j, tmpi), 2) Next total = Math.Sqrt(total) stringhasil &= total & "==" & data(i).nama & vbNewLine If total < min Then min = total hasil = data(i).nama End If Next Dim nilaiambang As Integer = 100 If min < nilaiambang Then Return "Login Diterima|" & hasil Else Return "Login Di tolak" End If 'Return hasil & min & vbNewLine & stringhasil End Function End Class

  //UserControlDaftar Imports Accord.Vision.Detection Imports Accord.Vision.Detection.Cascades Imports AForge.Video Imports AForge.Video.DirectShow Imports System.IO Imports System.Drawing.Imaging Imports System.Runtime.Serialization.Formatters.Binary Public Class UserControlDaftar Dim w As Integer = 50 Dim AMBILWEBCAM As PictureBox ' Dim imgFrame As Image(Of Bgr, Byte) 'Dim vidCapture As Capture 'Dim imgGray As Image(Of Gray, Byte) Dim pctwajah As PictureBox Dim gbr_Rata(,) As Double Dim gbrDipilih As Bitmap Dim AppIdleAMBILWEBCAM As Object Dim videoDevices As FilterInfoCollection Dim videosource As VideoCaptureDevice Dim TampilVideo As AForge.Controls.VideoSourcePlayer Dim idM, idS, idSdh As Integer Dim valM, valS, valSdh As Double Dim TMP_wajah, TMP_fitur As Bitmap Dim videosourceplayer1 As New AForge.Controls.VideoSourcePlayer Dim _PctWajah() As PictureBox Dim pctwajahpeng As PictureBox = New PictureBox Dim indexgbr As Integer = 0 Sub hidupkanWebcam(Tmp As PictureBox, TmpWajah As PictureBox, player As AForge.Controls.VideoSourcePlayer) Try AMBILWEBCAM = Tmp pctwajah = TmpWajah TampilVideo = player videoDevices = New FilterInfoCollection(FilterCategory.VideoInputDevice) videosource = New VideoCaptureDevice(videoDevices(0).MonikerString) TampilVideo.SignalToStop() TampilVideo.WaitForStop() TampilVideo.VideoSource = videosource TampilVideo.Start() AddHandler Application.Idle, AddressOf AppIdle Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Sub matikanWebCam() RemoveHandler Application.Idle, AddressOf AppIdle AMBILWEBCAM = Nothing pctwajah = Nothing TampilVideo.SignalToStop() TampilVideo.WaitForStop()

  TampilVideo.Stop() End Sub Public Sub AppIdle(ByVal sender As System.Object, ByVal e As System.EventArgs) AMBILWEBCAM.Image = TampilVideo.GetCurrentVideoFrame Try Dim detector As HaarObjectDetector Dim cascade As New FaceHaarCascade detector = New HaarObjectDetector(cascade, 30) detector.SearchMode = ObjectDetectorSearchMode.Average detector.ScalingFactor = 1.5 detector.ScalingMode = ObjectDetectorScalingMode.GreaterToSmaller detector.UseParallelProcessing = True detector.Suppression = 3 Dim faceObjects As Rectangle() = detector.ProcessFrame(AMBILWEBCAM.Image) Dim g As Graphics = Graphics.FromImage(AMBILWEBCAM.Image) For Each face In faceObjects Dim CropImage = New Bitmap(face.Width, face.Height) Using grp = Graphics.FromImage(CropImage) grp.DrawImage(AMBILWEBCAM.Image, New Rectangle(0, 0, face.Width, face.Height), face, GraphicsUnit.Pixel) End Using pctwajah.Image = CropImage g.DrawRectangle(Pens.Red, face) If Not IsNothing(pctwajahpeng.Image) Then TMP_wajah = New Bitmap(pctwajahpeng.Image) Dim gbrKirim As Bitmap = pctwajah.Image End If Next Catch ex As Exception 'TxtPesan.Text = "Error : " & (ex.Message) End Try End Sub Private Sub ButtonCapture_Click(sender As Object, e As EventArgs) Handles ButtonCapture.Click If Not IsNothing(pctwajahpeng.Image) And indexgbr < 3 Then _PctWajah(indexgbr).Image = pctwajahpeng.Image indexgbr += 1 End If End Sub Private Sub ButtonSimpan_Click(sender As Object, e As EventArgs) Handles ButtonSimpan.Click If Not TextBoxSandi.Text = TextBoxSandiUlang.Text Then MessageBox.Show("Password dan konfirmasi tidak sama", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) ElseIf (indexgbr < 3) Then MessageBox.Show("Anda Belum Memasukkan 3 inputan wajah anda") ElseIf (TextBoxNama.Text = "" Or TextBoxSandi.Text = "" Or TextBoxUID.Text = "") Then MessageBox.Show("Semua field wajib di isi")

  Else _listuser.Tambah(TextBoxUID.Text, TextBoxNama.Text, TextBoxSandi.Text, PictureBoxWajah1.Image, PictureBoxWajah2.Image, PictureBoxWajah3.Image) simpanListUser() End If End Sub Private Sub UserControlDaftar_Load(sender As Object, e As EventArgs) Handles MyBase.Load ReDim _PctWajah(2) _PctWajah(0) = PictureBoxWajah1 _PctWajah(1) = PictureBoxWajah2 _PctWajah(2) = PictureBoxWajah3 hidupkanWebcam(PictureBoxWebcam, pctwajahpeng, videosourceplayer1) If File.Exists("ListUser") Then LoadListUser() Else _listuser = New listUser End If End Sub Private Sub ButtonKembali_Click(sender As Object, e As EventArgs) Handles ButtonKembali.Click matikanWebCam() FormUtama.menuLogin() End Sub End Class //UserControlLogin Imports Accord.Vision.Detection Imports Accord.Vision.Detection.Cascades Imports AForge.Video Imports AForge.Video.DirectShow Imports System.IO Imports System.Drawing.Imaging Public Class UserControlLogin Dim w As Integer = 50 Dim AMBILWEBCAM As PictureBox ' Dim imgFrame As Image(Of Bgr, Byte) 'Dim vidCapture As Capture 'Dim imgGray As Image(Of Gray, Byte) Dim pctwajah As PictureBox Dim gbr_Rata(,) As Double Dim gbrDipilih As Bitmap Dim AppIdleAMBILWEBCAM As Object Dim videoDevices As FilterInfoCollection Dim videosource As VideoCaptureDevice Dim TampilVideo As AForge.Controls.VideoSourcePlayer Dim Namafile As String = "JarBackPro.net" Dim idM, idS, idSdh As Integer Dim valM, valS, valSdh As Double Dim TMP_wajah, TMP_fitur As Bitmap Dim videosourceplayer1 As New AForge.Controls.VideoSourcePlayer

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonLogin.Click 'matikanWebCam() 'FormUtama.menuutama() Dim _pca As New PCA Dim listdata As New List(Of Image) For i As Integer = 0 To _listuser.getcount - 1 _pca.addData(_listuser.getlistuserimage(i), _listuser.getlistuser(i).Nama) Next Dim banding As String = _pca.bandingwajah(PctWajahPeng.Image) If banding.Split("|")(0) = "Login Diterima" Then MsgBox(banding.Split("|")(0) & " sebagai " & banding.Split("|")(1)) username = banding.Split("|")(1) matikanWebCam() FormUtama.menuutama() Else MsgBox("Login Ditolak, Silahkan Coba Lagi") End If End Sub Sub hidupkanWebcam(Tmp As PictureBox, TmpWajah As PictureBox, player As AForge.Controls.VideoSourcePlayer) Try AMBILWEBCAM = Tmp pctwajah = TmpWajah TampilVideo = player videoDevices = New FilterInfoCollection(FilterCategory.VideoInputDevice) videosource = New VideoCaptureDevice(videoDevices(0).MonikerString) TampilVideo.SignalToStop() TampilVideo.WaitForStop() TampilVideo.VideoSource = videosource TampilVideo.Start() AddHandler Application.Idle, AddressOf AppIdle Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Sub matikanWebCam() RemoveHandler Application.Idle, AddressOf AppIdle AMBILWEBCAM = Nothing pctwajah = Nothing TampilVideo.SignalToStop() TampilVideo.WaitForStop() TampilVideo.Stop() End Sub Public Sub AppIdle(ByVal sender As System.Object, ByVal e As System.EventArgs) AMBILWEBCAM.Image = TampilVideo.GetCurrentVideoFrame Try Dim detector As HaarObjectDetector Dim cascade As New FaceHaarCascade detector = New HaarObjectDetector(cascade, 30) detector.SearchMode = ObjectDetectorSearchMode.Average detector.ScalingFactor = 1.5 detector.ScalingMode = ObjectDetectorScalingMode.GreaterToSmaller detector.UseParallelProcessing = True detector.Suppression = 3 Dim faceObjects As Rectangle() = detector.ProcessFrame(AMBILWEBCAM.Image) Dim g As Graphics = Graphics.FromImage(AMBILWEBCAM.Image) For Each face In faceObjects Dim CropImage = New Bitmap(face.Width, face.Height) Using grp = Graphics.FromImage(CropImage) grp.DrawImage(AMBILWEBCAM.Image, New Rectangle(0, 0, face.Width, face.Height), face, GraphicsUnit.Pixel) End Using pctwajah.Image = CropImage g.DrawRectangle(Pens.Red, face) If Not IsNothing(PctWajahPeng.Image) Then TMP_wajah = New Bitmap(PctWajahPeng.Image) Dim gbrKirim As Bitmap = pctwajah.Image End If Next Catch ex As Exception 'TxtPesan.Text = "Error : " & (ex.Message) End Try End Sub Private Sub UserControlLogin_Load(sender As Object, e As EventArgs) Handles MyBase.Load hidupkanWebcam(PctWebcamPeng, PctWajahPeng, videosourceplayer1) If File.Exists("ListUser") Then LoadListUser() Else _listuser = New listUser End If End Sub Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click matikanWebCam() FormUtama.Daftar() End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click FormLoginAlternatif.Show() End Sub End Class

  //UserControlLogin2 Imports Accord.Vision.Detection Imports Accord.Vision.Detection.Cascades Imports AForge.Video Imports AForge.Video.DirectShow Imports System.IO Imports System.Drawing.Imaging Public Class UserControlLogin2 Dim w As Integer = 50 Dim AMBILWEBCAM As PictureBox ' Dim imgFrame As Image(Of Bgr, Byte) 'Dim vidCapture As Capture 'Dim imgGray As Image(Of Gray, Byte) Dim pctwajah As PictureBox Dim gbr_Rata(,) As Double Dim gbrDipilih As Bitmap Dim AppIdleAMBILWEBCAM As Object Dim videoDevices As FilterInfoCollection Dim videosource As VideoCaptureDevice Dim TampilVideo As AForge.Controls.VideoSourcePlayer Dim Namafile As String = "JarBackPro.net" Dim idM, idS, idSdh As Integer Dim valM, valS, valSdh As Double Dim TMP_wajah, TMP_fitur As Bitmap Dim videosourceplayer1 As New AForge.Controls.VideoSourcePlayer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonLogin.Click If Not PctWajahPeng.Image Is Nothing Then Dim _pca As New PCA Dim listdata As New List(Of Image) For i As Integer = 0 To _listuser.getcount - 1 _pca.addData(_listuser.getlistuserimage(i), _listuser.getlistuser(i).Nama) Next Dim banding As String = _pca.bandingwajah(PctWajahPeng.Image) If banding.Split("|")(0) = "Login Diterima" Then MsgBox(banding.Split("|")(0) & " sebagai " & banding.Split("|")(1)) username = banding.Split("|")(1) matikanWebCam() FormUtama.menuutama() Else MsgBox("Login Ditolak, Silahkan Coba Lagi") End If Else MsgBox("Harus Ada Wajah Terdeteksi terlebih dahulu") End If End Sub Sub hidupkanWebcam(Tmp As PictureBox, TmpWajah As PictureBox, player As AForge.Controls.VideoSourcePlayer) Try AMBILWEBCAM = Tmp pctwajah = TmpWajah TampilVideo = player videoDevices = New FilterInfoCollection(FilterCategory.VideoInputDevice) videosource = New VideoCaptureDevice(videoDevices(0).MonikerString) TampilVideo.SignalToStop() TampilVideo.WaitForStop() TampilVideo.VideoSource = videosource TampilVideo.Start() AddHandler Application.Idle, AddressOf AppIdle Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Sub matikanWebCam() RemoveHandler Application.Idle, AddressOf AppIdle AMBILWEBCAM = Nothing pctwajah = Nothing TampilVideo.SignalToStop() TampilVideo.WaitForStop() TampilVideo.Stop() End Sub Public Sub AppIdle(ByVal sender As System.Object, ByVal e As System.EventArgs) AMBILWEBCAM.Image = TampilVideo.GetCurrentVideoFrame End Sub Private Sub UserControlLogin_Load(sender As Object, e As EventArgs) Handles MyBase.Load hidupkanWebcam(PctWebcamPeng, PctWajahPeng, videosourceplayer1) If File.Exists("ListUser") Then LoadListUser() Else _listuser = New listUser End If End Sub Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click matikanWebCam() FormUtama.Daftar() End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click FormLoginAlternatif.Show() End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click PictureBox3.Image = AMBILWEBCAM.Image End Sub Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click Try Dim detector As HaarObjectDetector Dim cascade As New FaceHaarCascade

detector = New HaarObjectDetector(cascade, 30) detector.SearchMode = ObjectDetectorSearchMode.Average detector.ScalingFactor = 1.5 detector.ScalingMode = ObjectDetectorScalingMode.GreaterToSmaller detector.UseParallelProcessing = True detector.Suppression = 3 Dim faceObjects As Rectangle() = detector.ProcessFrame(PictureBox3.Image) Dim g As Graphics = Graphics.FromImage(PictureBox3.Image) If faceObjects.Length = 0 Then MsgBox("Tidak Ada wajah terdeteksi") Else For Each face In faceObjects Dim CropImage = New Bitmap(face.Width, face.Height) Using grp = Graphics.FromImage(CropImage) grp.DrawImage(PictureBox3.Image, New Rectangle(0, 0, face.Width, face.Height), face, GraphicsUnit.Pixel) End Using pctwajah.Image = CropImage g.DrawRectangle(Pens.Red, face) If Not IsNothing(PctWajahPeng.Image) Then TMP_wajah = New Bitmap(PctWajahPeng.Image) Dim gbrKirim As Bitmap = pctwajah.Image End If Next End If Catch ex As Exception 'TxtPesan.Text = "Error : " & (ex.Message) End Try End Sub End Class //UserControlUtama Imports System.IO Imports System.Runtime.Serialization.Formatters.Binary Imports System.Security.AccessControl Public Class UserControlUtama Dim _Listfolder As ListFolder Sub kuncifolder(ByVal alamat As String) Dim perintah As String = "Attrib +s +h +r " & ListView1.SelectedItems(0).Text Shell(perintah) Dim fs As FileSystemSecurity = File.GetAccessControl(alamat)

fs.AddAccessRule(New FileSystemAccessRule(Environment.UserName, FileSystemRights.FullControl, AccessControlType.Deny)) File.SetAccessControl(alamat, fs) End Sub Sub bukakuncifolder(ByVal alamat As String) Dim fs As FileSystemSecurity = File.GetAccessControl(alamat) fs.RemoveAccessRule(New FileSystemAccessRule(Environment.UserName, FileSystemRights.FullControl, AccessControlType.Deny)) File.SetAccessControl(alamat, fs) Dim perintah As String = "Attrib -s -h -r " & ListView1.SelectedItems(0).Text Shell(perintah) End Sub Private Sub ToolStripButton3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton3.Click If ListView1.SelectedItems().Count > 0 Then kuncifolder(ListView1.SelectedItems(0).Text) _Listfolder.setStatus(ListView1.SelectedItems(0).Index, "Terkunci") simpanListFolder() tampilkankeListview() End If End Sub Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click If FolderBrowserDialog1.ShowDialog = DialogResult.OK Then ListView1.Items.Add(FolderBrowserDialog1.SelectedPath.ToString) ListView1.Items(ListView1.Items.Count - 1).SubItems.Add("Tidak Terkunci") _Listfolder.Tambah(FolderBrowserDialog1.SelectedPath.ToString, "Tidak Terkunci") If File.Exists("ListFolder") Then File.Delete("ListFolder") End If simpanListFolder() End If End Sub Private Sub ToolStripButton2_Click(sender As Object, e As EventArgs) Handles ToolStripButton2.Click If Not ListView1.SelectedItems(0) Is Nothing Then _Listfolder.hapus(ListView1.SelectedItems(0).Index) simpanListFolder() tampilkankeListview() End If End Sub Private Sub ToolStripButton4_Click(sender As Object, e As EventArgs) Handles ToolStripButton4.Click If ListView1.SelectedItems().Count > 0 Then bukakuncifolder(ListView1.SelectedItems(0).Text) _Listfolder.setStatus(ListView1.SelectedItems(0).Index, "Tidak Terkunci") simpanListFolder() tampilkankeListview() End If

  End Sub Private Sub UserControlUtama_Load(sender As Object, e As EventArgs) Handles MyBase.Load If File.Exists("Listfolder") Then LoadListFolder() tampilkankeListview() Else _Listfolder = New ListFolder End If End Sub Sub simpanListFolder() If File.Exists(username) Then File.Delete(username) End If Dim FS As New FileStream(username, FileMode.Append) Dim BF As New BinaryFormatter BF.Serialize(FS, _Listfolder) FS.Close() End Sub Sub LoadListFolder() If File.Exists(username) Then Dim FS As New FileStream(username, FileMode.Open) Dim BF As New BinaryFormatter _Listfolder = BF.Deserialize(FS) FS.Close() Else _Listfolder = New ListFolder End If End Sub Sub tampilkankeListview() ListView1.Items.Clear() For i As Integer = 0 To _Listfolder.jumlah - 1 ListView1.Items.Add(_Listfolder.getAlamat(i)) ListView1.Items(ListView1.Items.Count - 1).SubItems.Add(_Listfolder.getStatus(i)) Next End Sub Private Sub ToolStripLabel1_Click(sender As Object, e As EventArgs) Handles ToolStripLabel1.Click FormUtama.menuLogin() End Sub End Class // Citra Imports Accord.Imaging Module Citra Function grayscale(ByVal img As Bitmap) As Bitmap Dim filter As AForge.Imaging.Filters.Grayscale = New AForge.Imaging.Filters.Grayscale(0.2125, 0.7154, 0.0721) Dim grayImg As Bitmap = filter.Apply(img) Return grayImg End Function Function resize(ByVal img As Bitmap) As Bitmap

  Dim filter As AForge.Imaging.Filters.ResizeBilinear = New AForge.Imaging.Filters.ResizeBilinear(30, 30) Dim newimg As Bitmap = filter.Apply(img) Return newimg End Function Function threshold(ByVal img As Bitmap) As Bitmap Dim filter As AForge.Imaging.Filters.Threshold = New AForge.Imaging.Filters.Threshold(100) Dim newimg As Bitmap = filter.Apply(img) Return newimg End Function Function prapengolahan(ByVal img As Bitmap) As Bitmap Return threshold(grayscale(resize(img))) End Function Function imgTovector(ByVal img As Bitmap) As Double() Dim hasil(img.Width * img.Height) As Double Dim pos As Integer = 0 For i As Integer = 0 To img.Height - 1 For j As Integer = 0 To img.Width - 1 hasil(pos) = img.GetPixel(i, j).R Next Next Return hasil End Function Function converttoimgKov(ByVal img As List(Of Bitmap)) As Double(,) Dim hasil(img(0).Width * img(0).Height, img.Count - 1) As Double For i As Integer = 0 To img.Count - 1 Dim tmpvektor() As Double = imgTovector(img(i)) For j As Integer = 0 To tmpvektor.Length - 1 hasil(j, i) = tmpvektor(j) Next Next Return hasil End Function End Module