|
import gradio as gr |
|
import numpy as np |
|
import skimage.io as io |
|
import skimage.metrics as metrics |
|
import skimage.measure as measure |
|
import skimage.transform as transform |
|
from brisque import BRISQUE |
|
import sewar |
|
|
|
brisque_calculator = BRISQUE() |
|
|
|
|
|
def calculate_image_quality(reference_image, distorted_image): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mse_score = sewar.mse(reference_image, distorted_image) |
|
|
|
|
|
rmse_score = sewar.rmse(reference_image, distorted_image) |
|
|
|
|
|
ssim_score_sewar = sewar.ssim(reference_image, distorted_image) |
|
|
|
|
|
psnr_score = metrics.peak_signal_noise_ratio(reference_image, distorted_image) |
|
|
|
|
|
|
|
brisque_score_reference = brisque_calculator.score(reference_image) |
|
brisque_score_distorted = brisque_calculator.score(distorted_image) |
|
|
|
return { |
|
'MSE': mse_score, |
|
'RMSE': rmse_score, |
|
'SSIM_SEWAR': ssim_score_sewar, |
|
'PSNR': psnr_score, |
|
'BRISQUE': { |
|
'reference': brisque_score_reference, |
|
'distorted': brisque_score_distorted, |
|
} |
|
} |
|
|
|
|
|
def calculateNoReference(reference_image): |
|
|
|
brisque_score_reference = brisque_calculator.score(reference_image) |
|
|
|
return { |
|
'BRISQUE': brisque_score_reference |
|
} |
|
|
|
|
|
layout1 = gr.Interface( |
|
fn=calculateNoReference, |
|
inputs=[ |
|
gr.inputs.Image(label="Reference Image"), |
|
], |
|
outputs='json', |
|
title= "No Reference" |
|
) |
|
|
|
|
|
layout2 = gr.Interface( |
|
fn=calculate_image_quality, |
|
inputs=[ |
|
gr.inputs.Image(label="Reference Image"), |
|
gr.inputs.Image(label="Distorted Image") |
|
], |
|
outputs='json', |
|
title="With Reference" |
|
) |
|
|
|
|
|
layout = gr.TabbedInterface([layout1, layout2], ['no-reference', 'with-reference']) |
|
|
|
|
|
|
|
layout.launch() |
|
|