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)