A application which makes bunking a little harder than before! It uses the application of Facial Recognition to mark your attendance using 2 step verification.
Have a peek at my supporting resources (PPT, Video) for further information
- Technology Stack used-
- How has it been built?
- Features of the Application
- How to run this web application?
- Instructions For Our Users
- Installation
- Running the Application
- The FACE API model has been put in the "client/public/models" folder. In short, "Face-api.js" has been used in our web application which has made face detection and recognition a lot simplier using pre trained models. [Check it out] (https://github.com/justadudewhohacks/face-recognition.js). Along with it, ReactJS has been used for frontend, and NodeJS and Express for backend along with MONGODB for the database. Few other tools such as GraphQL along with JWT and OAUTH for authentication.
This project uses 3 pretrained models:
- Face Detection Model
- Facial Landmark Detection Model
- Feature Extraction Model
There is a total of 8 required weight files with the respective metadata file required. Each model had been quantized to a size less than 10 MB to improve the recognition speed
- User information is saved in the MongoDB Cloud.
- The password is hashed first and then stored.
- Google API is used to implement the feature.
- User information is saved in the MongoDB Cloud.
- At least two images for facial recognition have to uploaded by each student.
- Using course ID students can enrol into courses.
- Enlists a course that a student could enrol in.
- A lecturer opens the attendance list.
- Students can mark their attendance using webcam.
- Attendance is marked when the face matches with the images in the database.
- Attendance cannot be marked after the lecturer has closed the attendance sheet.
- Percentage and names of absentees can be seen by both the users.
- Lecturers can schedule to inititiate an attendance transaction at a particular time and date.
- The lecturer can remove students from a course.
- Users can change their profile picture.
- Students enrolled in a course get notified when the attendance sheet is opened.
- Download NodeJS
open CMD and type "git clone https://github.com/ashwinlakhani/attendash.git".
- Open CMD in VSCode, change directory to "client" folder and run the following commands thus downloading the dependencies. First run 'cd client' , then run ' npm i --force'
- Open another terminal, change directory to "server" folder and install the dependencies . First run 'cd server' , then run ' npm i --force'
- Go to https://www.mongodb.com/try to register a free-tier account.
- Create a project named "attendash" and create a cluster named "attendash-Cluster".
- Choose any region with a star highlighted next to it
- Adding IP whitelist "0.0.0.0". This allows all network access
- Go to https://cloudinary.com/users/register/free to register a free-tier account.
- Note down your API key and Secret which have to be used later
- Go to the tab "Media Library", and create a folder named "attendash".
- Inside the folder "attendash", create 2 subfolders named "ProfilePicture" and "FaceGallery".
- Next, we have to go to settings, located on the top right
- Under tab "Upload", scroll down until you see "Upload presets".
- Click "Add upload preset", set Upload preset name to "attendash_facegallery" and folder set to "attendash/FaceGallery".
- Leave the others as default and click "Save".
- Again, click "Add upload preset", set Upload preset name to "attendash_profilepicture" and folder set to "attendash/ProfilePicture".
- Leave the others as default and click "Save".
- Go to GCP console: https://console.cloud.google.com/apis.
- Create a new project named "attendash" and find the respective OAuth Credentials
- Under tab "Credentials", click "Create Credential" and choose "OAuth client ID".
- Choose the application type "Web Application".
- Name the OAuth client name "Google Login".
- Add the javascript origin: http://localhost:3000, https://attendash.netlify.app
- Add the redirect uri: https://developers.google.com/oauthplayground.
- Click "Save".
- Create an OAuth credential for email sending.
- Under tab "Credentials", click "Create Credential" and choose "OAuth client ID".
- Choose the application type "Web Application".
- Name the OAuth client name "Mail".
- Add the javascript origin: http://localhost:4000, https://attendash.netlify.app
- Add the redirect uri: https://developers.google.com/oauthplayground.
- Click "Save".
- Under tab "OAuth Consent Screen", enter the required info (app name, app logo, app uri, privacy policy, etc).
- Inside the "server" folder, create a file named ".env" used to save the credential data of database, API and so on.
- Inside ".env" file, create 10 variables named "MONGO_URI", "SECRET_KEY", "CLOUDINARY_NAME", "CLOUDINARY_API_KEY", "CLOUDINARY_API_SECRET", "GOOGLE_OAUTH_USERNAME", "GOOGLE_OAUTH_CLIENT_ID", "GOOGLE_OAUTH_CLIENT_SECRET", "GOOGLE_OAUTH_REFRESH_TOKEN" and "GOOGLE_OAUTH_REDIRECT_URI".
- Go to MongoDB Cloud, select "connect" and choose "Node.js" to get the connection string. Set the MONGO_URI respectively.
- Set your SECRET_KEY to any random string (e.g: uHuauI8y8n9j1).
- Go to Cloudinary, copy the app name, id and secret, assigned to CLOUDINARY_NAME, CLOUDINARY_API_KEY, CLOUDINARY_API_SECRET.
- Assign GOOGLE_OAUTH_USERNAME to your gmail (e.g: yourgmailusername@gmail.com)
- Go to GCP (Google Cloud Platform) console, choose the "attendash" project.
- Under "Credentials" tab, select "mail" OAuth client, copy the app id and secret, assigned to "GOOGLE_OAUTH_CLIENT_ID" and "GOOGLE_OAUTH_CLIENT_SECRET".
- Go to https://developers.google.com/oauthplayground, enter scope: "https://mail.google.com".
- Before submiting, click the setting icon on the top right.
- Click "Use your own OAuth credentials"
- Enter "Client ID" and "Client Secret" of "mail" OAuth client.
- Submit the API scope.
- You will get an authorization code, exchange it with access token and refresh token.
- Assign the refresh token to GOOGLE_OAUTH_REFRESH_TOKEN.
- Assign GOOGLE_OAUTH_REDIRECT_URI to https://developers.google.com/oauthplayground.
- Register an account with our website
- When you land to your home page, you can create a course with the detais mentioned
- Give the course unique ID , mentioned in the table , under the second coljmn
- Students has to send the request to register, accept the registration.
- You do not need upload picture of students, It will be done by students.
- After all students register, you can select your course and choose to create new attendance which can be turned on and off
- You can see the faces of your students who have registered for your course
- Ensure that the students upload their face photo, otherwise there is no facial data of that student for reference.
- Only those enroll in the particular course will be counted into dataset for facial classification.
- Select date , time and camera inside attendance room.
- Wait for the model to be loaded.
- Set the distance as you wish.
- Submit the attendance form if finished.
- Visualize the attendance data in "Attendance History", or you can enter a particular course and click "View Attendance History".
- Check Attendance
- Thank You.
Instructions For Student:
- Register an account.
- Enroll into a course.
- Wait for system loading
- Wait for all models being loaded.
- Upload your face photo in "Face Gallery", at least two of your photos must be uploaded, with face in clear visibility
- The system will perform face detection, ensuring only a single face exist and rejecting photo with empty face or multiple faces.
- Photos will save in our secure cloud storage
- When your lecturer take the attendance of a particular course, all your uploaded facial data will be counted into the dataset for facial comparison.
- You can Visualize your attendance data by clicking on "Attendance History" , or you can enter a particular course and click "View Attendance History"
- Make sure the 10 env variables have been assigned in ".env" file.
- Install the "nodemon" which can restart the server script automatically if changes are detected.
- Open CMD, execute command "npm i -g nodemon" to install nodemon globally.
- Take a look at "server/package.json".
- Open CMD under directory "server", type "npm run dev".
- The server is running on http://localhost:4000.
- The client script is built using ReactJS, through CRA command.
- Open CMD under directory "client", type "npm start".
- The client is running on http://localhost:3000.