Build face recognition systems with InsightFace, ArcFace, enrollment pipelines, HDBSCAN clustering, and privacy-compliant architecture. Activate on: face recognition, face enrollment, face clustering, identity verification, facial search. NOT for: general object detection (computer-vision-pipeline), emotion analysis (ai-engineer).
Scanned 9/11/2026
Install to Claude Code
npx -y skills add curiositech/windags-skills --skill face-recognition-system-builder --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Face Recognition System Builder?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/curiositech-face-recognition-system-builder)More formats (shields.io, HTML) on the badges page.
---
license: Apache-2.0
name: face-recognition-system-builder
description: "Build face recognition systems with InsightFace, ArcFace, enrollment pipelines, HDBSCAN clustering, and privacy-compliant architecture. Activate on: face recognition, face enrollment, face clustering, identity verification, facial search. NOT for: general object detection (computer-vision-pipeline), emotion analysis (ai-engineer)."
allowed-tools: Read,Write,Edit,Bash(python:*,pip:*,npm:*,npx:*)
category: AI & Machine Learning
tags:
- face-recognition
- insightface
- arcface
- biometrics
- privacy
pairs-with:
- skill: computer-vision-pipeline
reason: Face detection is a specialization of the general CV pipeline
- skill: video-frame-extraction-analysis
reason: Face recognition on video requires keyframe extraction first
- skill: data-pipeline-engineer
reason: Large-scale enrollment and batch processing need pipeline orchestration
---
# Face Recognition System Builder
Build production face recognition systems with InsightFace/ArcFace for enrollment, verification, identification, and clustering with privacy-compliant architecture.
## Decision Points
### Model Selection Decision Tree
```
Requirements Analysis:
├── Latency < 50ms per face?
│ ├── YES: Use buffalo_sc (lightweight, 0.7 accuracy)
│ └── NO: Continue to accuracy analysis
├── Accuracy > 95% required?
│ ├── YES: Use AdaFace (premium accuracy, 200ms latency)
│ └── NO: Use buffalo_l (balanced, 100ms latency)
└── Mobile/Edge deployment?
├── YES: buffalo_sc or custom quantized model
└── NO: buffalo_l or AdaFace
```
### Threshold Tuning Heuristic
| Use Case | FAR Target | FRR Target | Threshold Range | Validation |
|----------|------------|------------|-----------------|------------|
| Security/Access Control | <0.1% | 1-5% | 0.55-0.65 | Test on impostor pairs |
| Photo Organization | 2-5% | <1% | 0.35-0.45 | Test on family albums |
| Investigation/Forensics | <0.01% | 10-20% | 0.65-0.75 | Test on mugshot datasets |
| Social Media Tagging | 5-10% | <2% | 0.30-0.40 | Test on casual photos |
### Enrollment Quality Decision
```
Per photo assessment:
├── Face detected with confidence > 0.7?
│ ├── NO: Reject photo, request new one
│ └── YES: Continue
├── Face size > 80px AND < 50% of image?
│ ├── NO: Reject (too small or too close)
│ └── YES: Continue
├── Pose deviation < 30 degrees (yaw/pitch)?
│ ├── NO: Flag as "supplementary only"
│ └── YES: Mark as "primary reference"
└── Final decision:
├── 3+ primary references: Complete enrollment
├── 1-2 primary + 2+ supplementary: Proceed with warning
└── <3 total valid: Require additional photos
```
## Failure Modes
### 1. Pose/Lighting Degradation
**Detection**: Similarity scores dropping consistently below historical baseline (>10% decrease)
**Symptoms**: Good enrollments start failing verification, complaints of "system doesn't recognize me"
**Diagnosis**: Environmental conditions changed (new lighting, camera angle, seasonal changes)
**Fix**:
- Re-tune threshold based on recent data
- Add current condition photos to existing enrollments
- Implement adaptive threshold based on lighting detection
### 2. Enrollment Contamination
**Detection**: New enrollment has unusually high similarity (>0.8) to existing different identity
**Symptoms**: False positive identifications, "system thinks I'm someone else"
**Diagnosis**: Multiple people enrolled under same identity, or identity mixup during enrollment
**Fix**:
- Audit enrollment: manually review all photos for consistency
- Split contaminated enrollment into separate identities
- Re-enroll with verified identity documentation
### 3. Threshold Drift Over Time
**Detection**: FAR/FRR metrics shifting >2% from baseline over 30-day periods
**Symptoms**: Gradual increase in false accepts OR false rejects system-wide
**Diagnosis**: Population demographics changing, or model degradation on new data patterns
**Fix**:
- Weekly threshold validation on held-out test set
- Retrain similarity calibration monthly
- Implement per-demographic threshold adjustments
### 4. Quality Gate Bypass
**Detection**: Average enrollment quality score dropping while new enrollments increase
**Symptoms**: Poor recognition accuracy for recently enrolled users
**Diagnosis**: Operators bypassing quality checks to meet enrollment quotas
**Fix**:
- Implement hard technical blocks on low-quality enrollments
- Separate enrollment approval from quality assessment
- Add post-enrollment validation testing
### 5. Privacy Compliance Drift
**Detection**: Embedding storage growing faster than enrollment count, or missing consent records
**Symptoms**: Legal compliance audit failures, data retention violations
**Diagnosis**: Raw images stored without consent, or embeddings not properly deleted
**Fix**:
- Automated compliance scanning: consent tracking, embedding lifecycle
- Purge process for embeddings without valid consent
- Convert raw image storage to embedding-only with consent re-confirmation
## Worked Examples
### Example 1: Masked Face at 0.3m Distance
**Scenario**: COVID-era access control, masks required, camera mounted at door (0.3m typical distance)
**Decision Process**:
1. **Model Selection**: buffalo_l chosen (balance accuracy vs speed for real-time)
2. **Threshold Analysis**: Security use case → target FAR <0.1%, initial threshold 0.55
3. **Masked Face Testing**:
- Standard threshold: 40% FRR (too many false rejects)
- Masked-specific threshold: 0.45 → 15% FRR, 0.2% FAR (acceptable)
4. **Implementation**: Mask detection → route to specialized threshold
**Novice would miss**: Using same threshold for masked/unmasked faces, not testing on representative masked dataset
**Expert catches**: Separate calibration needed, eye region weighting more important, enrollment should include masked photos
**Final Configuration**:
```python
def adaptive_verify(embedding1, embedding2, mask_detected=False):
threshold = 0.45 if mask_detected else 0.55
similarity = np.dot(embedding1, embedding2)
return similarity > threshold
```
### Example 2: Enrollment with 1 Poor-Quality Photo
**Scenario**: Employee self-enrollment via mobile app, submits 3 photos: 1 excellent frontal, 1 slight profile, 1 blurry/dark
**Decision Process**:
1. **Quality Assessment**:
- Photo 1: 0.95 confidence, 150px face, frontal pose → PRIMARY
- Photo 2: 0.85 confidence, 120px face, 20° yaw → SUPPLEMENTARY
- Photo 3: 0.65 confidence, 90px face, poor lighting → REJECT
2. **Enrollment Decision**: Only 1 primary + 1 supplementary = insufficient for robust enrollment
3. **User Feedback**: "Please submit 1 more clear, well-lit frontal photo"
4. **Fallback**: Store partial enrollment as "pending", allow manual review override for urgent cases
**Trade-off Decision**: Reject enrollment (high quality standard) vs Accept with warning (user convenience)
**Chosen**: Reject with guidance - better user experience long-term than poor recognition accuracy
**Recovery Process**:
- Clear photo guidelines with examples
- Real-time quality feedback during capture
- Manual review queue for edge cases
- Temporary PIN-based access while enrollment pending
## Quality Gates
- [ ] Face detection confidence >0.7 AND face size >80px for all enrolled photos
- [ ] Minimum 3 photos per identity with pose variation <30° for primary references
- [ ] Similarity threshold validated on representative test set with documented FAR/FRR
- [ ] Demographic bias tested: <5% accuracy difference across age/gender/ethnicity groups
- [ ] Enrollment rejection rate <20% (too high indicates unrealistic quality standards)
- [ ] Average enrollment-to-first-successful-recognition time <24 hours
- [ ] Privacy audit: all stored embeddings have valid consent records
- [ ] Deletion capability tested: embedding removal within 24 hours of request
- [ ] Performance benchmark: <100ms average recognition latency at production scale
- [ ] Failure graceful degradation: uncertain matches flagged, not auto-decided
## NOT-FOR Boundaries
**This skill should NOT be used for**:
- General object detection or image classification → Use `computer-vision-pipeline`
- Facial emotion, expression, or attribute analysis → Use `ai-engineer`
- Face generation, deepfakes, or synthetic face creation → Use specialized generative AI skills
- Real-time video streaming face recognition → Use `video-frame-extraction-analysis` first
- Large-scale batch processing (>10K faces) → Use `data-pipeline-engineer` for orchestration
**Delegate when you encounter**:
- Performance optimization beyond model selection → `system-performance-optimizer`
- Complex database design for vector storage → `database-architect`
- Legal/compliance requirements analysis → Domain expert consultation
- Custom model training or fine-tuning → `machine-learning-engineer`Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!