I'm using first_order_model for an expression transfer between an video and a static image.

Part of the algorithm makes a facial comparison to get the frame in the video where the face is best aligned with the foto.

This is made with:

def normalize_kp(kp):                           # original kp is (step 1)
    kp = kp - kp.mean(axis=0, keepdims=True)    # (step 2)
    area = ConvexHull(kp[:, :2]).volume
    area = np.sqrt(area)
    kp[:, :2] = kp[:, :2] / area                # (step 3)
    return kp

normalized_kp_source      = normalize_kp(get_landmarks(source))
normalized_kp_destination = normalize_kp(get_landmarks(destination))

diff = (np.abs(normalized_kp_source - normalized_kp_destination) ** 2).sum()

What I could not understand is how normalize_kp works. I understand the result of putting the faces roughly in the same "size" and coordinate system.

Below, a comparison between the landmarks in each step of the normalisation: steps of normalisation

The question:

How can I compare face alignment. How this normalization works?


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.