Bird
Raised Fist0
Computer Visionml~5 mins

Face embedding and comparison in Computer Vision

Choose your learning style10 modes available
Introduction
Face embedding turns a face image into a list of numbers that captures its unique features. Comparing these lists helps us check if two faces are the same person.
Unlocking your phone with face recognition.
Finding friends in photos automatically.
Checking if a person is allowed to enter a building.
Organizing photos by who is in them.
Detecting if a face in a video matches a known person.
Syntax
Computer Vision
embedding = model(face_image)
distance = compare(embedding1, embedding2)
The model converts a face image into a vector called an embedding.
Comparing embeddings usually means calculating the distance between them.
Examples
Calculate Euclidean distance between two face embeddings to see how similar they are.
Computer Vision
embedding1 = model(face_image1)
embedding2 = model(face_image2)
distance = np.linalg.norm(embedding1 - embedding2)
Decide if two faces match by checking if their distance is below a set threshold.
Computer Vision
distance = np.linalg.norm(embedding1 - embedding2)
threshold = 0.6
is_same = distance < threshold
Sample Model
This code simulates face embeddings by flattening and normalizing small arrays as fake face images. It then compares distances between embeddings to show which faces are more similar.
Computer Vision
import numpy as np
from sklearn.preprocessing import normalize

def dummy_face_embedding(face_image):
    # Simulate embedding by flattening and normalizing image
    flat = face_image.flatten()
    norm = np.linalg.norm(flat)
    return flat / norm if norm > 0 else flat

def compare_embeddings(emb1, emb2):
    return np.linalg.norm(emb1 - emb2)

# Simulated face images as 3x3 grayscale arrays
face1 = np.array([[0, 1, 2], [1, 2, 3], [2, 3, 4]], dtype=float)
face2 = np.array([[0, 1, 2], [1, 2, 3], [2, 3, 5]], dtype=float)
face3 = np.array([[10, 10, 10], [10, 10, 10], [10, 10, 10]], dtype=float)

emb1 = dummy_face_embedding(face1)
emb2 = dummy_face_embedding(face2)
emb3 = dummy_face_embedding(face3)

dist12 = compare_embeddings(emb1, emb2)
dist13 = compare_embeddings(emb1, emb3)

print(f"Distance between face1 and face2: {dist12:.4f}")
print(f"Distance between face1 and face3: {dist13:.4f}")
OutputSuccess
Important Notes
Real face embeddings come from deep learning models trained on many faces.
Lower distance means faces are more alike; higher means more different.
Choosing a good threshold depends on your application and data.
Summary
Face embedding converts a face image into a unique number list.
Comparing embeddings helps decide if two faces are the same.
Distance between embeddings measures similarity.

Practice

(1/5)
1. What is the main purpose of face embedding in face recognition systems?
easy
A. To detect faces in an image
B. To change the face image colors
C. To crop the face from the image
D. To convert a face image into a unique list of numbers

Solution

  1. Step 1: Understand face embedding

    Face embedding transforms a face image into a unique numeric vector representing its features.
  2. Step 2: Identify the purpose

    This numeric vector helps compare faces by their features, not by raw pixels.
  3. Final Answer:

    To convert a face image into a unique list of numbers -> Option D
  4. Quick Check:

    Face embedding = unique number list [OK]
Hint: Face embedding means turning face into numbers [OK]
Common Mistakes:
  • Confusing embedding with face detection
  • Thinking embedding changes image colors
  • Assuming embedding crops the face
2. Which Python code snippet correctly computes the Euclidean distance between two face embeddings emb1 and emb2 stored as lists?
easy
A. distance = sum((a - b)**2 for a, b in zip(emb1, emb2)) ** 0.5
B. distance = abs(emb1 - emb2)
C. distance = emb1 + emb2
D. distance = max(emb1, emb2)

Solution

  1. Step 1: Recall Euclidean distance formula

    Euclidean distance is the square root of sum of squared differences between corresponding elements.
  2. Step 2: Match code to formula

    distance = sum((a - b)**2 for a, b in zip(emb1, emb2)) ** 0.5 uses a generator to compute squared differences, sums them, then takes square root, matching the formula.
  3. Final Answer:

    distance = sum((a - b)**2 for a, b in zip(emb1, emb2)) ** 0.5 -> Option A
  4. Quick Check:

    Euclidean distance = sqrt(sum of squared differences) [OK]
