Spaces:
Sleeping
Sleeping
| import tensorflow as tf | |
| import cv2 | |
| import numpy as np | |
| # import matplotlib.pyplot as plt | |
| # import seaborn as sns | |
| import streamlit as st | |
| from PIL import Image | |
| st.image(r"face-mask.png", width = 150) | |
| st.write("# Mask detector App") | |
| # load model | |
| def cache_model(model_add): | |
| model = tf.keras.models.load_model(model_add) | |
| return model | |
| model = cache_model("mask_detector.keras") | |
| labels = ['WithMask', 'WithoutMask'] | |
| def predict(img,model,labels = labels): | |
| # read_image | |
| # img = cv2.imread(img_add) | |
| # resize image to 224, 224 | |
| img = cv2.resize(img, (224,224)) | |
| # st.write("resize_cv2", img.shape) | |
| # convert to RGB | |
| img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) | |
| img_expand = tf.expand_dims(img_rgb, axis = 0) | |
| y_pred_prob = model.predict(img_expand) | |
| y_pred_prob_round = np.round(y_pred_prob[0][0], 3) | |
| st.write(y_pred_prob[0][0]) | |
| y_pred = int(np.round(y_pred_prob_round)) | |
| label = labels[y_pred] | |
| return (label, y_pred_prob_round) | |
| def face_detect(img, model, labels = labels): | |
| # img = cv2.imread(img_add) | |
| face_detector=cv2.CascadeClassifier("haarcascade_frontalface_default.xml") | |
| img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) | |
| faces = face_detector.detectMultiScale(img_gray) | |
| if len(faces) > 0: | |
| for face in faces: | |
| x,y,w,h = face | |
| x_max = x + w | |
| y_max = y + h | |
| face_crp = img[y:y_max+1, x:x_max+1] | |
| label, prob = predict(face_crp,model,labels = labels) | |
| if label == labels[0]: | |
| cv2.rectangle(img, (x,y), (x_max, y_max), (0,255,0), 3) | |
| cv2.putText(img, f"{label} -: {prob}%", (x,y-10), cv2.FONT_HERSHEY_SIMPLEX, | |
| 1, (0,255,0), 2) | |
| else: | |
| cv2.rectangle(img, (x,y), (x_max, y_max), (255,0,0), 3) | |
| cv2.putText(img, f"{label} -: {1 - prob}%", (x,y-10), cv2.FONT_HERSHEY_SIMPLEX, | |
| 1, (255,0,0), 2) | |
| return img | |
| # File uploader | |
| uploaded_file = st.file_uploader("upload image", type=["jpg", "jpeg", "png"]) | |
| submit_btn = st.button("Submit") | |
| if submit_btn: | |
| if uploaded_file: | |
| img_array = np.array(Image.open(uploaded_file)) | |
| # st.write(img_array.shape) | |
| result_img = face_detect(img_array, model) | |
| # result_img_rgb = cv2.cvtColor(result_img, cv2.COLOR_BGR2RGB) | |
| st.image(result_img) | |
| else: | |
| st.write("Please upload an image") |