This repository is archived.
It is kept as a personal learning and experimentation project and is no longer actively developed.
π¦ This repository contains an academic, proof-of-concept project developed as part of a college course.
It demonstrates an end-to-end IoT β Cloud β AI pipeline for automated attendance marking using face recognition.The repository is intended as a learning and architectural showcase and is not actively maintained.
Warning
Educational & Ethical Use Only
- This project was developed strictly for academic purposes.
- All face recognition was conducted in a consensual, controlled environment.
- The system is a prototype and not intended for production deployment.
- No real credentials, private keys, or secrets are included in this repository.
- Any sensitive values (Wi-Fi credentials, AWS certificates, endpoints) have been intentionally redacted or replaced with placeholders.
Use responsibly and in compliance with privacy, biometric, and data-protection regulations.
Manual attendance systems are inefficient, error-prone, and difficult to scaleβespecially in environments such as classrooms and laboratories. With the growth of IoT devices, cloud computing, and AI services, it is now possible to automate such workflows in a reliable and scalable manner.
This project explores how a low-cost edge device (ESP32-CAM) can be integrated with AWS cloud services to create a fully automated attendance pipeline powered by face recognition.
The focus of the project is not just face recognition, but the complete system design:
- Edge data capture
- Secure device-to-cloud communication
- Event-driven cloud processing
- Serverless architecture
- Persistent attendance storage
- Build an end-to-end attendance system using IoT and AWS
- Capture images periodically from an ESP32-CAM
- Transmit images securely using MQTT over TLS
- Process images using AWS Lambda
- Perform face recognition using AWS Rekognition
- Store attendance records in DynamoDB
- Demonstrate real-world use of event-driven serverless architecture
- ESP32-CAM captures an image every 10 seconds
- Image is encoded as Base64
- Image is sent securely to AWS IoT Core via MQTT
- AWS IoT Rule triggers a Lambda function
- Image is decoded and stored in Amazon S3
- S3 upload triggers:
- Face indexing (for enrollment)
- Face matching (for attendance)
- Attendance is marked in DynamoDB based on:
- Face match confidence
- Time difference (β₯ 30 minutes)
- Class period (IST)
flowchart LR
A[ESP32-CAM] -->|MQTT over TLS| B[AWS IoT Core]
B -->|IoT Rule| C[Lambda: Image Decoder]
C -->|JPEG Upload| D[S3 Bucket]
D -->|S3 Event| E[Lambda: Face Indexing]
D -->|S3 Event| F[Lambda: Face Matching]
E -->|Index Faces| G[AWS Rekognition Collection]
F -->|Search Faces| G
F -->|Attendance Update| H[DynamoDB]
- Capture images using onboard camera
- Encode image data to Base64
- Publish JSON payloads to AWS IoT Core
- Maintain secure TLS connection using X.509 certificates
- Image capture interval: 10 seconds
- Communication protocol: MQTT
- Transport security: TLS (Port 8883)
π Note: All credentials, certificates, and private keys are intentionally excluded from this repository.
- Acts as the secure entry point for IoT messages
- Authenticates ESP32 using X.509 certificates
- Routes messages using IoT Rules
Trigger: AWS IoT Rule Function:
- Decodes Base64 image payload
- Generates timestamp-based filename
- Uploads image to Amazon S3
- Temporary storage for captured images
- Acts as an event source for downstream processing
Trigger: S3 Object Created Function:
- Indexes detected faces into a Rekognition Collection
- Uses
ExternalImageId(mapped to student roll number)
Trigger: S3 Object Created Function:
- Searches face against Rekognition Collection
- Applies confidence threshold (β₯ 95%)
- Converts timestamp to IST
- Determines class period
- Updates attendance in DynamoDB
- Managed face recognition service
- Stores facial embeddings in a persistent collection
- Used as-is, without custom ML logic
-
Stores attendance records using:
RollNumber(Partition Key)Date(Sort Key)
-
Tracks:
- In-time
- Out-time
- Attendance status per period
-
Attendance periods: 9 AM β 4 PM (IST)
-
Periods are hourly (1β7)
-
A student is marked Present if:
- Face match confidence β₯ 95%
- Time difference between first and last detection β₯ 30 minutes (to reduce misuse and ensure sustained presence)
- Detection occurs within a valid period
.
βββ esp32/
β βββ esp32_cam_mqtt.ino
β
βββ lambdas/
β βββ image_ingest_lambda.py
β βββ face_index_lambda.py
β βββ attendance_lambda.py
β
βββ README.md
βββ .gitignore
-
No secrets are committed
-
All credentials are replaced with placeholders
-
.gitignoreexcludes:- Certificates
- Private keys
- Environment configs
-
Designed following least-privilege IAM principles
- Explicit consent was assumed during data collection
- System was deployed in a controlled academic environment
- No public or unauthorized biometric data was processed
- This repository exists purely for educational demonstration
- β Core pipeline implemented
- β Frontend / dashboard not implemented
- β Firebase integration planned but not completed
- π¦ Repository archived as a learning artifact
This project demonstrates how IoT, cloud services, and AI can be combined to build a real-world, event-driven system using modern architectural patterns.
Beyond face recognition, the project highlights:
- Secure device-to-cloud communication
- Serverless, scalable processing
- Practical use of managed AI services
- Clean separation between edge, compute, and data layers
It serves as a strong academic and architectural showcase for cloud-native system design.
MIT License Provided as-is, for educational and learning purposes.
This repository is archived.
It is kept as a personal learning and experimentation project and is no longer actively developed.