Absensi Wajah Menggunakan Python

Berikut adalah tutorial langkah demi langkah untuk membuat aplikasi absensi wajah menggunakan Python. Di tutorial ini, kita akan menggunakan pustaka OpenCV dan face recognition untuk mendeteksi dan mengenali wajah, serta tkinter untuk membuat antarmuka pengguna (GUI).

Prasyarat

Sebelum mulai, pastikan kamu telah menginstal beberapa pustaka yang dibutuhkan, yaitu:

  • OpenCV: Untuk pemrosesan gambar.
  • face_recognition: Untuk mengenali wajah.
  • tkinter: Untuk membuat antarmuka pengguna.
  • Pandas: Untuk menyimpan data absensi.

Kamu dapat menginstal pustaka ini dengan perintah pip berikut:

bash
pip install opencv-python face_recognition tkinter pandas

Langkah-langkah Pembuatan Aplikasi Absensi Wajah

1. Mengambil dan Menyimpan Wajah Pengguna

Pada langkah pertama, kita akan membuat sistem untuk mengambil gambar wajah pengguna dan menyimpannya dalam database (folder khusus) untuk referensi absensi.

python
import cv2
import face_recognition
import os
# Tentukan folder untuk menyimpan gambar wajah
folder_path = ‘wajah_pengguna/’

# Membuat folder jika belum ada
if not os.path.exists(folder_path):
os.makedirs(folder_path)

# Inisialisasi webcam
cap = cv2.VideoCapture(0)

# Fungsi untuk menyimpan gambar wajah
def simpan_wajah():
print(“Menunggu wajah…”)
while True:
ret, frame = cap.read()
if not ret:
print(“Tidak dapat mengakses kamera.”)
break

# Mengubah gambar menjadi format RGB
rgb_frame = frame[:, :, ::-1]

# Mencari wajah dalam gambar
wajah_locations = face_recognition.face_locations(rgb_frame)

for (top, right, bottom, left) in wajah_locations:
# Menandai wajah di gambar
cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2)

# Ambil wajah dan simpan
wajah_image = frame[top:bottom, left:right]
filename = os.path.join(folder_path, “wajah.png”)
cv2.imwrite(filename, wajah_image)
print(“Wajah telah disimpan.”)
break

# Menampilkan hasil di jendela
cv2.imshow(‘Pendeteksian Wajah’, frame)

# Keluar jika menekan tombol ‘q’
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break

cap.release()
cv2.destroyAllWindows()

# Mulai menyimpan wajah
simpan_wajah()

Penjelasan:

  • Skrip ini akan membuka kamera dan menunggu hingga wajah terdeteksi.
  • Ketika wajah terdeteksi, gambar wajah akan dipotong dan disimpan di folder yang telah ditentukan.
  • Untuk menghentikan proses, kamu bisa menekan tombol q.

2. Menambahkan Fungsi Absensi dengan Pengenalan Wajah

Setelah kamu menyimpan gambar wajah, langkah selanjutnya adalah membuat sistem absensi yang menggunakan wajah yang telah tersimpan untuk mengenali siapa yang sedang hadir.

python
import cv2
import face_recognition
import pandas as pd
import os
from datetime import datetime
# Folder penyimpanan wajah
folder_path = ‘wajah_pengguna/’

# Inisialisasi webcam
cap = cv2.VideoCapture(0)

# Membaca wajah yang tersimpan
def baca_wajah():
wajah_images = []
wajah_names = []

for filename in os.listdir(folder_path):
img_path = os.path.join(folder_path, filename)
image = face_recognition.load_image_file(img_path)
wajah_encoding = face_recognition.face_encodings(image)

if len(wajah_encoding) > 0:
wajah_images.append(wajah_encoding[0])
wajah_names.append(filename.split(‘.’)[0]) # Menyimpan nama file tanpa ekstensi

return wajah_images, wajah_names

# Fungsi untuk mencatat absensi
def catat_absensi(wajah_names):
# Mencatat absensi di file CSV
now = datetime.now()
waktu = now.strftime(‘%Y-%m-%d %H:%M:%S’)

