import os import cv2 import gradio as gr import numpy as np from imgutils.data import load_image def variance_of_laplacian(np_image): """ Inspired by https://pyimagesearch.com/2015/09/07/blur-detection-with-opencv/ """ return cv2.Laplacian(np_image, cv2.CV_64F).var() def laplacian_score(image): v = np.array(load_image(image, force_background='white', mode='L')) return variance_of_laplacian(v) def _fn(image, threshold: float): v = laplacian_score(image) text = 'Is Blur' if v < threshold else 'Not Blur' return v, text if __name__ == '__main__': with gr.Blocks() as demo: with gr.Row(): with gr.Column(): gr_input_image = gr.Image(type='pil', label='Original Image') gr_threshold = gr.Slider(70, maximum=500, value=100, label='Threshold') gr_submit = gr.Button(value='Submit', variant='primary') with gr.Column(): gr_score = gr.Text(label='Laplacian Score', value='') gr_pred = gr.Text(label='Prediction', value='') gr_submit.click( _fn, inputs=[gr_input_image, gr_threshold], outputs=[gr_score, gr_pred], ) demo.queue(os.cpu_count()).launch()