Photo Age Test

Discover your biological age in 30 seconds with AI facial analysis.

Upload or Take Photo

The live camera detects micro-visual biomarkers for a deeper biological age profile.

Tip: Face a window with natural light and stay still.

Your result will appear here

Privacy Guarantee (GDPR Gold Standard): All analyses — age estimation, heart rate measurement, and eye health scoring — run 100% in your browser. Your camera feed is processed locally on your device and is never transmitted to our servers. Photos are held in temporary memory (RAM) only and instantly discarded. No images, video frames, or biometric data are saved to any disk, database, or cloud storage. Disclaimer: This tool estimates perceived facial age, resting heart rate (via rPPG), and eye health indicators based on visual features. It does not measure clinical biological age or validated health biomarkers. Results are for informational purposes only and do not constitute a medical diagnosis or health advice.

Check your Lifestyle Factors

Check after your photo test how your lifestyle choices change the way you age.

Architecture Deep Dive

Age Estimation Architecture

Dual-Stream TransformerVOLO-D1 BackboneFloat32 Inference

01The Core Problem: Context Dependency

Standard commercial age estimation tools rely on shallow CNNs trained on tight face crops. These fail in "in-the-wild" conditions because they discard the most critical signal: context.

The Solution: We utilize a dual-stream transformer architecture (MiVOLO). To solve the problem of missing context, the model mathematically models the dependency between a subject's biometric features and their global context (posture, body type, attire).

02Step 1: Isolating the Signal (Localization)

The First Challenge: Before the model can analyze context, it must deterministically pair a specific face with its specific body in a crowded image.

We begin by isolating the signal using a custom-trained object detection model that regresses bounding boxes for two classes: Face and Person.

The Association Logic

To prevent identity confusion, we solve a bipartite matching problem to pair every detected Face (Fᔹ) with its corresponding Body (Bⱌ). This is minimized via a cost matrix based on IoU (Intersection over Union) and spatial containment logic.

Signal Purification (Detach & Trim)

  • DetachObject: If a bystander's bounding box intersects with the target, the bystander's pixels are mathematically nullified (blacked out).
  • Trim: We apply a trimming operation to remove artifacts and useless empty space, ensuring maximum pixel density for the subject.

03Step 2: Preparing the Tensors (Normalization)

The Second Challenge: Neural networks require normalized, high-frequency inputs to detect micro-features like wrinkles. Standard resizing destroys this data.

We perform aspect-ratio preserving alignment (Letterbox) to prevent geometric distortion of facial features.

Mathematical Normalization

Pixel values x ∈ [0, 255] are scaled to [0, 1] and standardized to the ImageNet distribution:

xnorm =
( x / 255.0 ) - Όσ
ÎŒ=[0.485...], σ=[0.229...]

Fine-Grained Tokenization (8×8)

Standard ViTs use coarse 16×16 patches. We utilize 8×8 Patch Embeddings. This quadruples the token density, preserving high-frequency details.

z0 = [x1patchE; ...;xNpatchE] + Epos

04Step 3: Fusing the Streams (The Model Core)

The Third Challenge: We now have two separate tensor streams (Face and Body). To reconstruct the "age signal," these streams must mathematically exchange information.

This is the engine of the system. We process the streams through a VOLO-D1 backbone (27.4M parameters) which uses Outlook Attention to efficiently encode fine-level tokens.

Cross-View Feature Fusion

The Face stream (Z_face) and Body stream (Z_body) are fused via a Feature Enhancer Module. Mathematically, the Body tokens act as context to re-weight the Face tokens.

Attention(Q, K, V) =softmax
(
Q KT√dk
)
V
Why this works: If the face (Q) is blurry or occluded, the attention mechanism automatically shifts weight to the clear Body tokens (V), ensuring robust inference even under total occlusion.

05Step 4: The Final Output

The Final Challenge: The model must output a precise biological age, not a rough classification "bucket," while simultaneously determining gender.

The final fused features are projected into a unified 3-dimensional output vector handling two distinct mathematical tasks:

01

Age Regression (Scalar)

We treat age as a continuous value, optimized via Weighted MSE Loss to penalize outliers and handle class imbalance.

Ć·age ∈ ℝ+(e.g., 24.7 years)
02

Gender Classification (Logits)

A binary classifier outputting confidence scores, optimized via Binary Cross-Entropy.