df = pd.read_csv(‘absensi.csv’) if os.path.exists(‘absensi.csv’) else pd.DataFrame(columns=[“Nama”, “Waktu”])

# Menambahkan data absensi
for name in wajah_names:
df = df.append({“Nama”: name, “Waktu”: waktu}, ignore_index=True)

df.to_csv(‘absensi.csv’, index=False)
print(“Absensi telah dicatat.”)

# Fungsi utama untuk mendeteksi wajah
def deteksi_wajah():
wajah_images, wajah_names = baca_wajah()

while True:
ret, frame = cap.read()
if not ret:
print(“Tidak dapat mengakses kamera.”)
break

# Mengubah gambar menjadi format RGB
rgb_frame = frame[:, :, ::-1]

# Mendeteksi wajah dan mengenali wajah
wajah_locations = face_recognition.face_locations(rgb_frame)
wajah_encodings = face_recognition.face_encodings(rgb_frame, wajah_locations)

wajah_detected = []

for (top, right, bottom, left), wajah_encoding in zip(wajah_locations, wajah_encodings):
matches = face_recognition.compare_faces(wajah_images, wajah_encoding)

if True in matches:
match_index = matches.index(True)
nama = wajah_names[match_index]
wajah_detected.append(nama)

# Menandai wajah yang dikenali
cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2)
cv2.putText(frame, nama, (left, top – 10), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)

# Menampilkan hasil
cv2.imshow(‘Absensi Wajah’, frame)

# Jika ada wajah yang terdeteksi, catat absensi
if wajah_detected:
catat_absensi(wajah_detected)

# Keluar jika menekan tombol ‘q’
if cv2.waitKey(1) & 0xFF == ord(‘q’):
break

cap.release()
cv2.destroyAllWindows()

# Mulai proses absensi
deteksi_wajah()

Penjelasan:

  • Fungsi baca_wajah() akan memuat wajah yang sudah disimpan sebelumnya dan mengubahnya menjadi encoding wajah yang bisa digunakan untuk perbandingan.
  • Fungsi deteksi_wajah() menangkap wajah yang sedang terdeteksi oleh kamera dan membandingkannya dengan wajah yang telah disimpan.
  • Jika wajah dikenali, sistem akan mencatat absensi dan menampilkan nama di layar.

3. Membuat Antarmuka Pengguna (GUI) dengan Tkinter

Kita bisa membuat aplikasi GUI sederhana menggunakan Tkinter untuk mempermudah pengguna dalam melakukan absensi.

python
import tkinter as tk
from tkinter import messagebox
def mulai_absensi():
try:
deteksi_wajah() # Menjalankan deteksi wajah
except Exception as e:
messagebox.showerror(“Error”, str(e))

# Membuat window Tkinter
window = tk.Tk()
window.title(“Aplikasi Absensi Wajah”)

# Membuat tombol untuk mulai absensi
start_button = tk.Button(window, text=“Mulai Absensi”, command=mulai_absensi, height=2, width=20)
start_button.pack(pady=20)

# Menjalankan aplikasi
window.mainloop()

Penjelasan:

  • Kami membuat aplikasi GUI sederhana dengan Tkinter.
  • Ketika tombol “Mulai Absensi” ditekan, aplikasi akan memulai deteksi wajah.

Kesimpulan

Dengan tutorial ini, kamu telah berhasil membuat aplikasi absensi menggunakan pengenalan wajah dengan Python. Berikut adalah fitur utama aplikasi:

  • Menyimpan wajah pengguna untuk referensi absensi.
  • Mendeteksi dan mengenali wajah melalui webcam.
  • Mencatat absensi ke dalam file CSV.

Jika ingin mengembangkan lebih lanjut, kamu bisa menambahkan fitur seperti pengenalan wajah lebih banyak, pencatatan absensi otomatis berdasarkan waktu tertentu, atau pengelolaan data absensi secara lebih terstruktur.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *