BlinkBlur / main.py
ArnoBen's picture
Upload 31 files
e99cf64
raw
history blame
2.69 kB
import os
import numpy as np
import argparse
from closed_eyes_detection import run_on_webcam, ClosedEyesDetector
from blurriness_estimation import BlurrinessEstimator
from config import BlurrinessConfig, InferenceConfig
import cv2
def parse_arguments() -> argparse.ArgumentParser:
"""
Parse the cli arguments given by the user.
Returns:
parser: parser object containing arguments and their values
"""
parser = argparse.ArgumentParser()
parser.add_argument("-w", "--webcam", required=False, action="store_true", default=False,
help="Runs eye blink detection on the user's webcam. Overrides other options.")
parser.add_argument("-p", "--path", required=False, type=str,
help="path of image to load")
parser.add_argument("-e", "--eyes", required=False, action="store_true", default=False,
help="Detects eye blink on the input image")
parser.add_argument("-b", "--blur", required=False, action="store_true", default=False,
help="Estimates image blur")
return parser
def detect_closed_eyes(img: np.ndarray) -> str:
"""
Runs the Closed Eyes Detector
Args:
img: input image
Returns:
str: Whether the eyes are opened or closed.
"""
detector = ClosedEyesDetector(InferenceConfig())
is_closed = detector(img)
s = "Eyes are closed." if is_closed else "Eyes are open."
return s
def detect_blur(img: np.ndarray) -> str:
"""
Runs the Blurriness Detector
Args:
img: input image
Returns:
str: Whether the input image is blurry
"""
cfg = BlurrinessConfig()
be = BlurrinessEstimator(cfg)
is_blurry, score = be(img)
s = "Image is blurry" if is_blurry else "Image is not blurry"
s += f" - Score: {score:.0f} - Sharpness threshold: {cfg.threshold}"
return s
def main():
parser = parse_arguments()
args = vars(parser.parse_args())
if args['webcam']:
run_on_webcam()
return
if args['path'] is None:
print('Image path required (-p).')
parser.print_help()
else:
path = args['path']
if not os.path.exists(path):
print(f"File not found at {path}")
return
img = cv2.imread(path)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
if args['eyes']:
result = detect_closed_eyes(img)
elif args['blur']:
result = detect_blur(img)
else:
print('No task specified. Use either -b or -e.')
parser.print_help()
return
print(result)
if __name__ == "__main__":
main()