FaceEmbedding class

Generates face embeddings (identity vectors) from aligned face crops.

Uses the MobileFaceNet model to produce 192-dimensional embedding vectors that represent a face's identity. These embeddings can be compared using cosine similarity to determine if two faces belong to the same person.

The model expects 112×112 RGB face images as input. For best results, faces should be aligned (eyes horizontal, centered, face fills the frame).

Usage

final embedding = await FaceEmbedding.create();

// Get embedding from an aligned face crop
final vector = await embedding(alignedFaceCrop);
print('Embedding dimension: ${vector.length}'); // 192

// Compare two embeddings
final similarity = FaceEmbedding.cosineSimilarity(vector1, vector2);
if (similarity > 0.6) {
  print('Same person!');
}

// Clean up
embedding.dispose();

Integration with FaceDetector

For the full face recognition pipeline, use FaceDetector.getFaceEmbedding which handles face detection, alignment, and embedding extraction:

final detector = FaceDetector();
await detector.initialize();

final faces = await detector.detectFacesFromBytes(imageBytes);
final embedding = await detector.getFaceEmbedding(faces.first, imageBytes);

Properties

embeddingDimension → int
The dimension of the output embedding vector.
no setter
hashCode → int
The hash code for this object.
no setterinherited
inputHeight → int
The expected input height for the embedding model (112 pixels).
no setter
inputWidth → int
The expected input width for the embedding model (112 pixels).
no setter
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited

Methods

call(Mat faceCrop, {Float32List? buffer}) → Future<Float32List>
Generates a face embedding from an aligned face crop using cv.Mat.
dispose() → void
Releases all TensorFlow Lite resources held by this model.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toString() → String
A string representation of this object.
inherited

Operators

operator ==(Object other) → bool
The equality operator.
inherited

Static Methods

cosineSimilarity(Float32List a, Float32List b) → double
Computes the cosine similarity between two embedding vectors.
create({InterpreterOptions? options, PerformanceConfig? performanceConfig}) → Future<FaceEmbedding>
Creates and initializes a face embedding model instance.
createCompiledFromBuffer(Uint8List modelBytes, {Set<Accelerator> accelerators = const {Accelerator.gpu, Accelerator.cpu}, Precision precision = Precision.fp32}) → Future<FaceEmbedding>
Creates a face embedding model backed by LiteRT CompiledModel.
createFromBuffer(Uint8List modelBytes, {PerformanceConfig? performanceConfig}) → Future<FaceEmbedding>
Creates a face embedding model from pre-loaded model bytes.
euclideanDistance(Float32List a, Float32List b) → double
Computes the Euclidean (L2) distance between two embedding vectors.