Saifali's picture
Update app.py
4788db4
raw
history blame
3.32 kB
import gradio as gr
import keras
import cv2
from tensorflow.keras.preprocessing.image import img_to_array
from tensorflow.keras.preprocessing.image import load_img
from tensorflow.keras.applications.mobilenet_v2 import preprocess_input
import numpy as np
from PIL import Image
def modelpred(img):
#Loading the saved model
frame=cv2.imread(img)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=5,minSize=(60, 60),flags=cv2.CASCADE_SCALE_IMAGE)
faces_list=[]
preds=[]
locs=[]
label_list=[]
for (x, y, w, h) in faces:
face_frame = frame[y:y+h,x:x+w]
face_frame = cv2.cvtColor(face_frame, cv2.COLOR_BGR2RGB)
face_frame = cv2.resize(face_frame, (224, 224))
face_frame = img_to_array(face_frame)
face_frame = np.expand_dims(face_frame, axis=0)
face_frame = preprocess_input(face_frame)
(startX, startY, endX, endY) = (x,y,x+w,y+h)
box=(startX, startY, endX, endY)
locs.append(box)
p=model.predict(face_frame)
preds.append(p)
for (box,pred) in zip(locs,preds):
(startX, startY, endX, endY) = box
(withoutMask,mask,notproper) = pred[0]
# print(pred)
# determine the class label and color we'll use to draw
# the bounding box and text
if (mask > withoutMask and mask>notproper):
label = "Great you have worn the mask correctly"
elif ( withoutMask > notproper):
label = "Please wear a mask"
else:
label = "Please wear the mask properly"
if label == "Great you have worn the mask correctly":
color = (0, 255, 0)
elif label=="Please wear a mask":
color = (0, 0, 255)
else:
color = (255, 140, 0)
# include the probability in the label
label = "{}: {:.2f}%".format(label,max(mask, withoutMask, notproper) * 100)
label_list.append(label)
# display the label and bounding box rectangle on the output
# frame
cv2.putText(frame, label, (startX, startY - 10),cv2.FONT_HERSHEY_SIMPLEX, 0.45, color, 2)
cv2.rectangle(frame, (startX, startY), (endX, endY), color, 2)
# Display the resulting frame
# You may need to convert the color.
img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
im_pil = Image.fromarray(img)
return (im_pil,label_list)
imgpath=gr.inputs.Image(type="filepath")
# webcam=gr.inputs.Image(source="webcam",type="filepath",optional=True)
iface = gr.Interface(fn=modelpred, inputs=imgpath, outputs=[gr.outputs.Image(type="pil"),"text"],title="Face Mask Detection using Deep Neural Networks",description="""Implementation of an efficient neural network to detect and differentiate between people with high accuracy into 3 classes - those who have correctly worn face masks, those who have worn masks incorrectly and those who have not worn them. Implemented and fine tuned a MobileNetV2 network for this task and achieved an accuracy of 92.02%.""",allow_flagging="never",live=False,examples=[["images-3.jpeg"],["power-family-with-father-mother-daughter-wearing-medical-face-mask-protect-2019-ncov-covid-19-corona-virus-stay-home-concept_73622-1419.jpg"],["3000-2.jpg"]])
model = keras.models.load_model('saved_model.pb')
faceCascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_alt2.xml')
iface.launch(debug=True)