2D facial landmarks
InsightFace 2D landmarks (106)
Dense 106-point face landmarks from an aligned crop.
About this model
InsightFace's 2d106det model from the buffalo_l pack. Around 4.8 MB on disk. The output is 106 (x, y) points covering eyes, brows, nose, mouth, and jawline contour.
Use the points to drive AR overlays, beauty filters, or stable face tracking. Project them back to original-image coords by inverting the 5-point alignment affine.
What you can build
- Place AR makeup or stickers on the right facial features in real time.
- Drive a face-mesh animation rig from a phone camera.
- Track lip and brow movement for an expression-driven avatar.
- Stabilize a face crop across video frames using consistent points.
Variants & downloads
Choose the build for your appModel files are being prepared.
Explore the model’s examples, source links, and integration notes while download variants are added.
Example inference
Performance
Results depend on the device, runtime, and test conditions. Each measurement keeps its own context.
M1 Max, macOS 15, ONNX Runtime 1.17 (combined attributes pass)
See original catalog hardware notes · CPU
88.5 ms
Warm inference
Reference result from the existing catalog; conversion variant and measurement date were not recorded.
Integration examples
Vision SDK integration
cpp
#include "imaged/sdk.hpp"
#include "imaged/families/face_attributes/face_attributes_family.hpp"
imaged::SDK::AI ai;
auto& config = ai.getOptions();
config.set("face_attributes.landmarks2d.model", "weights/2d106det.onnx");
imaged::SDK::FaceAttributesFamily family;
family.load(config);
imaged::SDK::Image alignedFace;
alignedFace.load("aligned_112x112.jpg");
auto result = std::get<imaged::SDK::MultiTaskResult>(family.run({&alignedFace}));
for (const auto& [name, sub] : result.tasks) {
if (name == "landmarks_2d") {
auto& dr = std::get<imaged::SDK::DetectionResult>(sub);
auto& points = dr.detections[0].keypoints; // 106 points
}
}