File size: 6,202 Bytes
78013c4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
# Smart Attendance System

An asynchronous, AI-powered multi-layered attendance verification system designed to eliminate buddy punching, proxy check-ins, and attendance fraud. The project consists of a FastAPI backend using TensorFlow/DeepFace, a Next.js web application for administration/teachers, and a Flutter mobile application for students.

---

## πŸš€ Key Features

### 1. Multi-Layered AI Verification
To mark attendance, the student uploads a live selfie which undergoes three independent stages of verification:
- **Facial Recognition**: Matches the student's live face embedding against their registered template using the **FaceNet** model (via **DeepFace**) with **128-dimensional** vector embeddings stored in PostgreSQL using `pgvector`.
- **Liveness Detection**: Employs a custom-trained **MobileNetV2** model to check if the submission is a real person, preventing spoofing attempts using photos, videos, or masks.
- **Background Validation**: Utilizes a custom **MobileNetV1** model to verify that the background of the image matches the expected classroom environment.

### 2. Location & Geofencing
- Verifies student's physical location against active class coordinates.
- Teachers define geofenced regions (latitude, longitude, and radius in meters).
- Submissions outside the geofence boundary are automatically flagged or rejected.

### 3. Device Binding (Anti-Proxy)
- Restricts each student account to a single mobile device.
- Generates and binds a unique hardware UUID (`device_uuid`) on first login.
- Students must submit a **Device Change Request** to be approved by administrators/teachers before they can log in on a new device.

### 4. Real-time Communication & Notifications
- Websocket-based live connection to push real-time attendance updates to teachers' dashboards.
- Firebase Cloud Messaging (FCM) integration to dispatch push notifications for new sessions, reminders, and leave status updates.

### 5. Gamification Suite
- Encourages student attendance through engagement features including current/highest streaks, levels, leaderboards, and point systems.

---

## πŸ› οΈ Technology Stack & Versions

| Layer | Technology | Version / Specification | Key Libraries |
| :--- | :--- | :--- | :--- |
| **Backend** | Python 3.11 / FastAPI | `0.115.6` | Prisma ORM, TensorFlow `2.15.0`, DeepFace `0.0.93`, OpenCV `4.10.0`, Redis `5.2.1` |
| **Frontend** | Next.js (React 19) | `16.2.6` | Tailwind CSS `4.x`, Recharts `3.8.1`, Zustand `5.0.13`, Leaflet Map `1.9.4` |
| **Mobile** | Flutter SDK | `^3.8.0` | Riverpod `^2.6.1`, Dio `^5.7.0`, Geolocator `^13.0.2`, Hive `^2.2.3` |
| **Database** | PostgreSQL | 15+ | `pgvector` extension enabled for biometric representations |

---

## πŸ“‚ Project Structure

```
.
β”œβ”€β”€ backend/            # FastAPI python application, database migrations, and AI models
β”‚   β”œβ”€β”€ app/            # Application source code (api, core, db, middleware, services, etc.)
β”‚   β”œβ”€β”€ models/         # Local folder for downloading/caching TF models
β”‚   β”œβ”€β”€ prisma/         # Prisma schema and seeding configurations
β”‚   └── main.py         # App entrypoint
β”œβ”€β”€ frontend/           # Next.js web application for admins and teachers
β”‚   β”œβ”€β”€ src/            # Next.js pages/components
β”‚   └── package.json    # Frontend dependency definitions
└── mobile/             # Flutter student companion app
    β”œβ”€β”€ lib/            # Flutter implementation source code
    └── pubspec.yaml    # Flutter dependency configuration
```

---

## βš™οΈ Getting Started

### Prerequisites
1. **Python 3.11** installed on the host system.
2. **Node.js 20+** and **npm** installed.
3. **Flutter SDK (v3.8.x+)** and target development environment (Android/iOS simulator or physical device).
4. **PostgreSQL** database with `pgvector` extension enabled.
5. **Redis Server** running locally or accessible via network.
6. A **HuggingFace** token (`HF_TOKEN`) to download pre-trained liveness & background models.

---

### 1. Backend Setup

1. **Navigate to the directory**:
   ```bash
   cd backend
   ```

2. **Configure environment variables**:
   Create a `.env` file by copying the template:
   ```bash
   cp .env.example .env
   ```
   Fill in the required fields (database connection strings, Redis URL, JWT Secret, and HF token if required).

3. **Install dependencies**:
   ```bash
   pip install -r requirements.txt
   ```

4. **Prepare the database (Prisma)**:
   Ensure your PostgreSQL service is running and has the `pgvector` extension enabled, then run:
   ```bash
   python -m prisma db push
   python -m prisma generate
   ```

5. **Seed the database (Optional)**:
   ```bash
   python prisma/seed.py
   ```

6. **Start the server**:
   ```bash
   uvicorn main:app --reload --port 8000
   ```
   Interactive API documentation will be available at [http://localhost:8000/docs](http://localhost:8000/docs).

---

### 2. Frontend Setup

1. **Navigate to the directory**:
   ```bash
   cd frontend
   ```

2. **Configure environment variables**:
   Ensure a `.env.local` file exists:
   ```env
   NEXT_PUBLIC_API_URL=http://localhost:8000/api/v1
   ```

3. **Install dependencies**:
   ```bash
   npm install
   ```

4. **Start the development server**:
   ```bash
   npm run dev
   ```
   The dashboard will be running at [http://localhost:3000](http://localhost:3000).

---

### 3. Mobile Setup

1. **Navigate to the directory**:
   ```bash
   cd mobile
   ```

2. **Get Flutter packages**:
   ```bash
   flutter pub get
   ```

3. **Run the application**:
   Make sure you have an active emulator or connected device:
   ```bash
   flutter run
   ```

---

## πŸ”’ Security & Verification Parameters
The verification strictness can be controlled globally via the administrator settings page or in `.env`:
* **Face Embedding matching threshold**: Standard threshold is configured to `0.75` (cosine similarity/confidence score).
* **Liveness Detection threshold**: Values above `0.5` denote real face image inputs.
* **Geofencing validation**: Distance calculated dynamically using the Haversine formula based on student's GPS reports and active class geofence boundaries.