fix a bug of portraits crop node

This commit is contained in:
songkey-win
2024-12-10 19:18:21 +08:00
parent 87b3264bf5
commit ebd186a3b8
3 changed files with 19 additions and 9 deletions
+1 -1
View File
@@ -225,7 +225,7 @@ class Smoother222(object):
class HelloCameraDemo(object):
def __init__(self, face_alignment_module, reset=False):
self.face_alignment_module = face_alignment_module
self.face_prob_th = 0.01
self.face_prob_th = 0.0001
self.min_face = 96
self.face_image_size = self.face_alignment_module.face_image_size
self.trackingFaces = []
+17 -7
View File
@@ -310,10 +310,9 @@ def crop_and_resize(frames, landmarks, save_size=512, crop=True):
tl, br = np.min(all_tl, axis=0), np.max(all_br, axis=0)
new_size = min(max(mean_wh) * 2.5, min(H, W) - 1)
fcenter = (tl + br) * 0.5
fcenter[1] -= new_size * 0.12
ftl = fcenter - new_size * 0.5
ftl[1] -= mean_wh[1] * 0.2
fbr = fcenter + new_size * 0.5
fbr[1] -= mean_wh[1] * 0.2
if ftl[0] < 0:
fbr[0] -= ftl[0]
@@ -328,12 +327,23 @@ def crop_and_resize(frames, landmarks, save_size=512, crop=True):
if fbr[1] >= H:
ftl[1] -= fbr[1] - H + 1
fbr[1] = H - 1
ftl = ftl.astype(int)
fbr = (fbr - ftl)[0].astype(int) + ftl
frames = frames[:, ftl[1]:fbr[1], ftl[0]:fbr[0], :].copy()
landmarks = landmarks - ftl
ratio = save_size / (fbr - ftl)
opt_center = (ftl + fbr) * 0.5
opt_size = np.floor(fbr - ftl).min()
opt_tl = (opt_center - opt_size * 0.5).astype(int)
opt_br = (opt_center + opt_size * 0.5).astype(int)
# print('H, W', H, W)
# print('opt_center', opt_center)
# print('opt_size', opt_size)
# print('opt_tl', opt_tl)
# print('opt_br', opt_br)
frames = frames[:, opt_tl[1]:opt_br[1], opt_tl[0]:opt_br[0], :].copy()
# print('frames', frames.shape)
landmarks = landmarks - opt_tl
ratio = save_size / (opt_br - opt_tl)
else:
ratio = (save_size / W, save_size / H)
landmarks = landmarks * ratio
+1 -1
View File
@@ -220,7 +220,7 @@ class CropPortrait:
def crop_portrait(self, image, face_toolkits):
image_np = cv2.cvtColor((image[0] * 255).cpu().numpy().astype(np.uint8), cv2.COLOR_BGR2RGB)
image_np = cv2.resize(image_np, (512, 512))
# image_np = cv2.resize(image_np, (512, 512))
# print(image_np.shape)
face_toolkits['face_aligner'].reset_track()
faces = face_toolkits['face_aligner'].forward(image_np)