sehaj13's picture
Update app.py
abcf7da verified
# Transformers and its models
#import transformers
# For Image Processing
#from transformers import ViTImageProcessor
# For Model
#from transformers import ViTModel, ViTConfig, pipeline
import insightface
from insightface.app import FaceAnalysis
# For data augmentation
from torchvision import transforms, datasets
# For Data Loaders
import datasets
from torch.utils.data import Dataset, DataLoader
# For Display
#from tqdm.notebook import tqdm
# Other Generic Libraries
import torch
from PIL import Image
import cv2
import os
import streamlit as st
import gc
from glob import glob
import shutil
import pandas as pd
import numpy as np
#import matplotlib.pyplot as plt
from io import BytesIO
import torch.nn.functional as F
# Set the device (GPU or CPU)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# Initialse Globle Variables
MODEL_TRANSFORMER = 'google/vit-base-patch16-224'
BATCH_SIZE = 8
# Set Paths
data_path = 'employees'
model_path = 'vit_pytorch_GPU_1.pt'
webcam_path = 'captured_image.jpg'
IMAGE_SHAPE = 640
# Set Title
st.title("AIML2025 Attendance System")
# Read images from directory
image_paths = []
image_file = glob(os.path.join(data_path, '*.jpg'))
#st.write(image_file)
image_paths.extend(image_file)
#st.write('input path size:', len(image_paths))
#st.write(image_paths)
# Initialize the app
app = FaceAnalysis(name="buffalo_l") # buffalo_l includes ArcFace model
app.prepare(ctx_id=-1, det_size=(IMAGE_SHAPE, IMAGE_SHAPE)) # Use ctx_id=-1 if you want CPU, and ctx_id=0 for GPU
# Define the ML model - Evaluation function
def prod_function(app, prod_path, webcam_path):
webcam_img = Image.open(webcam_path)
np_webcam = np.array(webcam_img) # Convert to NumPy array
cv2_webcam = cv2.cvtColor(np_webcam, cv2.COLOR_RGB2BGR) # Convert RGB (PIL) to BGR (OpenCV)
webcam_emb = app.get(cv2_webcam, max_num=1)
webcam_emb = webcam_emb[0].embedding
webcam_emb = torch.from_numpy(np.array(webcam_emb))
similarity_score = []
for path in prod_path:
img = cv2.imread(path)
face_embedding = app.get(img, max_num=1)
face_embedding = face_embedding[0].embedding
face_embedding = torch.from_numpy(np.array(face_embedding))
similarity_score.append(F.cosine_similarity(face_embedding,webcam_emb, dim=0))
#distance = F.pairwise_distance(emb, emb_prod)
#prod_preds.append(distance)
similarity_score = torch.from_numpy(np.array(similarity_score))
return similarity_score #prod_preds
about_tab, app_tab = st.tabs(["About the app", "Face Recognition"])
# About the app Tab
with about_tab:
st.markdown(
"""
# 👁️‍🗨️ AI-Powered Face Recognition Attendance System
Effortless, Secure, and Accurate Attendance with Vision Transformer Technology
An intelligent, facial recognition-based attendance solution that redefines how organizations manage employee presence. By leveraging cutting-edge computer vision and AI, the app automates attendance tracking with speed, precision, and reliability—no timecards, no fingerprint scans, just a glance.
""")
# Gesture recognition Tab
with app_tab:
# Read image from Camera
enable = st.checkbox("Enable camera")
picture = st.camera_input("Take a picture", disabled=not enable)
if picture is not None:
with st.spinner("Wait for it...", show_time=True):
# Run the predictions
prediction = prod_function(app, image_paths, picture)
#prediction = torch.cat(prediction, 0).to(device)
match_idx = torch.argmax(prediction)
st.write(prediction)
st.write(image_paths)
# Display the results
if prediction[match_idx] >= 0.6:
pname = image_paths[match_idx].split('/')[-1].split('.')[0]
st.write('Welcome: ',pname)
###### upload the data to Glitch https://aimljan25f.glitch.me/addg
# # using post method
url = "https://sehajpreet-aiml-2025.glitch.me/addg"
data = {'rno': '15','sname': pname, 'sclass': '7' }
# response = requests.post(url +url1 , data=data)
# Post Method is invoked if data != None
req = request.Request(url , method="GET", data=data)
# Response
resp = request.urlopen(req)
if response.status_code == 200:
st.success("Data updated on: " + "https://sehajpreet-aiml-2025.glitch.me/")
else:
st.warning("Data not updated")
########## end update website
else:
st.write("Match not found")