Hint: Euclidean distance = sqrt of sum of squared differences [OK]
Common Mistakes:
  • Using abs() on lists causes error
  • Adding lists concatenates, not distance
  • Using max() does not measure distance
3. Given the following code, what is the printed output?
import numpy as np
emb1 = np.array([0.1, 0.2, 0.3])
emb2 = np.array([0.1, 0.25, 0.35])
distance = np.linalg.norm(emb1 - emb2)
print(round(distance, 3))
medium
A. 0.050
B. 0.100
C. 0.071
D. 0.150

Solution

  1. Step 1: Calculate difference vector

    emb1 - emb2 = [0.1-0.1, 0.2-0.25, 0.3-0.35] = [0, -0.05, -0.05]
  2. Step 2: Compute Euclidean norm

    Distance = sqrt(0^2 + (-0.05)^2 + (-0.05)^2) = sqrt(0 + 0.0025 + 0.0025) = sqrt(0.005) ≈ 0.0707
  3. Final Answer:

    0.071 -> Option C
  4. Quick Check:

    Distance ≈ 0.071 [OK]
Hint: Subtract vectors, then sqrt of sum squares for distance [OK]
Common Mistakes:
  • Forgetting to square differences
  • Rounding incorrectly
  • Mixing up emb1 and emb2 order
4. The following code tries to compare two face embeddings but raises an error. What is the error and how to fix it?
emb1 = [0.1, 0.2, 0.3]
emb2 = [0.1, 0.25, 0.35]
distance = (emb1 - emb2).norm()
print(distance)
medium
A. Lists do not support subtraction; convert to numpy arrays first
B. norm() is not a valid method; use length() instead
C. emb1 and emb2 must be strings, not lists
D. Missing import statement for math module

Solution

  1. Step 1: Identify the error cause

    Subtracting two Python lists causes a TypeError because lists do not support '-' operator.
  2. Step 2: Fix by converting lists to numpy arrays

    Convert emb1 and emb2 to numpy arrays to enable element-wise subtraction and use numpy.linalg.norm() for distance.
  3. Final Answer:

    Lists do not support subtraction; convert to numpy arrays first -> Option A
  4. Quick Check:

    List subtraction error fixed by numpy arrays [OK]
Hint: Use numpy arrays for math on lists [OK]
Common Mistakes:
  • Trying to use norm() on lists
  • Ignoring TypeError from list subtraction
  • Assuming norm() is built-in for lists
5. You have two face embeddings: embA = [0.3, 0.4, 0.5] and embB = [0.31, 0.39, 0.52]. You want to decide if they belong to the same person using a threshold of 0.05 on Euclidean distance. Which code correctly implements this decision?
hard
A. distance = max(abs(a - b) for a, b in zip(embA, embB)) if distance > 0.05: print('Same person') else: print('Different person')
B. distance = sum((a - b)**2 for a, b in zip(embA, embB)) ** 0.5 if distance < 0.05: print('Same person') else: print('Different person')
C. distance = sum(abs(a - b) for a, b in zip(embA, embB)) if distance < 0.05: print('Different person') else: print('Same person')
D. distance = sum((a + b)**2 for a, b in zip(embA, embB)) ** 0.5 if distance < 0.05: print('Same person') else: print('Different person')

Solution

  1. Step 1: Calculate Euclidean distance correctly

    distance = sum((a - b)**2 for a, b in zip(embA, embB)) ** 0.5 if distance < 0.05: print('Same person') else: print('Different person') computes Euclidean distance as sqrt of sum of squared differences, which is the right metric.
  2. Step 2: Apply threshold logic

    If distance is less than 0.05, print 'Same person'; else 'Different person'. This matches the problem statement.
  3. Final Answer:

    distance = sum((a - b)**2 for a, b in zip(embA, embB)) ** 0.5 if distance < 0.05: print('Same person') else: print('Different person') -> Option B
  4. Quick Check:

    Euclidean distance < threshold means same person [OK]
Hint: Use Euclidean distance and compare with threshold [OK]
Common Mistakes:
  • Using max difference instead of Euclidean distance
  • Reversing the if condition logic
  • Adding embeddings instead of subtracting
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard