Sistem Absensi Sekolah berbasis Deteksi Wajah (Face Recognition Attendance System)
Sessiof mendeteksi dan mengenali wajah siswa secara real-time menggunakan kamera Webcam. Menggunakan algoritma YuNet untuk deteksi wajah dan model SFace dari OpenCV untuk pengenalan identitas yang akurat. Setiap siswa yang teridentifikasi, data kehadirannya otomatis tercatat ke Excel lokal dan tersinkronisasi dengan Dashboard Web Next.js secara real-time.
- Registrasi Wajah Baru β Mengambil sampel wajah siswa dari berbagai sudut secara otomatis.
- Deteksi & Absensi Real-Time β Mengenali wajah di kamera dengan anti-duplicate log harian.
- Status Kehadiran Lengkap β Hadir, Terlambat, Izin, Sakit, dan Alpa (auto-generate).
- Uji Pose Wajah & Liveness Challenge (Anti-Spoofing Interaktif) β Deteksi liveness interaktif (menghadap tengah, tantangan warna layar, dan menoleh kiri/kanan) untuk mencegah kecurangan scan wajah menggunakan foto atau layar ponsel.
- Dashboard Statistik β Statistik hadir, terlambat, izin, sakit & alpa dengan grafik interaktif (Tren Bulanan & Distribusi Kehadiran).
- Portal Khusus Guru & Wali Kelas (Filtered Teacher View) β Wali kelas memiliki portal khusus yang membatasi visualisasi grafik, persentase kehadiran, daftar siswa (roster), log aktivitas, dan notifikasi alpa hanya untuk kelas yang diampu secara otomatis.
- Statistik per Kelas β Laporan mendalam tiap kelas untuk Wali Kelas & Admin.
- Daftar Kehadiran β Tabel kehadiran lengkap dengan filter kelas, status, dan tanggal.
- Kalender Akademik β CRUD agenda dan kegiatan sekolah langsung dari portal.
- Export Laporan β Download rekap absensi dalam format CSV & Excel (.xlsx).
- Portal Siswa β Dashboard mandiri siswa dengan grafik kehadiran pribadi.
- Pengumuman Sekolah β Buat & kelola pengumuman yang tampil di portal siswa.
- Izin Digital β Siswa dapat mengajukan surat izin langsung dari portal.
- Kelola Pengguna β Manajemen akun Admin & Guru dengan role & penugasan wali kelas.
- Pengaturan Sistem β Toleransi keterlambatan (grace period) & notifikasi WhatsApp.
- Notifikasi WhatsApp & Telegram Orang Tua β Pengiriman pesan otomatis kepada wali murid saat siswa terdeteksi hadir, terlambat, maupun memiliki akumulasi status Alpa.
- Google Sheets Sync β Sinkronisasi data absensi ke Google Sheets via Webhook.
sessiof/
βββ dataset/ # Foto wajah siswa hasil registrasi [.gitignore]
βββ face_attendance.py # Program utama kamera absensi (Python)
βββ server.py # Flask API Server β jembatan Python β Next.js
βββ dashboard.py # Dashboard alternatif berbasis Streamlit
βββ dashboard-web/ # Portal Admin & Siswa (Next.js 15 / React 19)
β βββ public/
β β βββ sessiof-logo.png # Logo aplikasi Sessiof
β βββ src/app/
β βββ (portal)/ # Layout & halaman portal admin
β β βββ dashboard/ # Dashboard statistik utama
β β βββ attendance/ # Daftar & manajemen kehadiran
β β βββ statistik-kelas/# Statistik mendalam per kelas
β β βββ users/ # Kelola akun pengguna (admin/guru)
β β βββ izin/ # Permohonan izin siswa
β β βββ pengumuman/ # Pengumuman sekolah
β β βββ settings/ # Pengaturan sistem
β β βββ layout.tsx # Layout sidebar portal admin
β βββ student/dashboard/ # Portal akses mandiri siswa
β βββ login/ # Halaman login
β βββ page.tsx # Landing page publik
βββ .gitignore
βββ README.md
File yang di-ignore:
dataset/,users.json,settings.json,attendance.xlsx,students_metadata.json,admin_account.json,*.pkl,*.onnx
- Python 3.10+ dengan pip
- Node.js 18+ dengan npm
git clone https://github.com/davinmaritza/sessiof.git
cd sessiofpip install opencv-contrib-python pandas openpyxl requests numpy flask flask-corsBuat file users.json di root proyek (tidak di-commit karena sensitif):
[
{
"username": "admin",
"password": "admin123",
"name": "Administrator",
"role": "admin"
}
]Buat file settings.json:
{
"jam_masuk": "07:00",
"jam_pulang": "15:00",
"grace_period": 15,
"whatsapp_notifications_enabled": false
}# Windows β gunakan path lengkap jika 'python' tidak dikenali
C:\Users\<NamaUser>\AppData\Local\Python\bin\python.exe server.py
# Linux / macOS
python3 server.pyπ‘ Tip Windows: Jika muncul error
Python was not found, buka Settings β Apps β Advanced app settings β App execution aliases dan matikan toggle python.exe dan python3.exe. Setelah itupython server.pylangsung jalan.
Saat berhasil, terminal akan menampilkan banner seperti ini:
ββββββββββββββββββββββββββββββββββββββββββββ
β ⬑ Sessiof API Server β
β Face Attendance System β Backend β
ββββββββββββββββββββββββββββββββββββββββββββ
βΆ Status Running (v1.0)
βΆ Local http://127.0.0.1:5000
βΆ Network http://192.168.x.x:5000
βΆ Health http://127.0.0.1:5000/api/health
Buka terminal baru (jangan tutup terminal Flask):
cd dashboard-web
npm install
npm run devAkses portal di browser: http://localhost:3000
Saat dev server menerima request, terminal Next.js akan menampilkan log routing real-time yang rapi dan berwarna (ANSI colors):
[15:10:05] GET /dashboard
[15:10:07] GET /api/settings
[15:10:08] GET /api/attendance
[15:10:11] POST /api/agenda
python server.py # pastikan sudah running
# lalu aktifkan kamera dari portal Dashboard β tombol "Mulai Absensi"| Username | Password | Role | Keterangan |
|---|---|---|---|
admin |
admin123 |
Admin | Akses penuh portal |
β οΈ Segera ganti password admin setelah pertama login melalui menu Kelola Pengguna.
- Buat spreadsheet baru di Google Sheets dengan kolom:
Nama,Hari,Tanggal,Bulan,Tahun,Waktu. - Klik Ekstensi β Apps Script, tempel kode berikut:
function doPost(e) {
try {
var data = JSON.parse(e.postData.contents);
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.appendRow([data.nama, data.hari, data.tanggal, data.bulan, data.tahun, data.waktu]);
return ContentService.createTextOutput("Sukses").setMimeType(ContentService.MimeType.TEXT);
} catch (error) {
return ContentService.createTextOutput("Gagal: " + error.message).setMimeType(ContentService.MimeType.TEXT);
}
}- Deploy β New Deployment sebagai Web App (akses: Anyone).
- Salin URL lalu masukkan ke variabel
GOOGLE_SHEETS_WEBHOOK_URLdiface_attendance.py.
| Layer | Teknologi |
|---|---|
| Frontend | Next.js 15, React 19, TypeScript, Vanilla CSS |
| Backend | Python 3.10+, Flask 3.x, Flask-CORS |
| Face Detection | OpenCV + YuNet (.onnx) |
| Face Recognition | OpenCV + SFace (.onnx) |
| Data Storage | Excel lokal (.xlsx) via Pandas & Openpyxl |
| Cloud Sync | Google Apps Script Webhook |
| Export | SheetJS (xlsx) |
Base URL: http://localhost:5000
| Method | Endpoint | Deskripsi |
|---|---|---|
GET |
/api/health |
Health check server |
GET |
/api/status |
Status kamera & scan terakhir |
POST |
/api/login |
Login admin/guru/siswa |
POST |
/api/change-password |
Ganti password sendiri |
GET |
/api/attendance |
Ambil semua data kehadiran |
GET |
/api/classes |
Daftar kelas terdaftar |
GET |
/api/students |
Daftar siswa terdaftar |
GET/POST |
/api/users |
Kelola akun admin & guru |
PUT/DELETE |
/api/users/<username> |
Edit / hapus akun |
GET/POST |
/api/settings |
Pengaturan sistem |
POST |
/api/camera/start |
Mulai kamera absensi |
POST |
/api/camera/stop |
Hentikan kamera |
GET |
/api/stream |
Live video stream (MJPEG) |
MIT License β bebas digunakan dan dimodifikasi untuk keperluan pendidikan.