| --- |
| title: Forensic Touch Tracker |
| emoji: 🕵️ |
| colorFrom: blue |
| colorTo: red |
| sdk: gradio |
| sdk_version: "4.44.0" |
| python_version: "3.10" |
| app_file: app.py |
| pinned: false |
| --- |
| |
| # 🕵️ Forensic Touch Tracker |
|
|
| A computer-vision pipeline for **tracking human movements** and **logging touch points** so forensic investigators know exactly where to seek fingerprints. |
|
|
| ## How it works |
|
|
| | Stage | Model | What it does | |
| |-------|-------|--------------| |
| | **1. Person tracking** | SAM3 Video (`facebook/sam3`) | Detects & tracks every person with a **persistent ID** across all frames | |
| | **2. Surface segmentation** | SAM3 Video (`facebook/sam3`) | Segments forensic-relevant surfaces: *door handles, countertops, desks, walls, railings, keyboards, phones, cups, bottles, drawer handles* | |
| | **3. Body pose** | ViTPose (`usyd-community/vitpose-base-simple`) | Estimates 17 COCO keypoints per person (wrists used as coarse touch proxies) | |
| | **4. Hand landmarks** | MediaPipe Hands | Detects 21 landmarks per hand, extracting **5 fingertip locations** for precise touch localization | |
| | **5. Contact inference** | Proximity-based geometric check | When a fingertip or wrist is within `contact_threshold_px` of a segmented surface for ≥ `min_contact_frames` consecutive frames, a **TouchEvent** is logged | |
|
|
| ## Forensic output format (JSONL) |
|
|
| Each line in `forensic_touch_log.jsonl` is a structured event: |
|
|
| ```json |
| { |
| "timestamp_seconds_start": 12.47, |
| "timestamp_seconds_end": 14.12, |
| "frame_index_start": 374, |
| "frame_index_end": 423, |
| "person_id": 3, |
| "body_part": "hand_0_index_tip", |
| "touch_point": {"x": 412, "y": 298}, |
| "surface": "countertop", |
| "confidence": 0.91, |
| "num_frames": 50 |
| } |
| ``` |
|
|
| This gives forensic teams: |
| - **Who** touched it (`person_id`) |
| - **What** was touched (`surface`) |
| - **Where** on the frame (`touch_point.x`, `touch_point.y`) |
| - **When** (`timestamp_seconds_start`, `timestamp_seconds_end`, `frame_index_start`, `frame_index_end`) |
| - **How sure** (`confidence`) |
|
|
| ## Running locally |
|
|
| ```bash |
| pip install torch transformers opencv-python mediapipe gradio numpy Pillow |
| python app.py |
| ``` |
|
|
| Then open `http://localhost:7860` and upload a video. |
|
|
| > **Hardware note:** SAM3 is ~860M params. A GPU with ≥16 GB VRAM (e.g. T4, A10G) is strongly recommended. |
|
|
| ## Configuration knobs |
|
|
| | Parameter | Default | Description | |
| |-----------|---------|-------------| |
| | `max_frames` | 0 | Limit frames for quick tests (0 = process whole video) | |
| | `contact_threshold_px` | 25 | Pixel distance from fingertip to surface mask to declare a "touch" | |
| | `min_contact_frames` | 3 | Consecutive frames required before logging (reduces false positives) | |
| | `confidence_threshold` | 0.5 | Minimum detection score for person / surface | |
| | `surface_prompts` | 12 prompts | Text prompts SAM3 uses to find forensic-relevant surfaces | |
|
|
| ## Limitations & future upgrades |
|
|
| - **No direct "contact classifier"** is available on HuggingFace yet. The current pipeline uses geometric proximity, which works well but is not as precise as research models such as **InteractVLM**, **DECO**, or **HOT** (which can infer 3D body-scene contact from images). If you need research-grade contact detection, those repos can be integrated as an additional stage. |
| - **Depth / stereo** is not used; true 3D contact would benefit from a depth sensor or monocular depth estimator (e.g. Depth Anything V2). |
| - **Hand keypoint quality** depends on resolution; very small hands in wide surveillance shots may need an upsampling step. |
|
|
| ## Citation / References |
|
|
| - SAM 3: *Segment Anything with Concepts* (Meta AI, 2025) |
| - ViTPose: *ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation* (arXiv:2204.12484) |
| - RT-DETR: *DETRs Beat YOLOs on Real-time Object Detection* (arXiv:2304.08069) |
| - MediaPipe Hands (Google) |
| - InteractVLM / DECO / HOT — research-grade contact detection (not yet on HF Hub) |
|
|
| --- |
|
|
| Built for forensic evidence collection & verification. 🚔🔬 |
|
|