Skip to content

davinmaritza/sessiof

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

41 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Sessiof πŸŽ“πŸ”

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.


🌟 Fitur Utama

πŸ€– Sistem Kamera Absensi & Keamanan

  • 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.

πŸ“Š Portal Web (Next.js)

  • 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.

πŸ”” Integrasi & Notifikasi

  • 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.

πŸ“‚ Struktur Proyek

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


πŸš€ Panduan Instalasi & Menjalankan

Prasyarat

  • Python 3.10+ dengan pip
  • Node.js 18+ dengan npm

1. Clone Repositori

git clone https://github.com/davinmaritza/sessiof.git
cd sessiof

2. Instal Dependensi Python

pip install opencv-contrib-python pandas openpyxl requests numpy flask flask-cors

3. Buat File Konfigurasi Data Awal

Buat 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
}

4. Jalankan Flask API Server

# 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 itu python server.py langsung 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

5. Jalankan Portal Web (Frontend)

Buka terminal baru (jangan tutup terminal Flask):

cd dashboard-web
npm install
npm run dev

Akses 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

6. Jalankan Kamera Absensi (Opsional)

python server.py   # pastikan sudah running
# lalu aktifkan kamera dari portal Dashboard β†’ tombol "Mulai Absensi"

πŸ‘€ Akun Default

Username Password Role Keterangan
admin admin123 Admin Akses penuh portal

⚠️ Segera ganti password admin setelah pertama login melalui menu Kelola Pengguna.


☁️ Integrasi Google Sheets (Opsional)

  1. Buat spreadsheet baru di Google Sheets dengan kolom: Nama, Hari, Tanggal, Bulan, Tahun, Waktu.
  2. 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);
  }
}
  1. Deploy β†’ New Deployment sebagai Web App (akses: Anyone).
  2. Salin URL lalu masukkan ke variabel GOOGLE_SHEETS_WEBHOOK_URL di face_attendance.py.


πŸ› οΈ Stack Teknologi

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)

πŸ”Œ API Reference

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)

πŸ“„ Lisensi

MIT License β€” bebas digunakan dan dimodifikasi untuk keperluan pendidikan.

About

Sistem absensi sekolah real-time berbasis pengenalan wajah menggunakan OpenCV (Haar Cascade & LBPH) yang terintegrasi dengan Google Sheets dan Web Dashboard Next.js.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors