👤 0 users
Connecting…
Dashboard
FaceAI v4 · Video replay detection · High-accuracy ensemble
👤
0
Registered
Identified
⚖️
Compared
🔬
Analyzed
Quick Actions
v4 Capabilities
Video Replay Attack Detection🚨 NEW
Age Ensemble (3 models)±4 yr accuracy
Live Camera DetectionReal-time
Auto-Capture (smart)Active
Accessory Detection4 types
Liveness + Spoof DetectionActive
🔬 Analyze Face
Live camera · Video replay detection · Auto-capture · Full analysis
Live Camera
🔬
Start camera or upload · Results appear here
✅ Register Person
Smart live camera · Auto-captures when face is clear
Face Capture
Person Details
👤
Registration result appears here
🔍 Identify Person
Match against registered users · Auto-capture
Unknown Face
🔍
Identification result appears here
⚖️ Compare Faces
Check if two photos are the same person
Person A
VS
Person B
👥 Registered Users
Loading…
📋 Activity Log
Recent events
Events
#ActionUserSimilarityLiveTime
⚖️ Compare API Log
Every hit on /api/compare — request outcome, similarity & liveness
Total Hits
Verified
No Match
Blocked
Avg Sim %
Filter:
Loading…
🔬 Analyze API Log
Every hit on /api/analyze — age, gender, emotion, liveness
Total Hits
Live Faces
Spoof/Non-live
Male
Female
Filter:
Loading…
✅ Register API Log
Every hit on /api/register — who was enrolled and when
Total Registered
Male
Female
Loading…
🔍 Identify API Log
Every hit on /api/identify — matched and failed attempts
Total Hits
Matched
No Match
Avg Sim %
Filter:
Loading…
📱 Mobile API Log
Every hit on /api/v1/attendance/mark — check-ins, check-outs, failures
Total Hits
Success
Failed
Spoof
Avg Sim %
Status: Action:
Loading…
⚙️ Admin — Training Control
Manage continuous AI model improvement
Continuous Training
Enable Continuous Training
Loading…
Trigger Settings
Training Actions
"Run Training Now" calibrates thresholds on approved samples and upgrades dlib encodings to ArcFace. Training disabled? Use "Run Training Now" to run a one-time job anyway.
Current Thresholds (live)
ArcFace Threshold
cosine dist (1−cos)/2
dlib-128 Threshold
Euclidean distance
Recent Training Jobs
Loading…
🔎 Sample Review Queue
Approve or reject AI predictions before they enter training
Loading…
📊 Training Analytics
Model performance, dataset growth, version history
Total Samples
collected
Pending Review
awaiting approval
Approved
used in training
Training Jobs
completed
Accuracy Comparison
Previous
Accuracy
Current
Accuracy
False Positive Rate
False Negative Rate
Improvement
Dataset Growth (14 days)
Accuracy Trend (last 10 jobs)
Model Version History
VersionAccuracyFP%FN%DatasetStatusDateNotes
🗒️ Training Audit Log
Immutable record of all training system actions
🛡️ Admin Users
Manage dashboard accounts and roles
Admin Accounts
Loading…
Role Permissions
superadminAll access + manage admin accounts
adminFace ops + training + API keys + settings
operatorFace ops (register, identify…) + logs
viewerAnalyze, identify, compare — read only
🔑 API Keys
Mobile API authentication — X-API-Key header
API Keys
Loading…
Usage
AuthenticationX-API-Key: faceai_…
Base URL/api/v1/
Documentation
📖 API Documentation
REST API reference — Web + Mobile endpoints
Authentication (Mobile API)

All /api/v1/ endpoints require an API key in the request header:

X-API-Key: faceai_your_key_here

The web dashboard endpoints (/api/) require no authentication.

🌐 Web API /api/
POST/api/analyzeFull face analysis

Analyzes age, gender, emotion, accessories, liveness, and predicts aging progression.

imagestringBase64-encoded JPEG/PNG (data URL or raw)
// Request { "image": "data:image/jpeg;base64,/9j/…" } // Response { "face_detected": true, "analysis": { "age": 28, "age_range": "25–31", "gender": "Male", "gender_confidence": 88.5, "emotion": "neutral" }, "accessories": { "glasses": { "detected": false, "confidence": 12 }, "mask": {…} }, "liveness": { "is_live": true, "score": 82, "label": "Live" }, "aging_prediction": { "+5y": { "estimated_age": 33, "changes": […] } } }
POST/api/registerRegister a person

Register a new person's face. Checks for duplicates before registering.

namestringFull name (required)
imagestringBase64 face photo
notesstring?Optional notes (department, ID…)
{ "name": "Rajesh Kumar", "image": "data:image/jpeg;base64,…", "notes": "HR Dept" }
POST/api/identifyIdentify a face (1:N)

Match a face against all registered users. Returns name, similarity %, and liveness status.

// Response (matched) { "identified": true, "name": "Rajesh Kumar", "similarity": 91.2, "confidence": "High", "liveness": { "is_live": true, "score": 79 } } // Response (not found) { "identified": false, "closest_similarity": 42.1, "message": "No matching user found." }
POST/api/compareCompare two faces (1:1)

Determine if two images show the same person. No registered user needed.

image1stringBase64 — Person A
image2stringBase64 — Person B
{ "verified": true, "similarity": 88.4, "confidence": "High", "distance": 0.1160 }
POST/api/live-checkLive camera frame check

Called every ~1.5s during live camera. Returns face position, accessory detection, liveness, and readiness for capture. Returns all detected faces for multi-person detection.

{ "face_detected": true, "face_box": {"x":120,"y":80,"w":200,"h":240,"confidence":98}, "all_faces": [{…}], "faces_count": 1, "accessories": {"glasses":{"detected":false,"confidence":8}}, "ready": true, "spoof_alert": null }
GET/api/detection-settingsGet detection toggles
{ "detect_glasses":true, "detect_mask":true, "detect_cap":true, "detect_muffler":true, "detect_background":true }
POST/api/detection-settingsToggle a detection check
keystringdetect_glasses | detect_mask | detect_cap | detect_muffler | detect_background
valuestring"true" or "false"
{ "key": "detect_glasses", "value": "false" }
📱 Mobile API /api/v1/🔑 X-API-Key required
POST/api/v1/usersRegister user (mobile)
namestringFull name (required)
imagestringBase64 face photo
employee_idstring?Internal employee / member ID
departmentstring?Department or team
emailstring?Email address
POST/api/v1/face/identifyIdentify face (mobile)

ArcFace 512-D cosine matching with age-gap compensation. Returns match + liveness result.

imagestringBase64 face photo
min_similarityfloatMinimum match % to accept (default 65.0)
{ "success": true, "data": { "identified": true, "user": { "id":3, "name":"Rajesh Kumar", "employee_id":"E-101", "department":"HR" }, "similarity": 91.2, "confidence": "High", "liveness": { "is_live": true, "score": 79 } } }
POST/api/v1/face/verifyVerify against specific user
user_idintID of the user to verify against
imagestringBase64 face photo to check
POST/api/v1/attendance/markMark attendance

Face-recognition attendance — identifies person, checks liveness, writes check-in/out record. Rejects spoofing attacks when require_liveness=true.

imagestringBase64 face photo
actionstringcheck_in | check_out | auto
require_livenessboolReject photos/spoofed video (default true)
min_similarityfloatMinimum match % (default 65.0)
device_idstring?Terminal/device identifier
locationstring?Location name or GPS coords
// Success response { "success": true, "data": { "status": "success", "action": "check_in", "time_formatted": "2026-05-29 09:14:32", "user": { "name": "Rajesh Kumar", "employee_id": "E-101" }, "match": { "similarity": 91.2, "confidence": "High" }, "liveness": { "is_live": true, "score": 79 } } } // Spoof rejected { "success": false, "error": { "code": "LIVENESS_FAILED", "message": "Spoofing detected — Video replay / photo detected." } }
GET/api/v1/attendance/todayToday's summary
{ "data": { "date": "2026-05-29", "total_checkins": 42, "total_checkouts": 38, "currently_in": 4, "failed_attempts": 2 } }
GET/api/v1/attendance/reportDate range report
start_datestringYYYY-MM-DD
end_datestringYYYY-MM-DD
departmentstring?Filter by department
POST/api/v1/face/livenessAnti-spoofing check

Dedicated liveness + anti-spoofing check. Detects printed photos, mobile screen replays, moiré patterns, and flat skin texture.

{ "data": { "is_live": true, "score": 82, "label": "Live", "replay_attack": false, "confidence": "High", "breakdown": { "texture": 71, "sharpness": 65, "frequency": 88, "skin_tone": 74 } } }
📦 Response Envelope (Mobile API)
// Success { "success": true, "data": {…}, "meta": { "timestamp": "…", "request_id": "…", "api_version": "1.0" } } // Error { "success": false, "error": { "code": "ERROR_CODE", "message": "…" }, "data": null, "meta": {…} } // Paginated list { "success": true, "data": […], "pagination": { "page": 1, "limit": 20, "total": 150, "pages": 8 } }
⚙️ Detection Settings
Accessory Detection
🕶️
Glasses Detection
Block capture if glasses worn
😷
Mask Detection
Block capture if mask worn
🧢
Cap / Hat Detection
Block capture if cap worn
🧣
Muffler / Scarf Detection
Block if neck/mouth covered
Image Verification
🌅
Background Verification
Warn on cluttered backgrounds
Note: Disabled checks skip both the visual warning and the block. The face will be captured even if the item is present.