From 85e510c150c43a549feb2d75f71c2b200f1816d8 Mon Sep 17 00:00:00 2001 From: mah-diaa Date: Mon, 9 Mar 2026 16:10:25 +0100 Subject: [PATCH 01/39] Add face anonymization module for photogrammetry scans --- .../head_models/47_face_anonymization.ipynb | 413 ++++++ .../head_models/48_landmark_detection.ipynb | 462 +++++++ .../head_models/49_seam_diagnostics.ipynb | 763 +++++++++++ .../photogrammetry/anonymization/__init__.py | 244 ++++ .../anonymization/anonymizer.py | 1147 +++++++++++++++++ .../anonymization/face_detector.py | 593 +++++++++ .../photogrammetry/anonymization/ui.py | 387 ++++++ .../photogrammetry/anonymization/validator.py | 412 ++++++ tests/test_anonymization.py | 587 +++++++++ 9 files changed, 5008 insertions(+) create mode 100644 examples/head_models/47_face_anonymization.ipynb create mode 100644 examples/head_models/48_landmark_detection.ipynb create mode 100644 examples/head_models/49_seam_diagnostics.ipynb create mode 100644 src/cedalion/geometry/photogrammetry/anonymization/__init__.py create mode 100644 src/cedalion/geometry/photogrammetry/anonymization/anonymizer.py create mode 100644 src/cedalion/geometry/photogrammetry/anonymization/face_detector.py create mode 100644 src/cedalion/geometry/photogrammetry/anonymization/ui.py create mode 100644 src/cedalion/geometry/photogrammetry/anonymization/validator.py create mode 100644 tests/test_anonymization.py diff --git a/examples/head_models/47_face_anonymization.ipynb b/examples/head_models/47_face_anonymization.ipynb new file mode 100644 index 00000000..d841b80a --- /dev/null +++ b/examples/head_models/47_face_anonymization.ipynb @@ -0,0 +1,413 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "cell-0", + "metadata": {}, + "source": [ + "# Face Anonymization - Sticker Detection Debug\n", + "\n", + "This notebook demonstrates the current state of sticker detection for photogrammetry scans." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "cell-1", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pyvista as pv\n", + "\n", + "import cedalion\n", + "import cedalion.io\n", + "import cedalion.plots\n", + "from cedalion import units\n", + "from cedalion.geometry.photogrammetry.processors import ColoredStickerProcessor\n", + "\n", + "pv.set_jupyter_backend(\"server\")" + ] + }, + { + "cell_type": "markdown", + "id": "cell-2", + "metadata": {}, + "source": [ + "## 1. Load and View Scan" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "cell-3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loaded: 450,295 vertices, 848,480 faces\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "7c0c4b6c0fa64f4ea72bc4beb00d1000", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Widget(value='