36 lines
884 B
Python
36 lines
884 B
Python
|
import cv2
|
||
|
import urllib
|
||
|
import numpy as np
|
||
|
|
||
|
class BlurryDetection:
|
||
|
def __init__(self):
|
||
|
# initialize the detector
|
||
|
pass
|
||
|
|
||
|
def variance_of_laplacian(self, image):
|
||
|
# compute the Laplacian of the image and then return the focus
|
||
|
# measure, which is simply the variance of the Laplacian
|
||
|
return cv2.Laplacian(image, cv2.CV_64F).var()
|
||
|
|
||
|
def __call__(self, img, thr=100):
|
||
|
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
|
||
|
|
||
|
fm = self.variance_of_laplacian(gray)
|
||
|
|
||
|
if fm >= thr:
|
||
|
return "non_blurry", fm
|
||
|
else:
|
||
|
return "blurry", fm
|
||
|
|
||
|
|
||
|
detector = BlurryDetection()
|
||
|
|
||
|
|
||
|
def check_blur(image_url):
|
||
|
req = urllib.request.urlopen(image_url)
|
||
|
arr = np.asarray(bytearray(req.read()), dtype=np.uint8)
|
||
|
img = cv2.imdecode(arr, -1)
|
||
|
pred = detector(img, thr=10)
|
||
|
score = pred[0]
|
||
|
return score
|