InfosysResponsibleAiToolKit's picture
Add large model file to Git LFS
f496f54
# # USAGE
# # python mask_detect_video.py --video your_video.mp4
# import tensorflow as tf
# tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)
# from tensorflow.keras.applications.mobilenet_v2 import preprocess_input
# from tensorflow.keras.preprocessing.image import img_to_array
# from tensorflow.keras.models import load_model
# import numpy as np
# import argparse
# import cv2
# import os
# def mask_video():
# # construct the argument parser and parse the arguments
# parser = argparse.ArgumentParser()
# parser.add_argument("-f", "--face", type=str, default="face_detector",
# help="Path to face detector model directory")
# parser.add_argument("-m", "--model", type=str, default="mask_detector.model",
# help="Path to trained face mask detector model")
# parser.add_argument('-s', '--size', type=int, default=64,
# help="Size of face image")
# parser.add_argument("-c", "--confidence", type=float, default=0.5,
# help="Minimum probability to filter weak detections")
# parser.add_argument("-v", "--video", type=str,
# help="Path to input video file")
# args = parser.parse_args()
# # Suppress TensorFlow INFO-level messages
# import tensorflow as tf
# tf.get_logger().setLevel('ERROR') # or 'WARNING' or 'INFO'
# # load our serialized face detector model from disk
# prototxtPath = os.path.sep.join([args.face, "deploy.prototxt"])
# weightsPath = os.path.sep.join([args.face, "res10_300x300_ssd_iter_140000.caffemodel"])
# net = cv2.dnn.readNet(prototxtPath, weightsPath)
# # load the face mask detector model from disk
# model = load_model(args.model)
# # initialize the video stream
# if args.video:
# vs = cv2.VideoCapture(args.video)
# else:
# print("[ERROR] No video file provided.")
# return
# while True:
# # grab the frame from the video stream
# (grabbed, frame) = vs.read()
# # if the frame was not grabbed, then we have reached the end
# # of the stream
# if not grabbed:
# break
# # detect faces in the frame
# detect_and_draw(frame, net, model, args)
# # show the output frame
# cv2.imshow("Frame", frame)
# # break the loop if the 'q' key is pressed
# if cv2.waitKey(1) & 0xFF == ord('q'):
# break
# # release the video stream and close any open windows
# vs.release()
# cv2.destroyAllWindows()
# def detect_and_draw(frame, net, model, args):
# (h, w) = frame.shape[:2]
# blob = cv2.dnn.blobFromImage(frame, scalefactor=1.0, mean=(104.0, 177.0, 123.0))
# net.setInput(blob)
# detections = net.forward()
# for i in range(0, detections.shape[2]):
# confidence = detections[0, 0, i, 2]
# if confidence < args.confidence:
# # Drop low confidence detections
# continue
# box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
# (startX, startY, endX, endY) = box.astype("int")
# (startX, startY) = (max(0, startX), max(0, startY))
# (endX, endY) = (min(w - 1, endX), min(h - 1, endY))
# try:
# face = frame[startY:endY, startX:endX]
# face = cv2.cvtColor(face, cv2.COLOR_BGR2RGB)
# face = cv2.resize(face, (args.size, args.size))
# face = img_to_array(face)
# face = preprocess_input(face)
# face = np.expand_dims(face, axis=0)
# mask = model.predict(face)[0]
# label = "Mask" if mask < 0.5 else "No Mask"
# color = (0, 255, 0) if label == "Mask" else (0, 0, 255)
# # 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, 1)
# cv2.rectangle(frame, (startX, startY), (endX, endY), color, 2)
# except Exception as e:
# print(e)
# if __name__ == "__main__":
# mask_video()
# # USAGE
# # python mask_detect_video.py --video your_video.mp4
# import tensorflow as tf
# tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)
# from tensorflow.keras.applications.mobilenet_v2 import preprocess_input
# import numpy as np
# import argparse
# import cv2
# import os
# def mask_video():
# # construct the argument parser and parse the arguments
# parser = argparse.ArgumentParser()
# parser.add_argument("-f", "--face", type=str, default="face_detector",
# help="Path to face detector model directory")
# parser.add_argument("-m", "--model", type=str, default="mask_detector.model",
# help="Path to trained face mask detector model")
# parser.add_argument('-s', '--size', type=int, default=64,
# help="Size of face image")
# parser.add_argument("-c", "--confidence", type=float, default=0.5,
# help="Minimum probability to filter weak detections")
# parser.add_argument("-v", "--video", type=str,
# help="Path to input video file")
# args = parser.parse_args()
# # Suppress TensorFlow INFO-level messages
# import tensorflow as tf
# tf.get_logger().setLevel('ERROR') # or 'WARNING' or 'INFO'
# # load our serialized face detector model from disk
# prototxtPath = os.path.sep.join([args.face, "deploy.prototxt"])
# weightsPath = os.path.sep.join([args.face, "res10_300x300_ssd_iter_140000.caffemodel"])
# net = cv2.dnn.readNet(prototxtPath, weightsPath)
# # initialize the video stream
# if args.video:
# vs = cv2.VideoCapture(args.video)
# else:
# print("[ERROR] No video file provided.")
# return
# while True:
# # grab the frame from the video stream
# (grabbed, frame) = vs.read()
# # if the frame was not grabbed, then we have reached the end
# # of the stream
# if not grabbed:
# break
# # detect faces in the frame
# detect_and_draw(frame, net, args)
# # show the output frame
# cv2.imshow("Frame", frame)
# # break the loop if the 'q' key is pressed
# if cv2.waitKey(1) & 0xFF == ord('q'):
# break
# # release the video stream and close any open windows
# vs.release()
# cv2.destroyAllWindows()
# def detect_and_draw(frame, net, args):
# (h, w) = frame.shape[:2]
# blob = cv2.dnn.blobFromImage(frame, scalefactor=1.0, mean=(104.0, 177.0, 123.0))
# net.setInput(blob)
# detections = net.forward()
# for i in range(0, detections.shape[2]):
# confidence = detections[0, 0, i, 2]
# if confidence < args.confidence:
# # Drop low confidence detections
# continue
# box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
# (startX, startY, endX, endY) = box.astype("int")
# (startX, startY) = (max(0, startX), max(0, startY))
# (endX, endY) = (min(w - 1, endX), min(h - 1, endY))
# # draw a dark pink solid rectangle around the detected face
# frame[startY:endY, startX:endX, :] = (136, 28, 238)
# if __name__ == "__main__":
# mask_video()
# import tensorflow as tf
# tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)
# from tensorflow.keras.applications.mobilenet_v2 import preprocess_input
# import numpy as np
# import argparse
# import cv2
# import os
# def mask_video():
# # construct the argument parser and parse the arguments
# parser = argparse.ArgumentParser()
# parser.add_argument("-f", "--face", type=str, default="face_detector",
# help="Path to face detector model directory")
# parser.add_argument("-m", "--model", type=str, default="mask_detector.model",
# help="Path to trained face mask detector model")
# parser.add_argument('-s', '--size', type=int, default=64,
# help="Size of face image")
# parser.add_argument("-c", "--confidence", type=float, default=0.5,
# help="Minimum probability to filter weak detections")
# parser.add_argument("-v", "--video", type=str,
# help="Path to input video file")
# parser.add_argument("-o", "--output", type=str, default="output.mp4",
# help="Path to save the output video file with .mp4 extension")
# args = parser.parse_args()
# # Suppress TensorFlow INFO-level messages
# import tensorflow as tf
# tf.get_logger().setLevel('ERROR') # or 'WARNING' or 'INFO'
# # load our serialized face detector model from disk
# prototxtPath = os.path.sep.join([args.face, "deploy.prototxt"])
# weightsPath = os.path.sep.join([args.face, "res10_300x300_ssd_iter_140000.caffemodel"])
# net = cv2.dnn.readNet(prototxtPath, weightsPath)
# # initialize the video stream
# if args.video:
# vs = cv2.VideoCapture(args.video)
# else:
# print("[ERROR] No video file provided.")
# return
# # Define the codec and create a VideoWriter object
# fourcc = cv2.VideoWriter_fourcc(*"mp4v")
# out = cv2.VideoWriter(args.output, fourcc, 20.0, (int(vs.get(3)), int(vs.get(4))))
# while True:
# # grab the frame from the video stream
# (grabbed, frame) = vs.read()
# # if the frame was not grabbed, then we have reached the end
# # of the stream
# if not grabbed:
# break
# # detect faces in the frame
# detect_and_draw(frame, net, args)
# # write the output frame to the video file
# out.write(frame)
# # release the video stream and close any open windows
# vs.release()
# out.release()
# cv2.destroyAllWindows()
# def detect_and_draw(frame, net, args):
# (h, w) = frame.shape[:2]
# blob = cv2.dnn.blobFromImage(frame, scalefactor=1.0, mean=(104.0, 177.0, 123.0))
# net.setInput(blob)
# detections = net.forward()
# for i in range(0, detections.shape[2]):
# confidence = detections[0, 0, i, 2]
# if confidence < args.confidence:
# # Drop low confidence detections
# continue
# box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
# (startX, startY, endX, endY) = box.astype("int")
# (startX, startY) = (max(0, startX), max(0, startY))
# (endX, endY) = (min(w - 1, endX), min(h - 1, endY))
# # draw a dark pink solid rectangle around the detected face
# frame[startY:endY, startX:endX, :] = (136, 28, 238)
# if __name__ == "__main__":
# mask_video()
# import tensorflow as tf
# from tensorflow.keras.applications.mobilenet_v2 import preprocess_input
# import numpy as np
# import cv2
# import os
# from werkzeug.datastructures import FileStorage # Use this if you're using Flask for handling file uploads
# def mask_video(video, output_path="output.mp4"):
# # Suppress TensorFlow INFO-level messages
# # tf.get_logger().setLevel('ERROR') # or 'WARNING' or 'INFO'
# face_path="privacy/util/face_detect/face_detector"
# model_path="privacy/util/face_detect/results/Xception-size-64-bs-32-lr-0.0001.h5"
# size=64
# confidence=0.5
# # Load our serialized face detector model from disk
# prototxtPath = os.path.sep.join([face_path, "deploy.prototxt"])
# weightsPath = os.path.sep.join([face_path, "res10_300x300_ssd_iter_140000.caffemodel"])
# net = cv2.dnn.readNet(prototxtPath, weightsPath)
# print("STARTED")
# # If video is a FileStorage object, save it to a temporary file
# if isinstance(video, FileStorage):
# video_path = "temp_video.mp4"
# video.save(video_path)
# else:
# video_path = video # Assume it's already a file path
# # Initialize the video stream
# vs = cv2.VideoCapture(video_path)
# # Define the codec and create a VideoWriter object
# fourcc = cv2.VideoWriter_fourcc(*"mp4v")
# out = cv2.VideoWriter(output_path, fourcc, 20.0, (int(vs.get(3)), int(vs.get(4))))
# while True:
# # Grab the frame from the video stream
# (grabbed, frame) = vs.read()
# # If the frame was not grabbed, we have reached the end of the stream
# if not grabbed:
# break
# # Detect faces in the frame
# detect_and_draw(frame, net, size, confidence)
# # Write the output frame to the video file
# out.write(frame)
# # Release the video stream and close any open windows
# vs.release()
# out.release()
# cv2.destroyAllWindows()
# # If a temporary video file was created, remove it
# if isinstance(video, FileStorage):
# os.remove(video_path)
# def detect_and_draw(frame, net, size, confidence):
# (h, w) = frame.shape[:2]
# blob = cv2.dnn.blobFromImage(frame, scalefactor=1.0, mean=(104.0, 177.0, 123.0))
# net.setInput(blob)
# detections = net.forward()
# for i in range(0, detections.shape[2]):
# conf = detections[0, 0, i, 2]
# if conf < confidence:
# # Drop low confidence detections
# continue
# box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
# (startX, startY, endX, endY) = box.astype("int")
# (startX, startY) = (max(0, startX), max(0, startY))
# (endX, endY) = (min(w - 1, endX), min(h - 1, endY))
# # Draw a dark pink solid rectangle around the detected face
# frame[startY:endY, startX:endX, :] = (136, 28, 238)