diff --git a/Cargo.toml b/Cargo.toml
index de34378..42060d1 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -28,6 +28,11 @@ image = { version = "0.25", features = ["jpeg", "png", "webp"] }
imageproc = "0.25"
kamadak-exif = "0.5"
+# ML models
+ort = "2.0.0-rc.11"
+dlib-face-recognition = { version = "0.3", features = ["embed-all"] }
+ndarray = "0.16"
+
# Error handling
thiserror = "1"
anyhow = "1"
diff --git a/frontend/src/lib/components/SettingsPanel.svelte b/frontend/src/lib/components/SettingsPanel.svelte
index e3f42eb..634ea43 100644
--- a/frontend/src/lib/components/SettingsPanel.svelte
+++ b/frontend/src/lib/components/SettingsPanel.svelte
@@ -23,14 +23,24 @@
min_brightness: 0.1,
max_brightness: 0.95,
},
+ head_pose: {
+ enabled: true,
+ max_yaw: 35.0,
+ max_pitch: 35.0,
+ max_roll: 25.0,
+ },
+ eye_filter: {
+ enabled: false,
+ min_ear: 0.2,
+ },
output: {
size: 512,
keep_intermediates: false,
},
alignment: {
- enabled: false,
- left_eye_pos: [0.35, 0.4],
- right_eye_pos: [0.65, 0.4],
+ enabled: true,
+ eye_y_position: 0.35,
+ inter_eye_distance: 0.30,
},
},
video: {
@@ -92,14 +102,24 @@
min_brightness: 0.1,
max_brightness: 0.95,
},
+ head_pose: {
+ enabled: true,
+ max_yaw: 35.0,
+ max_pitch: 35.0,
+ max_roll: 25.0,
+ },
+ eye_filter: {
+ enabled: false,
+ min_ear: 0.2,
+ },
output: {
size: 512,
keep_intermediates: false,
},
alignment: {
- enabled: false,
- left_eye_pos: [0.35, 0.4],
- right_eye_pos: [0.65, 0.4],
+ enabled: true,
+ eye_y_position: 0.35,
+ inter_eye_distance: 0.30,
},
},
video: {
@@ -248,6 +268,147 @@
{/if}
+
+
+
+
+
+ {#if config.processing.head_pose.enabled}
+
+
+
+
+ {config.processing.head_pose.max_yaw.toFixed(0)}°
+
+
+
+
+
+
+
+ {config.processing.head_pose.max_pitch.toFixed(0)}°
+
+
+
+
+
+
+
+ {config.processing.head_pose.max_roll.toFixed(0)}°
+
+
+ {/if}
+
+
+
+
+
+
+ {#if config.processing.eye_filter.enabled}
+
+
+
+
+ {config.processing.eye_filter.min_ear.toFixed(2)}
+
+
+ {/if}
+
+
+
+
+
+
+ {#if config.processing.alignment.enabled}
+
+
+
+
+ {(config.processing.alignment.eye_y_position * 100).toFixed(0)}%
+
+
+
+
+
+
+
+ {(config.processing.alignment.inter_eye_distance * 100).toFixed(0)}%
+
+
+ {/if}
+
{:else if activeTab === 'output'}