kopia lustrzana https://github.com/wagtail/wagtail
Refactored feature detection code into a class
rodzic
9ee089042d
commit
b7ba6dc640
|
@ -60,7 +60,8 @@ class BaseImageBackend(object):
|
||||||
image_mode, image_data = self.image_data_as_rgb(image)
|
image_mode, image_data = self.image_data_as_rgb(image)
|
||||||
|
|
||||||
# Use feature detection to find a focal point
|
# Use feature detection to find a focal point
|
||||||
focal_point = feature_detection.get_focal_point(image.size, image_mode, image_data)
|
feature_detector = feature_detection.FeatureDetector(image.size, image_mode, image_data)
|
||||||
|
focal_point = feature_detector.get_focal_point()
|
||||||
if focal_point:
|
if focal_point:
|
||||||
return self.crop_to_point(image, size, focal_point)
|
return self.crop_to_point(image, size, focal_point)
|
||||||
|
|
||||||
|
|
|
@ -13,25 +13,30 @@ except ImportError:
|
||||||
opencv_available = False
|
opencv_available = False
|
||||||
|
|
||||||
|
|
||||||
from wagtail.wagtailimages.utils.focal_point import FocalPoint, combine_points
|
from wagtail.wagtailimages.utils.focal_point import FocalPoint, combine_focal_points
|
||||||
|
|
||||||
|
|
||||||
def get_cv_gray_image(image_size, image_mode, image_data):
|
class FeatureDetector(object):
|
||||||
image = cv.CreateImageHeader(image_size, cv.IPL_DEPTH_8U, 3)
|
def __init__(self, image_size, image_mode, image_data):
|
||||||
cv.SetData(image, image_data)
|
self.image_size = image_size
|
||||||
|
self.image_mode = image_mode
|
||||||
|
self.image_data = image_data
|
||||||
|
|
||||||
gray_image = cv.CreateImage(image_size, 8, 1)
|
def opencv_grey_image(self):
|
||||||
convert_mode = getattr(cv, 'CV_%s2GRAY' % image_mode)
|
image = cv.CreateImageHeader(self.image_size, cv.IPL_DEPTH_8U, 3)
|
||||||
|
cv.SetData(image, self.image_data)
|
||||||
|
|
||||||
|
gray_image = cv.CreateImage(self.image_size, 8, 1)
|
||||||
|
convert_mode = getattr(cv, 'CV_%s2GRAY' % self.image_mode)
|
||||||
cv.CvtColor(image, gray_image, convert_mode)
|
cv.CvtColor(image, gray_image, convert_mode)
|
||||||
|
|
||||||
return gray_image
|
return gray_image
|
||||||
|
|
||||||
|
def detect_features(self):
|
||||||
def detect_features(image_size, image_mode, image_data):
|
|
||||||
if opencv_available:
|
if opencv_available:
|
||||||
image = get_cv_gray_image(image_size, image_mode, image_data)
|
image = self.opencv_grey_image()
|
||||||
rows = image_size[0]
|
rows = self.image_size[0]
|
||||||
cols = image_size[1]
|
cols = self.image_size[1]
|
||||||
|
|
||||||
eig_image = cv.CreateMat(rows, cols, cv.CV_32FC1)
|
eig_image = cv.CreateMat(rows, cols, cv.CV_32FC1)
|
||||||
temp_image = cv.CreateMat(rows, cols, cv.CV_32FC1)
|
temp_image = cv.CreateMat(rows, cols, cv.CV_32FC1)
|
||||||
|
@ -42,12 +47,11 @@ def detect_features(image_size, image_mode, image_data):
|
||||||
|
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
def detect_faces(self):
|
||||||
def detect_faces(image_size, image_mode, image_data):
|
|
||||||
if opencv_available:
|
if opencv_available:
|
||||||
cascade_filename = os.path.join(os.path.dirname(__file__), 'face_detection', 'haarcascade_frontalface_alt2.xml')
|
cascade_filename = os.path.join(os.path.dirname(__file__), 'face_detection', 'haarcascade_frontalface_alt2.xml')
|
||||||
cascade = cv.Load(cascade_filename)
|
cascade = cv.Load(cascade_filename)
|
||||||
image = get_cv_gray_image(image_size, image_mode, image_data)
|
image = self.opencv_grey_image()
|
||||||
|
|
||||||
cv.EqualizeHist(image, image)
|
cv.EqualizeHist(image, image)
|
||||||
|
|
||||||
|
@ -66,16 +70,15 @@ def detect_faces(image_size, image_mode, image_data):
|
||||||
|
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
def get_focal_point(self):
|
||||||
def get_focal_point(image_size, image_mode, image_data):
|
|
||||||
# Face detection
|
# Face detection
|
||||||
faces = feature_detection.detect_faces(image_size, image_mode, image_data)
|
faces = self.detect_faces()
|
||||||
|
|
||||||
if faces:
|
if faces:
|
||||||
return combine_points(faces)
|
return combine_focal_points(faces)
|
||||||
|
|
||||||
# Feature detection
|
# Feature detection
|
||||||
features = feature_detection.detect_features(image_size, image_mode, image_data)
|
features = self.detect_features()
|
||||||
|
|
||||||
if features:
|
if features:
|
||||||
return focal_point.combine_points(features)
|
return combine_focal_points(features)
|
||||||
|
|
Ładowanie…
Reference in New Issue