How to Set Up InsightFace for Face Detection and Recognition in Multi-Cam Face Tracker

To set up InsightFace for face detection and recognition, install the insightface==0.7.3 package, configure the device and thresholds in config/config.yaml, and initialize the FaceDetector class from core/face_detection.py to automatically load the buffalo_l model and prepare it for inference.

Setting up InsightFace for face detection and recognition within the Multi-Cam Face Tracker requires coordinating Python dependencies, YAML configuration, and the FaceDetector wrapper class. This guide walks through the exact steps implemented in the aarambhdevhub/multi-cam-face-tracker repository, referencing specific file paths and function signatures to ensure you can replicate the setup precisely.

Install InsightFace and Dependencies

The foundation of the setup is installing the correct version of the InsightFace library along with its deep-learning backends.

  1. Ensure you have the dependency file from the repository:

    cat requirements.txt | grep insightface
  2. Install the package. The repository pins version 0.7.3 for stability:

    pip install insightface==0.7.3

    This command also installs necessary dependencies like onnxruntime, which InsightFace uses to execute the buffalo_l model.

Configure Device and Recognition Thresholds

Before loading the model, you must specify hardware acceleration and sensitivity settings in config/config.yaml.

Select CPU or CUDA Device

The recognition.device key controls whether InsightFace runs on GPU or CPU:

  • cpu: Sets ctx_id to -1, forcing CPU inference.
  • cuda: Sets ctx_id to 0, enabling CUDA GPU acceleration.

Example configuration:

recognition:
  device: "cpu"  # Change to "cuda" for GPU

  recognition_threshold: 0.6

Set the Recognition Threshold

The recognition.recognition_threshold value (default 0.6) defines the minimum cosine similarity required to classify a detected face as a known identity. Adjust this in config.yaml to balance between false positives and missed recognitions.

Initialize the FaceDetector Class

The FaceDetector class in core/face_detection.py encapsulates all InsightFace operations. Instantiating this class triggers the model loading sequence.

Model Loading Process

When you create a FaceDetector instance, the __init__ method calls _load_model():

  1. Create FaceAnalysis object: Initializes insightface.app.FaceAnalysis with the model name buffalo_l and root path ./models.
  2. Prepare the model: Calls model.prepare() with the ctx_id derived from your config (CPU -1 or GPU 0) and a detection threshold (e.g., 0.5).

Source reference from core/face_detection.py (lines 44-53):

def _load_model(self):
    self.model = FaceAnalysis(
        name='buffalo_l',
        root='./models',
        allowed_modules=['detection', 'recognition']
    )
    ctx_id = 0 if self.config['device'] == 'cuda' else -1
    self.model.prepare(ctx_id=ctx_id, det_thresh=0.5)

Stand-Alone Initialization Script

To set up InsightFace outside the main GUI, use this pattern:

from core.face_detection import FaceDetector
import yaml

# Load configuration

with open('config/config.yaml', 'r') as f:
    config = yaml.safe_load(f)

# Initialize detector (automatically loads buffalo_l model)

detector = FaceDetector(config['recognition'])

Prepare Model Files and Known Faces

InsightFace automatically downloads the buffalo_l model files on first run, but you can pre-download them, and you must configure known faces for recognition.

Pre-Download Model Weights

To avoid runtime delays, manually trigger the download:

from insightface.app import FaceAnalysis

# This downloads buffalo_l to ./models if not present

model = FaceAnalysis(name='buffalo_l', root='./models')
model.prepare(ctx_id=-1)

Load Known Faces for Recognition

The FaceDetector.load_known_faces() method (lines 60-99 in core/face_detection.py) scans a directory of reference images, extracts embeddings using the loaded InsightFace model, and stores them for comparison.

Directory structure expected:


data/known_faces/
├── alice.jpg
├── bob.png
└── charlie.jpg

Loading code:


# After initializing detector

detector.load_known_faces('data/known_faces')

# Now detector.known_faces contains embeddings for comparison

Run Detection and Recognition

With the model loaded and known faces indexed, you can process video frames or static images.

Detect Faces in a Frame

The detect_faces() method (lines 104-122) wraps model.get() and returns structured Face objects:

import cv2

frame = cv2.imread('test_image.jpg')  # BGR format

faces = detector.detect_faces(frame)

for face in faces:
    print(f"Bounding box: {face.bbox}")
    print(f"Detection score: {face.det_score}")
    print(f"Embedding shape: {face.embedding.shape}")

Recognize Identities

The recognize_faces() method (lines 127-155) computes cosine similarity between detected embeddings and known face embeddings:

results = detector.recognize_faces(faces)

for face, known_face, similarity in results:
    if known_face:
        print(f"Recognized: {known_face.name} (similarity: {similarity:.2f})")
    else:
        print(f"Unknown face at {face.bbox}")

Summary

Setting up InsightFace for face detection and recognition in the Multi-Cam Face Tracker involves these key steps:

  • Install dependencies: Pin insightface==0.7.3 from requirements.txt to ensure compatibility with the buffalo_l model.
  • Configure hardware: Set recognition.device to "cuda" or "cpu" in config/config.yaml to control GPU acceleration via the ctx_id parameter.
  • Initialize the wrapper: Instantiate FaceDetector from core/face_detection.py to automatically load and prepare the InsightFace model with detection and recognition modules.
  • Index known faces: Use load_known_faces() to extract embeddings from reference images stored in data/known_faces for real-time recognition.
  • Process frames: Call detect_faces() and recognize_faces() to analyze video streams and match identities against the known face database.

Frequently Asked Questions

What version of InsightFace does Multi-Cam Face Tracker require?

The repository specifically requires insightface==0.7.3, as declared in requirements.txt. This version ensures compatibility with the buffalo_l model architecture and the specific API signatures used in core/face_detection.py.

Can I run face recognition on a CPU, or is a GPU mandatory?

You can run the system on CPU by setting recognition.device: "cpu" in config/config.yaml. This passes ctx_id=-1 to the InsightFace model preparation step. However, for real-time multi-camera processing, GPU acceleration via cuda (setting ctx_id=0) is strongly recommended to maintain frame rates.

Where does the system store the downloaded InsightFace model weights?

The FaceDetector._load_model() method initializes FaceAnalysis with root='./models', creating a local models directory in your project root. When model.prepare() is called, InsightFace automatically downloads the buffalo_l checkpoint files to this location if they are not already present.

How do I add a new person to the recognition database without restarting the application?

While the provided code in core/face_detection.py loads known faces at initialization via load_known_faces(), you can dynamically add faces by calling the add_known_face() method (implied by the architecture). Pass the image array, person's name, and the save directory; the method extracts the embedding using the loaded InsightFace model and appends it to the in-memory known_faces list for immediate recognition in subsequent frames.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →