|
@@ -3,8 +3,8 @@ from PIL.Image import Image as PIL_Image
|
|
|
|
|
|
DEFAULT_RATIO = np.sqrt(49 / 400)
|
|
|
|
|
|
-def __expand_parts(p):
|
|
|
- return p[:, 0], p[:, 1:3], p[:, 3].astype(bool)
|
|
|
+# def __expand_parts(p):
|
|
|
+# return p[:, 0], p[:, 1:3], p[:, 3].astype(bool)
|
|
|
|
|
|
def rescale_parts(im, parts, part_rescale_size):
|
|
|
if part_rescale_size is None or part_rescale_size < 0:
|
|
@@ -66,32 +66,37 @@ def uniform_parts(im, ratio=DEFAULT_RATIO, round_op=np.floor):
|
|
|
return parts
|
|
|
|
|
|
def visible_part_locs(p):
|
|
|
- idxs, locs, vis = __expand_parts(p)
|
|
|
- return idxs[vis], locs[vis].T
|
|
|
+ res = p.visible_locs()
|
|
|
+ return res
|
|
|
|
|
|
+ # idxs, locs, vis = __expand_parts(p)
|
|
|
+ # return idxs[vis], locs[vis].T
|
|
|
|
|
|
-def crops(im, xy, ratio=DEFAULT_RATIO, padding_mode="edge"):
|
|
|
+def crop(im, xy, ratio=DEFAULT_RATIO, padding_mode="edge"):
|
|
|
h, w, c = dimensions(im)
|
|
|
crop_h, crop_w = int(h * ratio), int(w * ratio)
|
|
|
- crops = np.zeros((xy.shape[1], crop_h, crop_w, c), dtype=np.uint8)
|
|
|
|
|
|
pad_h, pad_w = crop_h // 2, crop_w // 2
|
|
|
|
|
|
padded_im = np.pad(im, [(pad_h, pad_h), (pad_w, pad_w), [0,0]], mode=padding_mode)
|
|
|
|
|
|
- for i, (x, y) in enumerate(xy.T):
|
|
|
- x0, y0 = x - crop_w // 2 + pad_w, y - crop_h // 2 + pad_h
|
|
|
- crops[i] = padded_im[y0:y0+crop_h, x0:x0+crop_w]
|
|
|
+ x0, y0 = xy[0] - crop_w // 2 + pad_w, xy[1] - crop_h // 2 + pad_h
|
|
|
+ return padded_im[y0:y0+crop_h, x0:x0+crop_w]
|
|
|
|
|
|
- return crops
|
|
|
+def crops(im, xy, ratio=DEFAULT_RATIO, padding_mode="edge"):
|
|
|
+ return np.stack([crop(im, x, y, ratio, padding_mode)
|
|
|
+ for (x,y) in xy.T])
|
|
|
|
|
|
def visible_crops(im, p, *args, **kw):
|
|
|
- idxs, locs, vis = __expand_parts(p)
|
|
|
- parts = crops(asarray(im), locs[vis].T, *args, **kw)
|
|
|
- res = np.zeros((len(idxs),) + parts.shape[1:], dtype=parts.dtype)
|
|
|
- res[vis] = parts
|
|
|
+ res = p.visible_crops(*args, **kw)
|
|
|
return res
|
|
|
|
|
|
+ # idxs, locs, vis = __expand_parts(p)
|
|
|
+ # parts = crops(asarray(im), locs[vis].T, *args, **kw)
|
|
|
+ # res = np.zeros((len(idxs),) + parts.shape[1:], dtype=parts.dtype)
|
|
|
+ # res[vis] = parts
|
|
|
+ # return res
|
|
|
+
|
|
|
def reveal_parts(im, xy, ratio=DEFAULT_RATIO):
|
|
|
h, w, c = dimensions(im)
|
|
|
crop_h, crop_w = int(h * ratio), int(w * ratio)
|