From d1c0084061610b64dbdc4d5c03ab4a89341c279f Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Sun, 10 Aug 2025 17:53:32 +0200 Subject: [PATCH 01/42] Simple track dwell time counter for time in area project This is the beginning of a new project. So far, this implements the core algorithm for use on dummy data. --- project-time-in-area-analytics/README.md | 169 ++++++++++++++++++ .../config_process_threshold_filter.conf | 27 +++ .../config_process_track_duration.conf | 21 +++ .../test_files/config_input_sample_data.conf | 27 +++ .../test_files/config_output_stdout.conf | 11 ++ .../test_files/sample_data_feeder.sh | 55 ++++++ .../test_files/simple_tracks.jsonl | 10 ++ .../track_duration_calculator.star | 110 ++++++++++++ 8 files changed, 430 insertions(+) create mode 100644 project-time-in-area-analytics/README.md create mode 100644 project-time-in-area-analytics/config_process_threshold_filter.conf create mode 100644 project-time-in-area-analytics/config_process_track_duration.conf create mode 100644 project-time-in-area-analytics/test_files/config_input_sample_data.conf create mode 100644 project-time-in-area-analytics/test_files/config_output_stdout.conf create mode 100755 project-time-in-area-analytics/test_files/sample_data_feeder.sh create mode 100644 project-time-in-area-analytics/test_files/simple_tracks.jsonl create mode 100644 project-time-in-area-analytics/track_duration_calculator.star diff --git a/project-time-in-area-analytics/README.md b/project-time-in-area-analytics/README.md new file mode 100644 index 0000000..4852c0e --- /dev/null +++ b/project-time-in-area-analytics/README.md @@ -0,0 +1,169 @@ +# Time-in-Area Analytics + +This project demonstrates how to implement time-in-area analytics for Axis fisheye cameras using the [FixedIT Data Agent](https://fixedit.ai/products-data-agent/). While AXIS Object Analytics natively supports time-in-area detection for traditional cameras, fisheye cameras lack this capability. This solution bridges that gap by consuming real-time object detection metadata from fisheye cameras and implementing custom time-in-area logic using Telegraf's Starlark processor. The system uses object tracking IDs from [AXIS Scene Metadata](https://developer.axis.com/analytics/axis-scene-metadata/reference/concepts/) to track objects within a defined rectangular area, measures time in area, and triggers both warning (TODO) and alert notifications via MQTT when objects remain in the monitored zone beyond configured thresholds. + +## How It Works + +The system consumes real-time object detection data from Axis fisheye cameras and implements custom time-in-area analytics logic to track object time in area and trigger appropriate responses. + +```mermaid +flowchart TD + A["📹 Analytics Scene Description"] --> B["Filter by Area & Type (TODO)"] + X["Configuration variables"] --> B + B --> C1 + X --> C1 + + subgraph TimeLogic ["Time-in-area Logic Details"] + C1{"First time seeing
this object ID?"} + C1 -->|Yes| C2["Save first timestamp
object_id → now()"] --> C4 + C1 -->|No| C3["Get saved timestamp"] + C3 --> C4["Calculate time diff
now() - first_timestamp"] + C4 --> C5["Append time in area
to metric"] + + C2 --> CX["Persistent state"] + CX --> C3 + end + + C5 --> D["Filter for
time in area > ALERT_THRESHOLD_SECONDS"] + X --> D + + D --> E["🚨 MQTT Output
Alert messages"] + + style A fill:#e3f2fd + style B fill:#fff3e0 + style C1 fill:#e8f5e8 + style C2 fill:#fff8e1 + style C3 fill:#e8f5e8 + style C4 fill:#e8f5e8 + style C5 fill:#e8f5e8 + style CX fill:#fff8e1 + style D fill:#fff3e0 + style E fill:#ffebee +``` + +## Why Choose This Approach? + +**No C/C++ development required!** This project demonstrates how to implement advanced analytics that would typically require custom ACAP development using the [FixedIT Data Agent](https://fixedit.ai/products-data-agent/) instead. Rather than writing complex embedded C++ code for fisheye camera analytics, system integrators and IT professionals can implement sophisticated time-in-area logic using familiar configuration files and simple scripting. The solution leverages existing object detection capabilities from AXIS Object Analytics and adds the missing time-in-area functionality through data processing pipelines, making it accessible to teams without embedded development expertise. + +## Table of Contents + +TODO + +## Compatibility + +### AXIS OS Compatibility + +- **Minimum AXIS OS version**: +- **Required tools**: + +### FixedIT Data Agent Compatibility + +- **Minimum Data Agent version**: 1.0 +- **Required features**: + +## Quick Setup + +### Troubleshooting + +Enable the `Debug` option in the FixedIT Data Agent for detailed logs. Debug files will appear in the `Uploaded helper files` section (refresh page to see updates). + +**Note**: Don't leave debug enabled long-term as it creates large log files. + +## Configuration Files + +This project uses several configuration files that work together to create a time-in-area analytics pipeline: + +### config_process_track_duration.conf and track_duration_calculator.star + +Calculates time in area for each detected object using the external Starlark script `track_duration_calculator.star`. This processor: + +- Tracks first seen and last seen timestamps for each `track_id` +- Calculates `time_in_area_seconds` for each detection +- Automatically cleans up stale tracks (not seen for 60+ seconds) +- Outputs debug messages when tracks are removed + +### config_process_threshold_filter.conf + +Filters detection frames based on the configured alert threshold. Only detections where time in area (`time_in_area_seconds`) exceeds `ALERT_THRESHOLD_SECONDS` are passed through to the output stage. + +### test_files/config_output_stdout.conf + +Outputs processed metrics to stdout in JSON format for testing and debugging. + +### test_files/sample_data_feeder.sh + +Helper script that simulates camera metadata stream by reading `simple_tracks.jsonl` line by line. + +## Future Enhancements + +This example implements a minimal viable solution and can be easily extended: + +- **Warning Threshold**: Add a warning level before the main alert threshold +- **Deactivation Messages**: Send alerts when objects leave the area after being alerted +- **Time-of-Day Rules**: Apply different thresholds based on time of day +- **Multiple Areas**: Monitor multiple rectangular areas with different configurations +- **Advanced Shapes**: Implement polygon-based areas instead of simple rectangles + +## Local Testing on Host + +You can test the processing logic locally using Telegraf before deploying to your Axis device. + +### Prerequisites + +- Install Telegraf on your development machine +- Local MQTT broker (mosquitto) for testing output +- Sample object detection JSON data for testing + +### Host Testing Limitations + +**Works on Host:** + +- Starlark processor logic testing with sample data +- MQTT output configuration validation +- Alert threshold configuration testing + +**Only works in the Axis Device:** + +- Real object detection metadata consumption (camera-specific message broker) + +### Test Commands + +#### Test Time in Area Calculation Only + +Test the time in area calculator without threshold filtering to see all detections with their calculated time in area: + +```bash +# Set up test environment +export HELPER_FILES_DIR="$(pwd)" +export SAMPLE_FILE="test_files/simple_tracks.jsonl" + +# Test time in area calculation only (shows all detections + debug messages) +telegraf --config test_files/config_input_sample_data.conf \ + --config config_process_track_duration.conf \ + --config test_files/config_output_stdout.conf \ + --once +``` + +**Expected Output:** +All detections with `time_in_area_seconds` field plus debug messages when stale tracks are cleaned up. + +#### Test Complete Alert Pipeline + +Test the complete alert generation pipeline with threshold filtering: + +```bash +# Set up test environment +export HELPER_FILES_DIR="$(pwd)" +export SAMPLE_FILE="test_files/simple_tracks.jsonl" +export ALERT_THRESHOLD_SECONDS="2" # Alert threshold in seconds + +# Test time in area calculation + threshold filtering +telegraf --config test_files/config_input_sample_data.conf \ + --config config_process_track_duration.conf \ + --config config_process_threshold_filter.conf \ + --config test_files/config_output_stdout.conf \ + --once +``` + +**Expected Output:** +Only detections with time in area (`time_in_area_seconds`) > `ALERT_THRESHOLD_SECONDS` plus debug messages for track cleanup. diff --git a/project-time-in-area-analytics/config_process_threshold_filter.conf b/project-time-in-area-analytics/config_process_threshold_filter.conf new file mode 100644 index 0000000..7297ddb --- /dev/null +++ b/project-time-in-area-analytics/config_process_threshold_filter.conf @@ -0,0 +1,27 @@ +# Threshold Filter Processor +# +# This processor filters detection frames based on time in area threshold. +# Only detections that exceed the configured threshold are passed through. +# +# Input: detection_frame metrics with time_in_area_seconds field +# Output: Only detection_frame metrics where time_in_area_seconds > ALERT_THRESHOLD_SECONDS +# +# Environment Variables: +# - ALERT_THRESHOLD_SECONDS: Minimum time in area in seconds to trigger alerts (required) + +[[processors.starlark]] + # Process only detection frames for threshold filtering + namepass = ["detection_frame"] + + source = ''' +def apply(metric): + # Get time in area from the metric + time_in_area = metric.fields.get("time_in_area_seconds", 0) + + # Only return metrics that exceed the threshold + if time_in_area > ${ALERT_THRESHOLD_SECONDS}: + return metric + + # Track doesn't exceed threshold - don't output + return None +''' diff --git a/project-time-in-area-analytics/config_process_track_duration.conf b/project-time-in-area-analytics/config_process_track_duration.conf new file mode 100644 index 0000000..30610b2 --- /dev/null +++ b/project-time-in-area-analytics/config_process_track_duration.conf @@ -0,0 +1,21 @@ +# Track Duration Calculator Processor +# +# This processor calculates time in area for object tracking and manages state cleanup. +# It processes detection frames and outputs: +# 1. Original detection metrics with added time_in_area_seconds field +# 2. Debug metrics when stale tracks are cleaned up +# +# Input: detection_frame metrics with track_id, timestamp, coordinates +# Output: Same metrics with time_in_area_seconds field + optional debug metrics +# +# State Management: +# - Tracks first_seen_seconds and last_seen_seconds for each track_id +# - Automatically cleans up tracks not seen for 60+ seconds +# - Outputs debug messages when tracks are removed + +[[processors.starlark]] + # Only process detection frames for duration calculation + namepass = ["detection_frame"] + + # Track duration calculator - adds dwell_time_seconds field and debug messages + script = "${HELPER_FILES_DIR}/track_duration_calculator.star" diff --git a/project-time-in-area-analytics/test_files/config_input_sample_data.conf b/project-time-in-area-analytics/test_files/config_input_sample_data.conf new file mode 100644 index 0000000..89560e7 --- /dev/null +++ b/project-time-in-area-analytics/test_files/config_input_sample_data.conf @@ -0,0 +1,27 @@ +# Sample Detection Data Input Configuration for Testing +# +# This configuration uses Telegraf's execd input plugin to simulate camera +# metadata stream for testing the time-in-area analytics pipeline. +# +# Required Environment Variables: +# - HELPER_FILES_DIR: Directory containing project files +# - SAMPLE_FILE: Path to sample data file relative to HELPER_FILES_DIR +# +# Key Features: +# - Reads sample detection data from local JSON file +# - Provides identical data structure to real camera metadata +# - Enables testing of processor logic independently +# - Allows development and testing without camera hardware + +[[inputs.execd]] + # Command to execute - outputs JSON lines from sample file + command = ["${HELPER_FILES_DIR}/test_files/sample_data_feeder.sh"] + + # Parse each line as JSON + data_format = "json" + + # Override metric name for clarity + name_override = "detection_frame" + + # String fields that should be preserved as strings during JSON parsing + json_string_fields = ["timestamp", "track_id", "object_type"] diff --git a/project-time-in-area-analytics/test_files/config_output_stdout.conf b/project-time-in-area-analytics/test_files/config_output_stdout.conf new file mode 100644 index 0000000..ffbe648 --- /dev/null +++ b/project-time-in-area-analytics/test_files/config_output_stdout.conf @@ -0,0 +1,11 @@ +# Standard Output Configuration for Testing +# +# This output configuration writes processed metrics to stdout in JSON format. +# Useful for testing and debugging processor logic. + +[[outputs.file]] + # Output to stdout + files = ["stdout"] + + # Use JSON format for readable output + data_format = "json" \ No newline at end of file diff --git a/project-time-in-area-analytics/test_files/sample_data_feeder.sh b/project-time-in-area-analytics/test_files/sample_data_feeder.sh new file mode 100755 index 0000000..7dbe7a0 --- /dev/null +++ b/project-time-in-area-analytics/test_files/sample_data_feeder.sh @@ -0,0 +1,55 @@ +#!/bin/sh + +# Sample Data Feeder Script +# +# This script simulates the axis_metadata_consumer.sh behavior for testing. +# It reads the sample JSON file and outputs one detection per message, +# thus making it easier for the json parser in the execd input plugin. +# +# Usage: Called by Telegraf execd input, just like axis_metadata_consumer.sh + +# Check if sample file is specified +if [ -z "$SAMPLE_FILE" ]; then + echo "ERROR: SAMPLE_FILE environment variable not set" >&2 + exit 1 +fi + +# Check if sample file exists +if [ ! -f "$HELPER_FILES_DIR/$SAMPLE_FILE" ]; then + echo "ERROR: Sample file not found: $HELPER_FILES_DIR/$SAMPLE_FILE" >&2 + exit 1 +fi + +# Check if jq is available +if ! command -v jq >/dev/null 2>&1; then + echo "ERROR: jq is required but not available" >&2 + exit 1 +fi + +# Process each frame and output one detection per message +while IFS= read -r line; do + # Extract frame info + frame=$(echo "$line" | jq -r '.frame') + timestamp=$(echo "$line" | jq -r '.timestamp') + + # Get number of detections + detection_count=$(echo "$line" | jq '.detections | length') + + # Only output messages if there are detections + if [ "$detection_count" -gt 0 ]; then + # Output each detection as a separate message + i=0 + while [ $i -lt "$detection_count" ]; do + detection=$(echo "$line" | jq ".detections[$i]") + track_id=$(echo "$detection" | jq -r '.track_id') + object_type=$(echo "$detection" | jq -r '.object_type') + x=$(echo "$detection" | jq -r '.x') + y=$(echo "$detection" | jq -r '.y') + + # Output individual detection with frame context + echo "{\"frame\": $frame, \"timestamp\": \"$timestamp\", \"track_id\": \"$track_id\", \"object_type\": \"$object_type\", \"x\": $x, \"y\": $y}" + + i=$((i + 1)) + done + fi +done < "$HELPER_FILES_DIR/$SAMPLE_FILE" diff --git a/project-time-in-area-analytics/test_files/simple_tracks.jsonl b/project-time-in-area-analytics/test_files/simple_tracks.jsonl new file mode 100644 index 0000000..17d9139 --- /dev/null +++ b/project-time-in-area-analytics/test_files/simple_tracks.jsonl @@ -0,0 +1,10 @@ +{"frame": 1, "timestamp": "2024-01-15T10:00:00Z", "detections": []} +{"frame": 2, "timestamp": "2024-01-15T10:00:01Z", "detections": [{"track_id": "track_001", "object_type": "human", "x": 250, "y": 200}]} +{"frame": 3, "timestamp": "2024-01-15T10:00:02Z", "detections": [{"track_id": "track_001", "object_type": "human", "x": 260, "y": 210}]} +{"frame": 4, "timestamp": "2024-01-15T10:00:03Z", "detections": [{"track_id": "track_001", "object_type": "human", "x": 270, "y": 220}, {"track_id": "track_002", "object_type": "human", "x": 150, "y": 180}]} +{"frame": 5, "timestamp": "2024-01-15T10:00:04Z", "detections": [{"track_id": "track_001", "object_type": "human", "x": 280, "y": 230}, {"track_id": "track_002", "object_type": "human", "x": 160, "y": 190}]} +{"frame": 6, "timestamp": "2024-01-15T10:00:05Z", "detections": [{"track_id": "track_002", "object_type": "human", "x": 170, "y": 200}]} +{"frame": 7, "timestamp": "2024-01-15T10:01:10Z", "detections": [{"track_id": "track_003", "object_type": "vehicle", "x": 300, "y": 250}]} +{"frame": 8, "timestamp": "2024-01-15T10:01:11Z", "detections": [{"track_id": "track_003", "object_type": "vehicle", "x": 310, "y": 260}]} +{"frame": 9, "timestamp": "2024-01-15T10:01:12Z", "detections": [{"track_id": "track_003", "object_type": "vehicle", "x": 320, "y": 270}, {"track_id": "track_001", "object_type": "human", "x": 290, "y": 240}]} +{"frame": 10, "timestamp": "2024-01-15T10:01:13Z", "detections": [{"track_id": "track_004", "object_type": "human", "x": 400, "y": 300}]} diff --git a/project-time-in-area-analytics/track_duration_calculator.star b/project-time-in-area-analytics/track_duration_calculator.star new file mode 100644 index 0000000..86cdb54 --- /dev/null +++ b/project-time-in-area-analytics/track_duration_calculator.star @@ -0,0 +1,110 @@ +load("time.star", "time") + +def parse_timestamp_to_seconds(timestamp_str): + """Parse ISO 8601 timestamp string to Unix seconds + + Note: Starlark uses 32-bit signed integers (max: 2,147,483,647). + Unix timestamps will overflow after year 2038. + """ + time_format = "2006-01-02T15:04:05Z" + time_obj = time.parse_time(timestamp_str, format=time_format) + return int(time_obj.unix) + +def get_time_in_area_seconds(track_id, current_seconds, track_state): + """Get the time in area for a track ID and update its last seen time + + Args: + track_id: The object tracking ID + current_seconds: Current timestamp in Unix seconds + track_state: State dictionary for tracking objects + + Returns: + Time in area in seconds for this track ID + """ + if track_id not in track_state: + # First time seeing this track ID - initialize with current timestamp in seconds + track_state[track_id] = { + "first_seen_seconds": current_seconds, + "last_seen_seconds": current_seconds + } + return 0 # Time in area is 0 on first detection + + # Update last seen time + track_state[track_id]["last_seen_seconds"] = current_seconds + + # Calculate time in area - simple subtraction since both are in seconds + first_seen_seconds = track_state[track_id]["first_seen_seconds"] + time_in_area = current_seconds - first_seen_seconds + return time_in_area + +def cleanup_stale_tracks(current_seconds, track_state, max_stale_seconds): + """Remove tracks that haven't been seen for too long + + Args: + current_seconds: Current timestamp in Unix seconds + track_state: State dictionary for tracking objects + max_stale_seconds: Maximum time since last seen before removing track + + Returns: + List of debug metrics for removed tracks + """ + # Find tracks to remove (can't modify dict while iterating) + tracks_to_remove = [] + debug_metrics = [] + + for track_id, track_data in track_state.items(): + last_seen = track_data["last_seen_seconds"] + time_since_seen = current_seconds - last_seen + if time_since_seen > max_stale_seconds: + tracks_to_remove.append(track_id) + + # Create debug metric for this removal + debug_metric = Metric("track_cleanup_debug") + debug_metric.fields["track_id"] = track_id + debug_metric.fields["time_since_seen"] = time_since_seen + debug_metric.fields["max_stale_seconds"] = max_stale_seconds + debug_metric.fields["action"] = "removed_stale_track" + debug_metrics.append(debug_metric) + + # Remove stale tracks + for track_id in tracks_to_remove: + track_state.pop(track_id) + + return debug_metrics + +def apply(metric): + # Get track_id and timestamp from the metric + track_id = metric.fields.get("track_id", "") + timestamp = metric.fields.get("timestamp", "") + + # Skip messages without track_id + if track_id == "" or timestamp == "": + return metric + + # Parse timestamp to seconds + current_seconds = parse_timestamp_to_seconds(timestamp) + + # Initialize track state subdict if it doesn't exist + if "track_state" not in state: + state["track_state"] = {} + + # Clean up stale tracks (not seen for 60 seconds) and get debug metrics + debug_metrics = cleanup_stale_tracks(current_seconds, state["track_state"], 60) + + # Get the time in area for this track ID + time_in_area = get_time_in_area_seconds(track_id, current_seconds, state["track_state"]) + + # Add the time in area to the metric (always add it, filtering happens in next processor) + metric.fields["time_in_area_seconds"] = time_in_area + + # Prepare results list + results = [] + + # Add debug metrics first (if any) + results.extend(debug_metrics) + + # Always add the main metric with dwell time + results.append(metric) + + # Return list of metrics + return results From 2ae7a4a1c4ff8e77773f9ddef93a0462e10bbdad Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Thu, 14 Aug 2025 11:17:34 +0200 Subject: [PATCH 02/42] Add real data collection and visualization scripts --- .../actions/python-quality-check/action.yml | 79 ++ ...-time-in-area-analytics-python-quality.yml | 28 + .../project-timelapse-s3-python-quality.yml | 47 +- .../.images/track-heatmap-120s.png | Bin 0 -> 108491 bytes .../.images/track-heatmap-simple.png | Bin 0 -> 41849 bytes project-time-in-area-analytics/README.md | 151 +++- .../test_files/real_device_data.jsonl | 285 +++++++ .../test_files/sample_data_feeder.sh | 33 +- .../test_files/simple_tracks.jsonl | 21 +- .../test_scripts/README.md | 154 ++++ .../test_scripts/record_real_data.py | 355 +++++++++ .../test_scripts/requirements.txt | 4 + .../test_scripts/track_heatmap_viewer.py | 697 ++++++++++++++++++ 13 files changed, 1785 insertions(+), 69 deletions(-) create mode 100644 .github/actions/python-quality-check/action.yml create mode 100644 .github/workflows/project-time-in-area-analytics-python-quality.yml create mode 100644 project-time-in-area-analytics/.images/track-heatmap-120s.png create mode 100644 project-time-in-area-analytics/.images/track-heatmap-simple.png create mode 100644 project-time-in-area-analytics/test_files/real_device_data.jsonl create mode 100644 project-time-in-area-analytics/test_scripts/README.md create mode 100644 project-time-in-area-analytics/test_scripts/record_real_data.py create mode 100644 project-time-in-area-analytics/test_scripts/requirements.txt create mode 100755 project-time-in-area-analytics/test_scripts/track_heatmap_viewer.py diff --git a/.github/actions/python-quality-check/action.yml b/.github/actions/python-quality-check/action.yml new file mode 100644 index 0000000..d6999dd --- /dev/null +++ b/.github/actions/python-quality-check/action.yml @@ -0,0 +1,79 @@ +name: "Python Quality Check" +description: "Run Python linting and type checking tools" +inputs: + working-directory: + description: "Working directory for the Python project" + required: true + additional-types: + description: "Additional type packages to install (space-separated)" + required: false + default: "" + pylint-options: + description: "Additional options for pylint" + required: false + default: "" + +runs: + using: "composite" + steps: + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: "3.13" + + - name: Install test dependencies + shell: bash + run: | + python -m pip install --upgrade pip + pip install \ + black==25.1.0 \ + flake8==7.3.0 \ + isort==6.0.1 \ + mypy==1.17.1 \ + pylint==3.3.8 \ + types-click==7.1.8 \ + ${{ inputs.additional-types }} + + - name: Install project requirements + shell: bash + working-directory: ${{ inputs.working-directory }} + run: | + pip install -r requirements.txt + + - name: Run flake8 + shell: bash + working-directory: ${{ inputs.working-directory }} + run: | + # E203: whitespace before ':' (conflicts with black) + # W503: line break before binary operator (conflicts with black) + flake8 . --max-line-length=100 --extend-ignore=E203,W503 + + - name: Run mypy + shell: bash + working-directory: ${{ inputs.working-directory }} + run: | + mypy . + + - name: Run pylint + shell: bash + working-directory: ${{ inputs.working-directory }} + run: | + pylint *.py ${{ inputs.pylint-options }} + + - name: Run isort + shell: bash + working-directory: ${{ inputs.working-directory }} + run: | + isort --check-only --diff . + + - name: Run black + shell: bash + working-directory: ${{ inputs.working-directory }} + run: | + black --check --diff . + + - name: Run doctests + shell: bash + working-directory: ${{ inputs.working-directory }} + run: | + python -m doctest *.py -v diff --git a/.github/workflows/project-time-in-area-analytics-python-quality.yml b/.github/workflows/project-time-in-area-analytics-python-quality.yml new file mode 100644 index 0000000..52374ab --- /dev/null +++ b/.github/workflows/project-time-in-area-analytics-python-quality.yml @@ -0,0 +1,28 @@ +name: Python Code Quality Check for the time-in-area-analytics project + +on: + push: + paths: + - "project-time-in-area-analytics/test_scripts/**" + pull_request: + paths: + - "project-time-in-area-analytics/test_scripts/**" + +permissions: + contents: read + +jobs: + python-quality: + runs-on: ubuntu-latest + defaults: + run: + working-directory: project-time-in-area-analytics/test_scripts + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Run Python Quality Check + uses: ./.github/actions/python-quality-check + with: + working-directory: project-time-in-area-analytics/test_scripts diff --git a/.github/workflows/project-timelapse-s3-python-quality.yml b/.github/workflows/project-timelapse-s3-python-quality.yml index 287c8de..58ff7e3 100644 --- a/.github/workflows/project-timelapse-s3-python-quality.yml +++ b/.github/workflows/project-timelapse-s3-python-quality.yml @@ -22,47 +22,10 @@ jobs: - name: Checkout code uses: actions/checkout@v4 - - name: Setup Python - uses: actions/setup-python@v5 + - name: Run Python Quality Check + uses: ./.github/actions/python-quality-check with: - python-version: "3.13" - - - name: Install test dependencies - run: | - python -m pip install --upgrade pip - pip install \ - black==25.1.0 \ - flake8==7.3.0 \ - isort==6.0.1 \ - mypy==1.17.1 \ - pylint==3.3.7 \ - types-tqdm==4.67.0.20250516 \ - types-boto3==1.40.4 \ - types-Pillow==10.2.0.20240822 - - - name: Install project requirements - run: | - pip install -r requirements.txt - - - name: Run flake8 - run: | - # E203: whitespace before ':' (conflicts with black) - # W503: line break before binary operator (conflicts with black) - flake8 . --max-line-length=100 --extend-ignore=E203,W503 - - - name: Run mypy - run: | - mypy . - - - name: Run pylint - run: | + working-directory: project-timelapse-s3/test_scripts + additional-types: types-tqdm==4.67.0.20250516 types-boto3==1.40.4 types-Pillow==10.2.0.20240822 # Disable E1101 for OpenCV false positives (no-member errors for cv2) - pylint *.py --disable=E1101 - - - name: Run isort - run: | - isort --check-only --diff . - - - name: Run black - run: | - black --check --diff . + pylint-options: --disable=E1101 diff --git a/project-time-in-area-analytics/.images/track-heatmap-120s.png b/project-time-in-area-analytics/.images/track-heatmap-120s.png new file mode 100644 index 0000000000000000000000000000000000000000..275c00f692b2c9c0d7b11ab1b5d424b2e7248193 GIT binary patch literal 108491 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�c-KvGT>|8UjyktU{2yv%PdpN<+n3hzaO~I@IfF#Vg>eVjkm)Vg4D$#42 z9lgteCSe0qSXB=r1tn&dV_=qgVP|cyeS)$PL40bPn)`}-XrqXc9 zw~9=LyvO}wW)ygh2U4dEw*`BCtkqEvem3Qa6y*j>3M?5=@EobLG;hKwic0m+6kuCU zaofsk)fCRH*DiyjmNNkpu+#Kc{F213(TGSu7$<{(?BppAN|NCu)I<^(B&wJ~LFAWq z2H%jNVzQ9Va9OwU?26$i&@0sru{3|2hh!|cj1N{ z-DhyJ9lK0qaDd89L(JW<-W~aF)P`jj)i}DMukxzlClhx6-{@jKIU;tox3KRQ)Y;d$ z;E;B^TMmcX+aJ{z<6T1Jt>lZzO_n@)X_8@ISrYH;ILq;rtNA}~D&AafRXI?i^=^m! zbl)sygt`6Vl_v!Dr1Z}2I0!D4NCeZdP-*n?&7XT{w#yGcqB6ugzMofc;vYduQK42+^e zmY_rwkZ#^PsGg;U5yd~~5j9vsr?%<`qQT2RO+QH6(|4VBLMjKF-$clTx%J@i3)PlT zTBl}ypb#l6E+$)-t*6>^vRFq1y>)L{&;tV7=Y? z6?6K*cVd7~a8|o=q4W@;NoKiHI4` z8Vs=ZQ=yy^6v+`TiU3LDV2Xx)iDDRJ)Mr!SebWG``w*+0R0C+ zEXD==fW+`>hpjZzsLH|e8g8#eD7gxU6P+MmO7ybK$9O7(_~<^@=D93eb_EIj)kS}{ zc`NgnsjPy%Kum%&4f_B5Gn`yRo^u~X`uc%NNQ?tw7nTjjTtEGVjoce{PbOZY)ABf$ zf!A5)kw`XLN^nvNvUBUu;eW2kn4U|QFPDVM@JAO%+hRvvM9RQ9`}EHj=A(P1=8zG# zNUUTYpOh2anVZO&OYn&#;_TshmZ?V$k3{iE(GN;?7zcwg00oIe)WN8q)M>-4td!uY z$=WnLa558N0>!K+)jjOq!BKv<*j$CPZWjH<5gm!p!aO<$hHu{ol$Gad{qe(oM^5gD zpX$Z<*=!A<#h(MsBAzG?tyJ(SFQP9wOH~eX=}t%^Vz*c7h*N-nmbg66SmVl9{e|Gz zu*Zb0T=-T(OY}@p3WxyP32~Yo${3)&)X(em-b0|JWX>o9P*PcmvxnJ}!qQ7r1lReD z+mb(5fC4LY=X-V)nVYui$}p%G&J_(CYxY`vh->c>yMxm3DPVOf+@AT16~a-?&&=u6 z2&HGNfqIQ*W&OtoK=O>!nfZpj223&?K3p_s*j<-~GhhvOMqnoNGDrDvqO7(a@MEL&(T3 zTj>~5O`rmqhK^<9CnoBDDdbm$VbPjoCT(wDVzZ+&-mou5*f)GR+OB85!^IQZXDo`J z_PTS=)JBFA8--yOvz=nMDTzatf?Ga5nH@TXSAR$X^&;~^NSYcl6Af*E%ceh2e z04Y5eHM}xFbY|3tJ|I@G#xgHYG-f?=DXdwL1J{GbSnf1ZzjMr!?GVH-J7I=QLmj5d z^Cz}X=F18!%EPslYyGbTnAgqQA(#U+A4iX>O3X_U&m#V=);y&m?w~AnVkl$7Z%W}j z#ZB7-X^Y!;3)J|7!ffVY0!@(fEU4X_1RrTjNEt{yKCS4(mtFApUXEJ%j6-lV=@d@fHUl2GXI~0mUW(tu_ibkX- ziX1xt^>P~hE#BTgnhJcuGbVKH6fA8V@_cbKQ1>zQ>($fth!ygfUW0-+IXsT=N3ny@ zEk0wLEaxVA_T;}O`I%UgpOwajC?A8=nTmBu$!E{@CbD3)`VPb-`47nk3LN)GgcvxA z%xIFN710XWcCVUj#RwLe9|TwHBRoru8j{b*eZG1qLWyYmDR)FrKGez5Z~?5FO2ndw z1pyPKMvx>iMnv_KI40d79|mNgx6l5%R;`NAH|meFvet>S2oa*)riI7~;usbXp0bBb zO8?5r74isxe~tz6^sIjd6Fy2c1~(;sNY>+i!ZO@yY1IvV4){F#?szi5#N^1@Z{4d` zUV5nyCgM|@<7iE43@8EJBMk*xYR}{O)BN%N>wI;`tGJx$y6hAJ+wg#UsRi6sspAU2R6)H~34z>~O z=Yc@Mb|_yo4A9NeU8SRjK>HRX6E=8Xv$N*nNQA=@ku?jEmPS+stTZj(+i-^mq@71% z!ci@wK5pR;F{_!Wwp=_|uMgDSu}cr6LgaTr(c@RJ;7mVfGXhP>#axz?!mo<(dM zvyS5%+NqzF2XFr4Q|wbQ=B)op-v3D(W7$XA7@anMo@sXFv5y8Dy7TMAbK%l2T$1T4M|X9!Zl)(@1OcnpS(jcXn>($AmI>!M8;=F0LY$;!%u5 ziF?DrRcOv9aH0q(Olg>h`S)OF6Lvw`^gtm`I4h)H+uFTk2gK5@CU<^^Y7 z8WYYKb0`DyKmtZciIcq^2N^@S%frrAV?Ql--6*TXSxrivBV)MxNs|PpFDIw?tOhxN zZp=*fJw{lo#0?9qFP-{TGhz+Jkpl7{lV)ZkfYKO|ggHn;!Zbc3WigO{(e%TvAv>T{ zk373uGUnZqxJatde@t_myHz~eYGE&dB3^3+#il$=p&&0l9sO=Z)w`GOB{J5A&wGn$ zMmnalIi?5gcDTla=oO5?+yKg2m<&m8(g9exxpz!kQ=zcZ=B6Rpev+N-40oM_Y!k)+xqYMzy9TYCu*|@bH zQSVAKC3^w=qWln?fM%}sF?dz+3&|Zr4JT?^Q!~p})g<_1r_}$ridNcn^(|Wg;j6l$ z&}#CgasZN`%h@y#3*+0HjruqAw#= z2&aW$SK|3t?IEExA}|!s$g{nxTL`5uWBO!yE9D*JS&+HSvhPEM$n^8{!cT?!FUxRY zpO8+FPbE$y5lH}+X{|fRgV)M$#aM|O7JiRhygZyXA4*S-3V8t0VIvN67Ad7hZaT3Z z;zJXh88CMaicmR_(!l7fFK$bk%vc2xAAq4s9vlbnnYd5$OMJ^}fBUVZ2fN4G5JMut zr4OA>MH_0mV5qG>^Jj z4;HYGU|2!eUof$^p*=H=IjwkR`eAt3)#N`+zwo_jXe<;2TaW0q=yd@5qi=Yt?@f=U zq1b37ZISQ_qv3dg4zZ?%>XSqs3^DBt4AQol5WYyRMaX3~_2B0cwxnNL$#$S=AY)!o zc1To;sH>6c*q(4uzkI>PU1SNMZ<-4>E7H!+A>{UvDk7s_C8ixRIe`C!7)W5tLg|TCgDq1s%N(X*jkP6%*Cys0=Yey=BHY?Y^x}{_yHN> zDZ~v=(oh*s^>lRjinog(R|aCuie%dqjSd~o>K!2CqbOE4QC@d;CKy%NaY5n{Mam<^ zrID0vv?Ut3pl_4;cf)3WT!mDsL0y@n^MR8bJL$gqv{iJt_ByjM*Ch=$eV9HI0=)yY zlM?Rhv})CkGn#CGxZ6Uo%Fru$DK-mXP{sQUX%ib1LLjDK)C9w9DbB0E7nMN@y_x8l zI6#7K7g z3_2M!sL}HGLZF}+odYWqXO2ostaNAv8ZL`0enWh0HzcP=Zg)`M=_NDH?GWt+S7L}b zIh@~PN0w9j_c|>LI{C5+xK^4YlG}+YTZ)e8clis<>R;){IWK8$*&Js3t*U*Eye__F zH08?ZXm{^}eQ*YU!jITAmZ2nzA71zpP15aYl~q9#>Jiw;o@__>*Z!oAGI(9-A&b~00vvfw7yemoFny~gt4B(|6KAYkPncESb_l4>*9On)P7F$qv9N&OS&%)pv=HbpXsB1!>k=oPG#ClmXd1TIV;RS z&&sugpnf1dt&!&FKR~MHuCQVvBUI8v2*&;Kk7$SGJd&vrGQbV1kqDQu$=Rg_0Alc~ z^pK7j1=S`@j=0DLG<&h?u6=aim+(dVkw0wdaUU}se$&I3-U1a{6;6gXJsYTI1QqsH zIVK&{hr1$oP&LcezgDOIe`0^H&Srdw7i4o%XCJNkTI~{RmpSi4n$bF7toMV%x@RPG z+u1es-%u0>xp}2}%!w=eLqFAjzQgpCV3RkC4!BmPP5$pSRNWBn2;#8A@(0LmxkGx@ zqGnc(PiSQjC1+6rtJD-Nft*X+vsJ$e`RL?tVIHwB_g@r}WFi5Faz zG|*|&rip0jed+1w!z{DsDf>Mjjy&;TTswppLo)q9Xv5fjY&v2fUIz5iWHqcvXS30x z_dr<6#3}h90B5PvHMk_Tt zSvgr?Diso!6T}R)n22X37@TjqnGOYpKbUP`0=k@=@)BZ+z>Gfzx>v}0v@!oM;>gJI zl~}|0P9IgV zeZ>~K49YHIgK;dIvJ)u}TsKaogX4kmz;c977q5j*8%Q5%*(4`ia^k859~sa(O6Rw_ z7P_;PvPgg)%(dtmb|c2NC)F1t10AHOmz)Y84Wz-4j2&VPfBfhb~?XPHFhO9lBp858ci!jtW3>i6^JhiQ?e*Bn!DY9S|#pRcwkjXpml;8 z+>Z%sGHOK&=p$I5&7w+}Ln(rvXB@eaI)|zC395JM(UTAdx(w_|H+PdFJP~BGFffyr z0^Roeb)SKX>AbsRzD0cPf%IkQqBf7&AeYe1vUr7an}yc!5|z_XQcQBjcrVMkg$ z7Y&eR1pqlvcK>VZvS=5jsv*v@zG`|(Fp_;fUa$QQ# zxs+Cel78CIdml!vL+(}YS*2Uv7x`87=>1OJk}0Zu1}gE=+t;T4i@Nj(8;V3T>0VpC zY87T9<3&w0nU7HD#BIWr=N2o*M%gxKZ*n^MZrr#qw)%XMv;S{e4rYz0Z6uW$>ogPF z$4~fRI5`;KEY{1~V=|Jg(-D$Q5qj%iW>eJ0*kPYmR_XOY&kN2st@11J$b&s-IQ^3Z zrHNVQ&ttpwIb+yQx{pcz;e~c%EYe%0%rEH7psk}HBH-gxv4Rml3&FyR)273RudJUv zp<4U*m%!Rj(Y#MPwlmM;a)Fvs`G316>P4@3-#k=B(=ttCG&hYyMg|Ossww@&KJ0i< zou?rOWtPP12=S4^LyPmDTnKtpGZ@}iJ8aea(t~oe!RRni9*U_z=3q*Cq}b|^{k}Gc zcuHa>2iH2!T$D3VsrG5&7Ly%b*Qi(%A1esPN9fFeeO~ubHGZ~~R!cmff{ZmHy z%;7W{IMSTtFWM4;EPpjpSwT7LW`o7>WIzX~q=v=;G56DSI4!2jL`RE08Pw zE*41`fVn_5Knp1{2y)SV^|6>WWNmbI*AK}?8Z`S_H`!ceJfcwcUuiVI4n*YnR*nQj z+s%3|3Xn+>!f4RtpX%(+@$(L7$_$c_MrfU7D6wgBo=fEjV9y}TF=Am87`{adtA89m z0U#}D+~TAlO0$P&6>Pnz!xksDKRrY#lR#vwm5BaHWDv!%@Gj!O^mOFuo3lczapQwH zLL~M*_V>f|jR?;r??9M*rBM2kM$>3m$QWJIKdhP)?3;eP0xQq7d3`BYC@01<3dD`Q z$6?zMs2Op;;N;-UX$u)a9QF-KsArAXbX1Lh1hXb6VA|SgjB7h2MF2au#4rd=g?jWb zg6l}Yr?t7&67ot0S5z|#3~JuOzc)HpV4witIGL=pe{wvL>g$Sl@o`88M0OR2$K?pE zizHWxDvZrGj5zb{NztV%RVoy0+Up6RfOGkY&BwsYTg(&%(x#-YcXHX;2gIfb<1pa7wqyrS_^iguXHN6lD(Eg=3isNu-T z3X~ipruwMV%A8>%(4QTWuAjUi3xPbtz~uV8FU#f!IzM*{hGLMkX`N?5X9`k?RT9OI zAfwtPf!m zz^gK)R{lkt^O77b>1$5gc>6i51h@OveOC%&yWa<#EiL(>c@0#VsRWMEB=$jJq z>Wu+$y5?)0WG)UFgx*IY!|&R6?Bbk0Wr=)|$iO1?7Sp%g1TIYmd5U$Mt^CBLav7!z zszT$kxQPjwIyE(#w{~}TCw+7-04yb`)1i>ee3`?CF-bOJiNceqtHVxLTYZM#C8jmf z)770L!C4G%!Rc|A*KJ z6j3To_)sN0%(D5;>Ugi1_SX`U<21I25Cm=iEWU+pOmW;rKV+X3&yV}%%Jp&q~Gkd|| zHxl7mny3Y)&x3DAI)gjSI>(`dQaw!>UX<|5xhWMH8x zCmLHV?T7uu=gN%oo4?@k-{RwQkQtu+$#GN$NaO)V5;_6{EBA`!9AFw=7V7(L*f>;2 zNFUSz>Fn?l9E%QiHmW1Eu^ks(_%zM6b6j-UqguOrI!a~Y6KmrgYjcBZA~t@Jpeq}Y z+e9PSqjHBSig4)T*A3mCn zDGk^}pu6Jh{p*M!47b*J zFx}kF34KYo+3Yg+ZK%_EP*yY|E}~EuQ6!}QGi&;?sv6sqCKEuwmMa>wBNQ5e*3svn z!lwL%cuxrqUN_~>4rTksjZ;^+R+bfx?P!(N^Mg$>tzj~kU+dwP?utngP~ zPDPCM|3A+m{b~a^K2Yy+@;!X`qbbS>GjbsNyE;tYueBs>@`;E+r}~**lz5}(%vXZcK1 z>dd_o=OqpU#!#~jN%q>9@to?g(=xPE&?mmnOoq0cxm$4jHr@0Q>7=1UfbS=uc|k;L zI$c2ZF|1Bn7$S2`Bx4d?u7=$_e6&0$V}AR#p=<(d3PJ&-ziy%4Y8E==faw!aWV)l5 zQ=mBN1;XbbIQ718gL{*KU;#Ho`OZ5`y6;wTOkB2bs?YcPSap#(c9Js5wlfMffmBci zwh0Z0&d@Y~IF!XK;1!SOpRwbe-4W6P9*qzg93y1!F~maJ4vCR0iO^JkEK8*=rhNef z-;*IZOfq0qSsr)Kq_>7E@}X$kui}XWMmSgbdYFF>TC|BcnY+OvPS?kFTGosHM{;*K z*%pK8liW?jIVXl4$FeA~GxV2n5O*S-j>y2PcjYs3fR7e)nhaA)v>Q1vB5`0l6n`kN{eGah`{qBP zkERY7i#XLQgs&okSTWD*2ypiBn=ukjcSAg<7`^{u;4cEkUxLB0KXmmbtl!s5vmNdrq~+XyKR~9v`xQ`iZ2odp&u znh+@JHps!14VpLCNA85Du!p`Ca02JySk=i%zY8>XZ?7H-1P;!)T$&$A&Fi)7bpT@) zSofF+VJz_y ztOp{YmlFw&t{YD#qcv~NUP*O1PHI{iEiJPa1rI1nHVIzc!X@5(HWN2wXrpA+O74dA zL6Sm4kg2JJ+QYg9N&AP;Ti|w5ilk{mM4_428x|Xf0?wCn`vV z^PnUQWklVGcbjTmmaHtk<~4*tP*o=ABJVn9&KLEhJeAfJM(U$G#+CxeL-0}__^syS zG2gVe3?D75#v>a+Z!V78QzgRN57B<+Hc3>7?>kjXn5p#rkLPxLBGvk@E&UhohUO<5 z?;)c0aqh$1#TmQap1bS$=X9)(#`^zMcfhFQoWI1n-wpk4XtM)2G$#N8K0DE~$n{Lq zzn?1tWT{er6G~K*M8$mgPx%k=GusJsep(1LAa-V0Cz@)b(mXEl47PDS3U88Eea6VLW7}DPn$L zi<`rkA(0b9Og8}E0=Axw>rE-qv=XU-p4l5$F`2P@Wv&n*f3$p$4bG}9=?cs31C<}+6n&l=H8!{oHA#} zy5*1KfBF2Y^_SXrSoGuav+nM%jNbV8zp6VT*=tvNc4TBqMb@sOoM$}^cRBi17$Zm6 z)@@F`qeqo>xNR?(D-!(wZI6xewqLBzSu|_RCs+1FHYES+AYq(B!bT z9IC&=fhiR5f1Z3pe|$Z6*3kf8037awnrzjoRa3!tsgxtr_Dv!au`^2!Wrltpt-L}fX)jz?2tru%5V6!~{ z(8%1=(*7G^>%}iJ>H{9tRPd8iX@bgtpssTYD^{L9ZKz5$+yY7djihX?Fa2UAwZt@# zzcNY&T8uh;lzlWLx9J8Pt^GP$8)rqkx1F46980_Ip72kAK~; zNd8vA?)@vr+XH&}SiVpQn&WwQPJUy(qVP+_14z_0US0#)BCVJHMltj==CA9_0$U8! zYT=f9O^bifLKJd|&k;gW`t6L2hfpAYTeHpbGK9+a4H~Q>$z&=$v^lHvb@#zu&3?PQ zp`~5bT}F8B@Biti$xN)Nh+D7a!F{tEJh8mIT)Rt`dU&Urq9lLt;K9bAcC~8N>d&ke z8mb8dUewX^LA>6wLx&FAn1;=;>=U-}ekLXwEsZ_Jvt?m*X!MWs*Mkw*a0bnWEZT9} zZoz^&%a>Oyc1!%^o@~xA|E%x$@eR1Q!#f;5b*iRf&DZN1wg2|3ufBSb711@R9hb2Y z+N1BlcJ!^zmPO=^yE_PKZAbdf&6`)-_nmIB zWJSG?4*>sg!(xMx@!IOY_Vm~+|2K*Se_Nwa@T(_n8HO5*2y*zXVe>N*JGf`wdNOa9 zSEy}eMwi4l=QDa}&Ppr`wcYyir_kg^EgNo#UvqG2y{bofQw@nCOD!ahr*|F>#;{60>;u$B!R+-|!sn zd%RCazkAcauREq~m$dbx*eY6_PfKeEO0HV0IAR)50C$_zG0e8(nacSVjTNv9Ybh%I zhj?orKXD>qbg1nr`@aeSE_&-x{VK{mnB`B)K*+g z|GTf))S-JH`D~ zJ2WaGGPt7DYL;JmpUgbVHxq(B@06_ixGq;~KCSq-zFbGg`}f?p^X070c39$4udc1- z_C=QuN+y-J?yyGrFA=IOv)`S%HR{Fd)AOhJ7Z=}{&NcjQ>A6vZwzv1svT~`|w!C}P z8P46QOh%cRU(_q;qGjk|)i*FtzuoGmYX{QvqlUNaGb{1y)3eqa%SHY33*|<}VTJck zpXU;siGyUkyR$8~`sZxJv|K04!GoUF-1ageJuh6tF}dc`D)}}(_nbTvSvaq!R4Y%cBNg+4v7%f|pH+ z>;88y!7C0JP~1In^WaY(a&Ox!fB#1h*N^)6l*vE1ohf=hrYEbn8GZI`t8?cUEIx*WPs-nIG;gYBBN zYk%3YrJ>)-o5P?#o6+lTAUiE;@ZQt4<-M*^pm2(Q)~=ng(?Opl#B>z1J<`FtZ1{Qe zGt09}>oQE|QR&++%i?-yYo~nf-peE#M(@!0!}VZdzi-~W_R5#{hCV~_*Ti^551BF| z=LUR7>hgfvPavwB7}_@%se~BMdmtme_mgdF6f!?k92J5+WFvG@lnq-rl#Tv8Xp#pC zm}$TeOJ6*bGe2fZpOiN)pnebc5_cKaoVFMd`JDCk!t zI#c;|oKHLcd?x}dj?cNN*W0D|YsKm0HVzfLy4&welhcUz_DA|z#+=W(SdrcgX_`Qh z^DA)DJ|ra6LtQ(-9`MIQ7cT6?Fza7T-k0@%Ii^bhtjg=o`{mn%Zs|`x`8B0YjTpat zUi@fWe&}R=92LNEhH=RXgslFJxA{y_yXNPo`wSQ`!=a)A87B^V~%p?UM>uei516d#JRFTPc9%}0}Rf;Eg-r`r7BU{I+L;vu63 zCw@;5$}hnG`{+6;XnK9yNdN1VgTL3@ZS0D!B{c@G|9U{=eaN28&#maGFg~~P@ntha z5u?v8bwF*~%--JK{KSlJ5O&_qtpabThsBFBtLC8f&AG&FFk#hXwZwr)g)j<~-no z}JI%}yuJjmsB0`Ubst)a5G+ z@qTUqZ2XB3i{+LMxjd=ccW+#?W*4~1ym|9xa1XS#>jApJqxeW*KljWZ%Z7x4FZV$=skeTnME|kTPctd*8GX-Vl_8 zo9MxY0RpXA1KTBWfx4*8Pk;gLZk2j}-#`x;@~f>p>*|Zp4ejqhcFm5GDYLAXtNJO? z!I!s*RXRJrDw6(chivU`Y)p}XtGnEa#XjM5y@zye&-pF=iuU#8SnbN9Gi{96lAFZ7YA@=C$ z)7Gq+Ms>X*rc7Zxo`4o=Ys=ub+@+D(rIXkh!@x$?goT9--`-{50OjdqR?a5s*?4-W zC#Kwa4tha~+nHS(I%{ipY1|^=>mRhWYcQYUJaV&6U{Z>{ zYwPJ^+V^6pal@6iElW0T+qQ;=d@m?dlio{@mv(6X>-m)w7E-J}O*_)~ePz+8-L29# ztRXp}0nNl6*ZuVKP3SGj8CU~1Jr9jbZkrO(0M59g{8BL*u}Je?i@y#E3Sz+yMw;FU zw$}BlR8t!pZ2)QyAc3h5Vt!H8W(ei#jvP5M+%b3kwfZw_BhedlZpGW-@7)m4jXyN{ zGlC{UZdYs=Gj?n}^p9g`S-2%NX-O|rV}1Yq_bci2zem+_`sq(5Ncz|HUiLaBF0Q8H zIzoinTD=-jz{P=dy<#uU>%I3JWY5D#k81p|tl}(tCb7oT!2>84J_pZe%(D6FbaKbI z`Hs)oB#vVQCBVM{8RORrjQHYTfA?K1CYlXws}kgAoVc9Bb7u19TRLl4n|q&eT|&j$@y$n3bs z$$l*fOE5n^^|Nyjj4j^2ttz-5y@AbbD#W+!pbDXSIq}X@x_%b3FL`!sevt=D`4m0! z(aB-oLJCawg9Nkzis?PwtR+pW{k^km z*{UD%TEF@G`(LY{cQHM^F(=SZIoEdA8a#Ng{-hIMFyM8Kr{^kQ1s=3j9FqHB6XjP90W{ugEd(BM7ovG*LC+f-ZIFFC)YTc?HNQuh|smA?6L z#kFhKaFBFiUs=mGv5%GSvf*g0cJ10VXg|3DX=0Z+2Rb1bxSg2^0^0QJI(05{6ra3# zZ*q#q6zv+CnwpzikEtPDz~aT-IKvbQwx^$|BxFI7?xlr6?3Xp>k2QA#^RGr~I}Okx zUa4D4R@vigyER2*g=6_wc8tBOm)2tg*4*>o(U46&tNXzu`dyR>G|=^S?b@YK)Ylsx z!&kq~jD^Qnx7TNheEsdW7g*2>7FC`2Li=xYI}gDZxKOEEt*K}X7u*|w#59Ci806w= z@m)@Z&kv<)1Snh0ij}jF9qUzL;d$=T!`$4}_!yc(JpB?H+Le1Z+rgES9P8PyY`EIA zvrp;q2Yf-p^SPonf%40*&7Ct}5p(h4=Q|A-ulRX)!+RZ+z2`9jS?Okk-Gv~IfyxfLEc3Yq2-6cQ{Ff*3teO8n2kCoqj-hygd6ex>L=)7sniEx~}k~?coUb zs&lDelnAEUYWLRlEZp3HV3-sJrf<6Wc>#OkuHC!amv3GwiJ>4wS9pe=AVt&jdB@Uz z^!Tw3HzjROuXofFlkw$s6mnnKqsJ%sjbUui?Vq3QiIDnm2Sej)zQ(R?X)hNM^N@c6 zjdaA~XUa)AH+P0?2)PXH6@Uyfh5Y?CWA?481ctg3NvZk>VtluKd_CZ&`!kF-ZQIrw zF(7F>PV+OfVD%iFog1-So1*KYaerzMR3J1Y@)REygYl9K9^Ff6X=(dLSwy0QY=h-j zzOB@rn-V#6RR?SI`|@E2pA~!GnNu0zI&$ml2DYrHQBd=2WaDKcpPvC;6?@~x7@;|` zXOt8DQe;!Wlr9H~J<2wTDA;x>gE&3pVH$FfL>na9#{Q=*)rJWq|B z5;8$T#`|cVPUorhZ&JHvQwF;r_UsFOZ_D*sR9WWWxc>0Y&8}mYXMOSImuty$TmdPd zZL=(RKILlbv?p1{t(Kn}1vSSip~O`d!{~z}wMQn{IpT$A(fL3LeE-EeMz%aWf1GD# zE;NKGPuuX3%Z+RCm`?8Ysy}lO{1Eaq9?+`&X`f!|Alp+4+{;jL=?gl|4X2*FyqJ zk*!d^G;(%!hMfBhuhfnG!x~c^X!0=1)-T((fLTEH+uu*gVBfd|!dbUv%MI*`7brxf zY+z@(fwr9cP*e0D_oi85fTeW3Y;!8PO+|xt6KeyTAF?>zfoEm|QoZw;nVQnRl$O?1 zuov&?`%8^Rjza@M7dS^_DcGCjl9K=S=nR{UO{LAdF?9_kr@oB7>{l>4xm*2+lGF+o_ z4SPM-UB76zcbypPBAuw-;O$NQOeh_{toiF_EWF>=JfMn07W6qz?&9Wm^?mal#kCzeFk8z zk)Swy24q_`xnyzD@sYH#yYTALsw+MnTYlT1^`3XW+cKJ3TZElB;Zo3gWVT;k>fv9h zL8de0;ZDX3k;aN>D!i)|IUe7_jk`&@#YSdrck~qz~Qvj zo%43N^mKZ@nTa4W(jxZ!`F^Z{pU|*$nUtHcmBoaH%W{p%}8(XwkbhlB~u& z4bU=cT4e8-GS`*OMVIX#*Uo+(oi5n*St;u-UAi;`wp4ygCdCvzUT}{~q{}OIS@v_52Sa5MT~a0@6RZ^kWeT$({+`tBD`lPn`qT$mHV%wzSZT#9!m+% z_ur5jIANHP_Ml6}Av0yrJ!*mN0|pMC%5$i1?_~i~&;Kpugzd2Wu=A=*%jQ+8kQH#;BP%PhaO*nC&W-Q3k>rax(YM(Vrm&~zQKv;+ zaiO@{$iJ^50-PvYRjR`HiACKGAsNKZj;1sRdIX6Q;O}_Ll7kjL- zy+!w?u%>Hts;;7y-Sq-J9qRYi+E>S1*w`J#S$3Cn!c2fFcjNwM~UCLUg8pam8s2EW08S8V{Gqcq8eyd4o;c5VoV>@`Z8XJ zOdDmN<<69?H|#7!hmC6K&y|TsXELjxu9E}Q>y;e_M@~hV4jrl_jw_M6Zd{)cC-=|y zo8XE?Y|pV-m6I0C$;<^@UsM63Yjs@`IH@D{etSN4JWjZ6j_(fgu!d<2a&@T{?(@B->ET< zF_LK#(@^x0+EUb`*o1@D#arf0$^BeD)jU4|N?71esNomAyw|7Cpj$~Cp8+U(7QvCs zA=QM7n?MaQ1COMHCUNoVksm@&rKEB5SURrX&^aaBnfh1S^8&h|jWi=y*rsOH9o!`@ zHrAA??-B^d0HwPzLygSkJm6Vi^WT&+X3th_ef{BFO54{q)`SOsQM2Z{ojZ4)L}O~< zhVNdG5GsZ^8{_4Z(k|b)@Fb4opk0v^8Ys(%B`-&KF;JOAOYbr(! zwYzoHn~ODf!(K|kM3(Inz^(4fK68bD01Z$++i<~sqDy%b>s-O71?EY1NP>YKE8}>9 z7Vn$@KAIhEl#U5cveTwGGdRoRj&bxnKknJ&)Y3^hZ@ui1WNl*OxjW-6C@f#ZLOho3 zjYz2D+9lW&m}qx=b0=`f>-8zkdoGHH{7mZ8mUF$eM`qz$j@L=(x7O(R#dQy3vH2}! zirx;_K~Ze!S7_6RTV1VJw8k@Yy&uj&7+vVn}awEi3SL#3GU|Vy3>P8uu z4y=b1EB0~h^kJKPjoU0SHV>p{F-5ftT|P*jcX*ISa10?dg*~@i2b^mE`tHU+V;UKk z4F`Afbau^r1*>^#*P(Dc>6LJ=U($K;m&te~Ng zflt_&{!eFT9@lf)z45O#Gs6(0EGa@{$`)c$w#YV8meJTki&SKqr1Zrw64^tRsSJ^1 zEtM_FmV_i*n=K@jloq7=y-%9w$2>F7@0p)J<`u(txj*-P&ULQqI_FMOUgu#xrKo-0 z%HoG3x3c-xYK6&7w6!rihEpQ>1vDTXTQmx^h6b5T{3y_-)B& z;j|^^FkpOhmkA@)x=z`zyiNtEXIK8Ai;{JmYq9D^UK(u%ES@58 zLztzm>GV3m1YO8;efi9G`sC)SzWt1iP>dR?MP?a9PA_F9QFVmjiew^8lF6XxZ*

z?p3+zr}9!~-Dzh|uxe(f^B|<`g7n)De|I>Ns$w{Fr7egwEu8#5T&j&HxBG^Un5Q+W zZ;9_nY1A3NZ{p z9O0AX=drc$&2|{bPW*n+EBoKZ{lyB9;qhKCbwCQ> z$-BB_!%O6XmE@n&M<-4D~E%$Z5NE@ekhq5Z_G12CetL)_eE zI8QSpGxHdT;sYI>FYX=D5+@G{d8gM@yOMBc{9tSOU2gBgsV$?gb9>L-%DEp>ziHWW z73O<~^qnls9uVY0u%yX_myc}Ai(lUPiuiHMcA{~Ma@aV>MAFbwlCQW#nyBI`I*-l| z?Fk56Ic?9&C#lW{Sv0D97e*^e;YLLlN9?kQafO@gn=Z~Cq5CW;jK|!bbUf*VOFNnh zYbhp9oY=iZ!_JeAwuR4h*r=RV5;Fr-oh=;WKL*Ft)(D}C)AkUetymPfEJuyituxH z@2YteJxyj~&eZBXOG}kuE&cQI^2So5eA9Kxq(x6=e^@eUQj4ow^}|Yz*S)N+V_KKw z%pF#(R}F^6XLD4<~KCu65MW(PqwmwK)r} z5-vxJ&V;hgS~om_DIw_3#T&RVqa{EF48zq85)Pc27BM>$;Fc&$)?J%p>kbH6MgpiM?b zMzKcf!TVFm)#{5`!=cl%P0X;-tSL0D6w_Y$KKB=8J; zSi%p17{r{$9J+RVAGJv3bH^}r^NAkI&HU^d=$fy*4>q}KJG+<0;W2LDn4CJ@aL7T|ylWsfAO*PYxG`XDA2=8-s z;Qz!%K(jD zxQeA}gO>4J=QJ^IPpMOoYWrcs5or(P3Y3%zt4FL>_}U*m-$TzP8Wo&rkBRZOXwT~kND#t{BwGrvO41w#H@df0gE-5 zd=(GO7|V$c&@o)^pC5s-j@xlt5s4+nQLUA<%G6^A7%SQ1H;+4vqvle<{Z{97Y>I_l zY0BpC^=ZEEA?$W&Y>A}@SZ{JvLzsd%o|r|r&4`#`hQ7Do1F9aQFaD^7cmc|h{dHc{ za}daRBn*g+<}B~em0v&5E45f;5p?22UqAQ!$yQb~fZL)o<8}=UT{6I?b)KxPPI@SpYrxu1n5DEFYbBM}h7B7O zojQeNpM_%lS{#nQ4_@)}wluG4dz0ul5R2RzjeboLmG3$H^k(4}6MPPX#*S^m9kmU* zb?c_AZ`h30*&-)V&2`R*>Yrf;`!0Olma2Q7a@~)1a@#JlLKCrdAZ^h%JeE3|z}60X zBmYi_%|)X#kFHM(E2V_IMEPn^QZT@2PiYq={)MGHq*+AJ?Uh4kRlhv;hzpcu$-4&C zsdO^mYkqZHjNJl`L>DC!Q+@f+yJ0D}FAiy5zJKajua@$GNdS?ym*dT+Owpjpp=U*F zmGRRe*Y7BPg{Zg6obcThm;_ShC5tT~qw?XE`KguJU=2zrkUF7Y(%| za3<^p_Uj}L;2M=}1=1D($QfF@}mQoMbR*2rlcW8`GgQK=1Pg9}595N6+EID?`l1#fkAwT3B;Hb#Y zHHhFR2B`9rL8(PnDWC23+qa%FMNM3vurGJFGBTl!AS`yxQO3BL4jWcmL4(U0(Eo1O z$M3#(Tr4&%2Qu3aIVlibii|!HNns@p$-C<*N*|Z5R8ISKeYf7FBPK6g*cZp_YI>R; z(b+Q?^6DnH9^+eRcc&z5LYOz?tkpHwai#6FcaI)YV0`4r^1|_7F+>42UMv6jK`4~! zu*JR;1IIv2%3F5(i3cR(&q}%PgvT+(_#+jC*~E5 zHv|Kej%b}OyRrP!|Cqo3jn12=1ycE`sHnUHM;y211PW`Qop+(yJLVbY?)89*gLLLt zs|GPDge5t)J=m&?4lhKg<-1O-W>zBwL?@AWmzBpd99RH_X z@!i0erMx!k<{*%xOV;H^ih(q2AEiO6_*G_WaS92r1$@?4j0rMnWN&ZJrOYq;MWr77 zd^zy7e2KI%DSB?3rBBDX)slqNR-5@4nv^#6(0~;KO-<_pZ8jRY&t+qE;!6e{KeqPs zHI>&iPVdz5+pwyb4qPnf#fEMvNJ^w3WQOCjlWRvsMQwjy9Gi#3Z~N9UMpLRHATU>9 z;-pK@l<(3BKr-$ye8+Hb#l10?Hl%+39A;4gIrVO$^-_FhUgd6P=L5ZI>6O!qWI74cgjkh&R_0}@9$(|tn;HNn3F3p zjlhWG+Kfu=HxuQLM~+?hR{HpKj)+Ju_euF-lL+tskQlbCdG>s}Th@3#vD4=H!!E z1_&}3F2rxulP#{QD%WkCIB{Y)KxZ$Y^{0}T69PhRH~uWztWV>s+2Eyv_pQht6DQ4^ zz5^ng@|Voh?hpHPwf{F5@FWc)Zt*0GsjzQXI-!+Pv0|;Mr9k&z4KwqY4KKc72g zaUs;Bj`3XU2mtuZQmb2zDz%G!Cl4GRvz}u3$dR=beT|GR#K)_kA)mSys{XeJT8>{6 z)s1@>I+|pqq@}geUKU$b*_uwydJ2lvJplGAew`YN-v0L8yEuvy>L8JAotz%*m{&01 z(||~5G$`%o@<<_~t(cc6JrNrR7TuVs5Qip&)GuVum;DY`ANs#M0kTwV3_Wj;#@&^@ z`NHrOD80J4N;H^{R_*k&!GrV@o+{N5CM$Mzlnn4kNam+eVdf)&O@6>??t1VQLO-MZ z%hi9oNo6tdd5-A$v|Y#Oc@NP<4PRsK5ST0_>{7-q#UZoOEv67c0Tj`{>_+glb)SU- zv;3h-Os6x#D~ZLgxrwDM=opIo7do;uXYFkCf9!)RyK`c)ORT7VEolYOop^8?8xFtO z`h(nOA;p%qHtJgF;;ELFoBGAymY4e^zJn$E;nw|i#ft5&jqY`PGNy=LDW2-i{E;$Gh8r@iLD{B?-= z`1DL$<{6k|Wo0q9eChuEofS1!rtZ#Zy-dx_vgofH0_GBT5EZL6B>3>rqkko=-|*Y1 z^7%KbNqGNhYc}Zag<>hPq%=(_^q!~~{Nwj{;c+Ve zZNo3V7{nL=X<-u&7}g*ah5SI2yF~q%O!JpeH&?rOT!YhUhpK?zVPJiuu_cjzI`$ub z``3u!V}McJJH|h$`W?vy+~=YqhRFDJZH91GrBFpE`x?1tC_UiGr`_jCtRZ+|Ww?Lb zp&6E-x~+FMEJ+SN(&it3)y~d#Rcn$cRd@0FVicp~k9>v~lf&8VY~_1LXDhIec=Gr= z;Z6S7HL0Mba2F(=;Kqm{NCHc!9r6pJVIIxhAz3^=N~^= zHgVAXsiq1A{1=w}kMU}BPUTjuETfI^$j4|D zCW(rxwlfa38-BJ8|CD+Ei-$GtlvbgG%otQucZ<>|9uShS@SjJxgoZQwYYnbX3&ko) zp~l0!Fa3L4&ByZXvvl~cCj;?+)%s8EZ$8t8diT4d|5+nUa@dpqXS2+R&wBLc8UI~B zUUF-Ml1}tCPl--P2{V@4JJR#*$LG9rhb?Ukx@62|@i4oEDff=3xITPH0ly3?SX);& z!6~}tO*U_=Y2b-zx;$>zhk0~;ZZmT4DnkYny~v{iH)M3Eei-G)fe36wFM95o7FgjP zI`woPCThJ+JG_J`4*MsBsqxbFp`_rMETYTfcDjJ?D8+Gx+_E`&vY-H7b}7d|hJZ$; z*EASjy;9RGG%bPhC$b8aunt(%&lWLw1zl0pi-!}vFgOgshV+O&>F_fIP#xC?XO*ql zt4T^FUFRo<^*(L*uAnD9-qI2wU7^5j(f`HN3LF*>>ccC}`|jm9xF5&Hpv)S(Fm*N^yd5~`^N)D!J5f*S3ou|h~l?_B` z(jJab5*57q_jBdS1_ng6!=a0dsH+$aQAQnZY^5$>Zi`%%Ug`gh|4+sNpZ6Cy6)g90ot2@-W=< z`^H^F;y%r&Q3q*)lpv)@85h3bt-_ z9RJqlWv6*Cy;{elbEw|g&*GbK)ZTv8Noo!W`x=}ygJfJuNa7T zUC1SAsYj_5X^H!CoQvF`2^%zQc#)JPR%xN+XJ?$~A-;Kb!;{2ru@_nE(F@+=t@{#u zHUtJ46~UVte-8`=9cHx@yEw`8#%iIZu7+Klf&E0xv2L%R=4TM2!E|*Md6}ox5vJ}F zM--1}ccRbX&VrkJWv~y|(Otp@kIl-_pG)GcK^h2F%jj4}^Vnn;D?43Kwq|N7&O&s; z8E7p!i7Okm_U6$(rWxw>>(|ogeY{N~{hNcJn5Flc!o1b=#qahms5{TIKpmoc139Q=H?gyP$~6 z3BIGr=8KnpFg&1Dnv1C~V_V@4w6)PU{LskG zxM-?wgoRnXWy==136Qe9gV{O_`KO_bc&AF795osrMA)IAwAe&Sv(blL**vue$`A~F z8QP)P@Z!ab@!2mpTnEbPw1?so@jRjA2s3w1e}Exq4mW7Uylx*KDM}b1Y8i95IHMb} zp(9VLI!>YHFtNb4DX;!^6Qm-7Jt5CgZM^#WNbv;r4U5tZDKZ0Wh_z`D6nwu z^vEwlMiJ8)qoXr}e>pJU^OXv(IVz&r$9%i7<73t8i4`^z@!O>Z9XfRA@$={P8Ry|_ z1<9vS@Kx$;@H&tL`nr&iFrqvOK&-gcKgJ&aF9gYq?k#AVXNUF05L5b)#Rlyxnsfm2XulxA_M5;iU2{t*LgSuF9n;;HeBynSuvXuR&2Z1bYz3%vmuz>_F!!g zQV=i7zW!SrD6>U$rSedLkoIO@o0R7n@KtL|pFCOxmBXQ4vC}#}i}h!Ez|yLU^fO=6 zE|OgN8>TGGpBjMsItmd_IW{u2uR9i3F{n;9j4AsHv$0<~)_^!^8bzM2Gu-5qD`9dr zcCV-#qEEpv?{ay39@WHKEYAJQ3Jy1I)oL{sl=0l(G}+G4(U&sJ;bG9m>eWSpPE);A zgF?2h`IsE991Jv`8U`A+vdge?=zr)1Pc4}s=@+mC&*?>Z8#x!AtqB`Gt5*-6G9|;+ z|Ky1iyT~MIOZdYyTaJHkt1{uwXv@9H-9&VWsiFi9960ct>%H>b1qmluPi~QXmr*9S ze>7~}r{TaN`<19qYS0OnNfKizaX3L;?-ZyHuk4>lcAst3&lNtTX~&V)1g|QG_>h+m zpIgytdjXPARZXol!xk=>_%#$c<(4uXUFQOelzdjXNJ0*mn4iOisR*uGT$mTDyWz~6 zMJ)CS_X17AbmP8#`-%%Y?HQ??=i2xvM_9weYm(8>`E$xb?hU%r*SL&7)}-+zYwfjR zAD67SPfeTj)tfjh*Hg744kp^Hv_)&P%nYrkAdlBm5ZXV4q?;gmVFs0!IVt3@{9eN9 zTAAWjJK6R9UDvX5d*HOvZp35#R7Y2mxfo;VQ;>R>7wh%T z6QM~lw$Gc=(z_;;Z+A8^(Zsqsl=HIXjqxbA0mylSX3y@7CR1j4?+*~#vId0O&L$zq zI^U#2MR(n!*?x4$OJ%T;HGV185PG1PDOL<^GKSIGLNYqxZKsu~xvb3Ch4*K8T>F+PwJ+ zj?BI=dm<)`?lPPQ3A)Q`26yN+|2Wmd!h0)hwMJhT1**fh0Df>?*j^~49Ts#$=v=FXzlhvt7dH3VeC}Vv6uqg2(Y{i zACquX(hni0Qi2rJ@)Odz`J3;iPMym8eZ`Z_kLU_9vMM+@SUvDLKFQx{1s%q=0YMj9 z2HCzl$Y+|#;k_R{PfH9xu$i-Xy|;`Z>rS6q_T8X9&aLVc%T=7%JxZV`k* zb1M%0I?|T{IMHAFL+tbxoU*SOC3j_~;gN)FmmiVn0dREHv>55%buC|W24bYnbjMk< zmct#lBEuQON-qb*?)7X9D}Dhtf)BZV5B_oK!>8lo%O8HY_jBavqzY@EKe4wB5I)5% zpeBrN-_8h^f_BxoVp=rbUkU5nrSv@6WwY*zl`EyaQg$fxMzJQut^6A9-v3GUEQOvO zNv|?ZfIWC`(KovdpRga_mZr};nNl-r;YC%U&!0y#{QI9&Xf-%Kp#RJ(_3FxCtr0`V Lm>wQ%z3hJggb;w5 literal 0 HcmV?d00001 diff --git a/project-time-in-area-analytics/.images/track-heatmap-simple.png b/project-time-in-area-analytics/.images/track-heatmap-simple.png new file mode 100644 index 0000000000000000000000000000000000000000..ec6b8f8c162b9f32708c1c9131b27e880f1fc346 GIT binary patch literal 41849 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 literal 0 HcmV?d00001 diff --git a/project-time-in-area-analytics/README.md b/project-time-in-area-analytics/README.md index 4852c0e..2dbf65d 100644 --- a/project-time-in-area-analytics/README.md +++ b/project-time-in-area-analytics/README.md @@ -47,7 +47,33 @@ flowchart TD ## Table of Contents -TODO + + +- [Compatibility](#compatibility) + - [AXIS OS Compatibility](#axis-os-compatibility) + - [FixedIT Data Agent Compatibility](#fixedit-data-agent-compatibility) +- [Quick Setup](#quick-setup) + - [Troubleshooting](#troubleshooting) +- [Configuration Files](#configuration-files) + - [config_process_track_duration.conf and track_duration_calculator.star](#config_process_track_durationconf-and-track_duration_calculatorstar) + - [config_process_threshold_filter.conf](#config_process_threshold_filterconf) + - [test_files/config_output_stdout.conf](#test_filesconfig_output_stdoutconf) + - [test_files/sample_data_feeder.sh](#test_filessample_data_feedersh) +- [Future Enhancements](#future-enhancements) +- [Local Testing on Host](#local-testing-on-host) + - [Prerequisites](#prerequisites) + - [Host Testing Limitations](#host-testing-limitations) + - [Test Commands](#test-commands) + - [Test Time in Area Calculation Only](#test-time-in-area-calculation-only) + - [Test Complete Alert Pipeline](#test-complete-alert-pipeline) + - [Test with Real Device Data](#test-with-real-device-data) +- [Analytics Data Structure](#analytics-data-structure) + - [Data Format](#data-format) + - [Data Behavior](#data-behavior) + - [Data Transformation for Telegraf](#data-transformation-for-telegraf) +- [Track Activity Visualization](#track-activity-visualization) + + ## Compatibility @@ -167,3 +193,126 @@ telegraf --config test_files/config_input_sample_data.conf \ **Expected Output:** Only detections with time in area (`time_in_area_seconds`) > `ALERT_THRESHOLD_SECONDS` plus debug messages for track cleanup. + +#### Test with Real Device Data + +You can also test with real analytics scene description data recorded from an Axis device: + +```bash +# Set up test environment with real device data +export HELPER_FILES_DIR="$(pwd)" +export SAMPLE_FILE="test_files/real_device_data.jsonl" + +# Test time in area calculation with real data +telegraf --config test_files/config_input_sample_data.conf \ + --config config_process_track_duration.conf \ + --config test_files/config_output_stdout.conf \ + --once +``` + +**Note:** The `real_device_data.jsonl` file contains actual analytics scene description data recorded from an Axis device. This provides more realistic testing with real track IDs, timestamps, and object detection patterns. + +## Analytics Data Structure + +The analytics scene description data follows a specific format and behavior: + +### Data Format + +Each line contains a JSON object with this structure: + +```json +{ + "frame": { + "observations": [ + { + "bounding_box": { + "bottom": 0.6, + "left": 0.2, + "right": 0.3, + "top": 0.4 + }, + "class": { "type": "Human" }, + "timestamp": "2024-01-15T10:00:01Z", + "track_id": "track_001" + } + ], + "operations": [], + "timestamp": "2024-01-15T10:00:01Z" + } +} +``` + +### Data Behavior + +- **Sparse Output**: Frames are primarily output when objects are detected, with occasional empty frames +- **Time Gaps**: Periods with no activity result in no output (creating gaps in timestamps) +- **Occasional Empty Frames**: Sporadically output with `"observations": []`, usually for cleanup operations or periodic heartbeats +- **Operations Array**: May contain delete operations when tracks disappear +- **Optional Classification**: The `class` field may be missing from observations, especially for short-lived tracks where classification hasn't completed yet + +### Data Transformation for Telegraf + +The raw analytics data needs transformation for Telegraf's JSON parser because metrics must be flat - the contained list of detections would cause strange concatenations if parsed directly. Both the `sample_data_feeder.sh` script and the real `axis_metadata_consumer.sh` running on the camera perform this transformation. + +**From:** Frame-based format (multiple observations per frame) + +```json +{ + "frame": { + "observations": [ + {"track_id": "track_001", "class": {"type": "Human"}, ...}, + {"track_id": "track_002", "class": {"type": "Human"}, ...} + ], + "timestamp": "2024-01-15T10:00:01Z" + } +} +``` + +**To:** Individual detection messages (one observation per message, multiple messages per frame) + +```json +{ + "frame": "2024-01-15T10:00:01Z", + "timestamp": "2024-01-15T10:00:01Z", + "track_id": "track_001", + "object_type": "Human", + "bounding_box": {"bottom": 0.6, "left": 0.2, "right": 0.3, "top": 0.4} +} +{ + "frame": "2024-01-15T10:00:01Z", + "timestamp": "2024-01-15T10:00:01Z", + "track_id": "track_002", + "object_type": "Human", + "bounding_box": {"bottom": 0.58, "left": 0.14, "right": 0.20, "top": 0.38} +} +``` + +This transformation: + +- **Flattens** nested observations into individual messages +- **Preserves** object bounding box coordinates +- **Simplifies** object classification to just the type +- **Skips** frames with no observations entirely + +**Recording Real Device Data:** + +You can record real analytics scene description data from your Axis camera for deterministic testing and analysis. This allows you to run the analytics pipeline on your host machine with reproducible results. + +```bash +python test_scripts/record_real_data.py --host --username +``` + +The recorded data works with the track heatmap visualization and other analysis tools. For detailed usage instructions, see the [test_scripts README](test_scripts/README.md). + +## Track Activity Visualization + +This project includes a track heatmap visualization script that shows when different track IDs are active over time, helping you analyze track patterns and activity density in your data. + +```bash +python test_scripts/track_heatmap_viewer.py test_files/simple_tracks.jsonl +``` + +For installation, usage details, and examples, see the [test_scripts README](test_scripts/README.md). + +![Track Heatmap Example](.images/track-heatmap-120s.png) +_Example heatmap showing track activity over time with labeled components_ diff --git a/project-time-in-area-analytics/test_files/real_device_data.jsonl b/project-time-in-area-analytics/test_files/real_device_data.jsonl new file mode 100644 index 0000000..f0d767b --- /dev/null +++ b/project-time-in-area-analytics/test_files/real_device_data.jsonl @@ -0,0 +1,285 @@ + +{"frame":{"observations":[{"bounding_box":{"bottom":0.439,"left":0.2767,"right":0.3225,"top":0.3575},"timestamp":"2025-08-10T20:51:50.454206Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3073,"top":0.7241},"timestamp":"2025-08-10T20:51:50.454206Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:50.454206Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.439,"left":0.2777,"right":0.3204,"top":0.3575},"timestamp":"2025-08-10T20:51:50.554104Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3073,"top":0.7241},"timestamp":"2025-08-10T20:51:50.554104Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:50.554104Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.439,"left":0.2781,"right":0.3197,"top":0.3575},"timestamp":"2025-08-10T20:51:50.654001Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3073,"top":0.7241},"timestamp":"2025-08-10T20:51:50.654001Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:50.654001Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.439,"left":0.2781,"right":0.3197,"top":0.3575},"timestamp":"2025-08-10T20:51:50.753898Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3073,"top":0.7241},"timestamp":"2025-08-10T20:51:50.753898Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:50.753898Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.439,"left":0.2781,"right":0.3197,"top":0.3575},"timestamp":"2025-08-10T20:51:50.853796Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3079,"top":0.7241},"timestamp":"2025-08-10T20:51:50.853796Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:50.853796Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.439,"left":0.2781,"right":0.3197,"top":0.3575},"timestamp":"2025-08-10T20:51:50.953694Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.309,"top":0.7241},"timestamp":"2025-08-10T20:51:50.953694Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:50.953694Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.439,"left":0.2781,"right":0.3197,"top":0.3575},"timestamp":"2025-08-10T20:51:51.053609Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3086,"top":0.7241},"timestamp":"2025-08-10T20:51:51.053609Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:51.053609Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.439,"left":0.2781,"right":0.3197,"top":0.3575},"timestamp":"2025-08-10T20:51:51.153489Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3076,"top":0.7241},"timestamp":"2025-08-10T20:51:51.153489Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:51.153489Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.439,"left":0.2781,"right":0.3197,"top":0.3575},"timestamp":"2025-08-10T20:51:51.253386Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3073,"top":0.7241},"timestamp":"2025-08-10T20:51:51.253386Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:51.253386Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.439,"left":0.2781,"right":0.3197,"top":0.3575},"timestamp":"2025-08-10T20:51:51.353284Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3073,"top":0.7241},"timestamp":"2025-08-10T20:51:51.353284Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:51.353284Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.439,"left":0.2781,"right":0.3197,"top":0.3575},"timestamp":"2025-08-10T20:51:51.453180Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3073,"top":0.7241},"timestamp":"2025-08-10T20:51:51.453180Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:51.453180Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.439,"left":0.2781,"right":0.3197,"top":0.3575},"timestamp":"2025-08-10T20:51:51.553079Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3073,"top":0.7241},"timestamp":"2025-08-10T20:51:51.553079Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:51.553079Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.439,"left":0.2781,"right":0.3197,"top":0.3575},"timestamp":"2025-08-10T20:51:51.652976Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3073,"top":0.7241},"timestamp":"2025-08-10T20:51:51.652976Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:51.652976Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.439,"left":0.2781,"right":0.3197,"top":0.3575},"timestamp":"2025-08-10T20:51:51.752874Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3073,"top":0.7241},"timestamp":"2025-08-10T20:51:51.752874Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:51.752874Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.439,"left":0.2781,"right":0.3197,"top":0.3575},"timestamp":"2025-08-10T20:51:51.852772Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3079,"top":0.7241},"timestamp":"2025-08-10T20:51:51.852772Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:51.852772Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.439,"left":0.2781,"right":0.3197,"top":0.3575},"timestamp":"2025-08-10T20:51:51.952669Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.309,"top":0.7241},"timestamp":"2025-08-10T20:51:51.952669Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:51.952669Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.439,"left":0.2781,"right":0.3197,"top":0.3575},"timestamp":"2025-08-10T20:51:52.052566Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3086,"top":0.7241},"timestamp":"2025-08-10T20:51:52.052566Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:52.052566Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.439,"left":0.2781,"right":0.3197,"top":0.3575},"timestamp":"2025-08-10T20:51:52.152464Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3076,"top":0.7241},"timestamp":"2025-08-10T20:51:52.152464Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:52.152464Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.439,"left":0.2781,"right":0.319,"top":0.3575},"timestamp":"2025-08-10T20:51:52.252362Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3079,"top":0.7241},"timestamp":"2025-08-10T20:51:52.252362Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:52.252362Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.439,"left":0.2781,"right":0.318,"top":0.3575},"timestamp":"2025-08-10T20:51:52.352258Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.309,"top":0.7241},"timestamp":"2025-08-10T20:51:52.352258Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:52.352258Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4377,"left":0.2781,"right":0.3176,"top":0.3575},"timestamp":"2025-08-10T20:51:52.452156Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3086,"top":0.7241},"timestamp":"2025-08-10T20:51:52.452156Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:52.452156Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4359,"left":0.2781,"right":0.3176,"top":0.3575},"timestamp":"2025-08-10T20:51:52.552054Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3076,"top":0.7241},"timestamp":"2025-08-10T20:51:52.552054Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:52.552054Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4341,"left":0.2774,"right":0.3183,"top":0.3588},"timestamp":"2025-08-10T20:51:52.651952Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3073,"top":0.7241},"timestamp":"2025-08-10T20:51:52.651952Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:52.651952Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4323,"left":0.2763,"right":0.3194,"top":0.3606},"timestamp":"2025-08-10T20:51:52.751850Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3073,"top":0.7241},"timestamp":"2025-08-10T20:51:52.751850Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:52.751850Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4316,"left":0.276,"right":0.3197,"top":0.36},"timestamp":"2025-08-10T20:51:52.851747Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3073,"top":0.7241},"timestamp":"2025-08-10T20:51:52.851747Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:52.851747Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4316,"left":0.276,"right":0.3197,"top":0.3582},"timestamp":"2025-08-10T20:51:52.951644Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3073,"top":0.7241},"timestamp":"2025-08-10T20:51:52.951644Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:52.951644Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4316,"left":0.276,"right":0.3183,"top":0.3551},"timestamp":"2025-08-10T20:51:53.051542Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3086,"top":0.7241},"timestamp":"2025-08-10T20:51:53.051542Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:53.051542Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4316,"left":0.276,"right":0.3162,"top":0.3513},"timestamp":"2025-08-10T20:51:53.151440Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3107,"top":0.7241},"timestamp":"2025-08-10T20:51:53.151440Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:53.151440Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4316,"left":0.2746,"right":0.3169,"top":0.3501},"timestamp":"2025-08-10T20:51:53.251337Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.31,"top":0.7241},"timestamp":"2025-08-10T20:51:53.251337Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:53.251337Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4316,"left":0.2725,"right":0.319,"top":0.3501},"timestamp":"2025-08-10T20:51:53.351235Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3079,"top":0.7241},"timestamp":"2025-08-10T20:51:53.351235Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:53.351235Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4316,"left":0.2719,"right":0.3169,"top":0.3477},"timestamp":"2025-08-10T20:51:53.451131Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3073,"top":0.7241},"timestamp":"2025-08-10T20:51:53.451131Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:53.451131Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4304,"left":0.2719,"right":0.3176,"top":0.3464},"timestamp":"2025-08-10T20:51:53.551030Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3079,"top":0.7241},"timestamp":"2025-08-10T20:51:53.551030Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:53.551030Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4285,"left":0.2719,"right":0.3207,"top":0.3464},"timestamp":"2025-08-10T20:51:53.650928Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.309,"top":0.7241},"timestamp":"2025-08-10T20:51:53.650928Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:53.650928Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4289,"left":0.2724,"right":0.3236,"top":0.3433},"timestamp":"2025-08-10T20:51:53.750825Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3099,"top":0.6977},"timestamp":"2025-08-10T20:51:53.750825Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:53.750825Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4306,"left":0.2733,"right":0.3262,"top":0.3385},"timestamp":"2025-08-10T20:51:53.850723Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8131,"left":0.2531,"right":0.3108,"top":0.658},"timestamp":"2025-08-10T20:51:53.850723Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:53.850723Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4403,"left":0.2729,"right":0.3294,"top":0.3322},"timestamp":"2025-08-10T20:51:53.950620Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8106,"left":0.2517,"right":0.3159,"top":0.6328},"timestamp":"2025-08-10T20:51:53.950620Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:53.950620Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4661,"left":0.2698,"right":0.3336,"top":0.323},"timestamp":"2025-08-10T20:51:54.050518Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.8032,"left":0.2475,"right":0.3295,"top":0.6366},"timestamp":"2025-08-10T20:51:54.050518Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:54.050518Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4846,"left":0.2677,"right":0.3371,"top":0.3143},"timestamp":"2025-08-10T20:51:54.150415Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7945,"left":0.252,"right":0.3479,"top":0.6353},"timestamp":"2025-08-10T20:51:54.150415Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:54.150415Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4884,"left":0.2677,"right":0.3392,"top":0.3069},"timestamp":"2025-08-10T20:51:54.250312Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7834,"left":0.2739,"right":0.376,"top":0.6242},"timestamp":"2025-08-10T20:51:54.250312Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"}],"operations":[],"timestamp":"2025-08-10T20:51:54.250312Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4933,"left":0.2691,"right":0.3433,"top":0.3008},"timestamp":"2025-08-10T20:51:54.350209Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.776,"left":0.2961,"right":0.3975,"top":0.6106},"timestamp":"2025-08-10T20:51:54.350209Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"},{"bounding_box":{"bottom":0.7414,"left":0.2368,"right":0.2802,"top":0.5797},"timestamp":"2025-08-10T20:51:54.350209Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.6495,"left":0.3492,"right":0.4354,"top":0.3976},"timestamp":"2025-08-10T20:51:54.350209Z","track_id":"590ff929-2964-42c4-a3cf-0e2d280604df"},{"bounding_box":{"bottom":0.9396,"left":0.4295,"right":0.4687,"top":0.7952},"timestamp":"2025-08-10T20:51:54.350209Z","track_id":"481e0d8b-f090-40d3-8e66-12a3600e27e4"}],"operations":[],"timestamp":"2025-08-10T20:51:54.350209Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.5007,"left":0.2732,"right":0.3516,"top":0.297},"timestamp":"2025-08-10T20:51:54.450108Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.776,"left":0.3191,"right":0.4058,"top":0.5921},"timestamp":"2025-08-10T20:51:54.450108Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"},{"bounding_box":{"bottom":0.7377,"left":0.2191,"right":0.2802,"top":0.5686},"timestamp":"2025-08-10T20:51:54.450108Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.6699,"left":0.3503,"right":0.4385,"top":0.4069},"timestamp":"2025-08-10T20:51:54.450108Z","track_id":"590ff929-2964-42c4-a3cf-0e2d280604df"},{"bounding_box":{"bottom":0.9415,"left":0.4274,"right":0.4718,"top":0.797},"timestamp":"2025-08-10T20:51:54.450108Z","track_id":"481e0d8b-f090-40d3-8e66-12a3600e27e4"}],"operations":[],"timestamp":"2025-08-10T20:51:54.450108Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.5056,"left":0.2774,"right":0.3593,"top":0.2946},"timestamp":"2025-08-10T20:51:54.550004Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.776,"left":0.335,"right":0.4114,"top":0.5797},"timestamp":"2025-08-10T20:51:54.550004Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"},{"bounding_box":{"bottom":0.7365,"left":0.2073,"right":0.2871,"top":0.5612},"timestamp":"2025-08-10T20:51:54.550004Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.6835,"left":0.3499,"right":0.4416,"top":0.4057},"timestamp":"2025-08-10T20:51:54.550004Z","track_id":"590ff929-2964-42c4-a3cf-0e2d280604df"}],"operations":[],"timestamp":"2025-08-10T20:51:54.550004Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.5056,"left":0.2815,"right":0.3656,"top":0.2946},"timestamp":"2025-08-10T20:51:54.649903Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.776,"left":0.3371,"right":0.4114,"top":0.5797},"timestamp":"2025-08-10T20:51:54.649903Z","track_id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c"},{"bounding_box":{"bottom":0.7402,"left":0.2073,"right":0.3079,"top":0.5612},"timestamp":"2025-08-10T20:51:54.649903Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.6835,"left":0.3468,"right":0.4447,"top":0.3835},"timestamp":"2025-08-10T20:51:54.649903Z","track_id":"590ff929-2964-42c4-a3cf-0e2d280604df"}],"operations":[],"timestamp":"2025-08-10T20:51:54.649903Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9531,"left":0.2246,"right":0.4756,"top":0.2942},"class":{"lower_clothing_colors":[{"name":"Beige","score":0.2}],"score":0.77,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.25}]},"timestamp":"2025-08-10T20:51:54.749800Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"}],"operations":[{"id":"481e0d8b-f090-40d3-8e66-12a3600e27e4","type":"DeleteOperation"}],"timestamp":"2025-08-10T20:51:54.749800Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9552,"left":0.2293,"right":0.4769,"top":0.2995},"class":{"lower_clothing_colors":[{"name":"Beige","score":0.2}],"score":0.78,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.24}]},"timestamp":"2025-08-10T20:51:54.849698Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"}],"operations":[],"timestamp":"2025-08-10T20:51:54.849698Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9622,"left":0.2353,"right":0.4838,"top":0.3078},"class":{"lower_clothing_colors":[{"name":"Beige","score":0.19}],"score":0.78,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.23}]},"timestamp":"2025-08-10T20:51:54.949595Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"}],"operations":[],"timestamp":"2025-08-10T20:51:54.949595Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9635,"left":0.2381,"right":0.489,"top":0.3093},"class":{"lower_clothing_colors":[{"name":"Beige","score":0.19}],"score":0.79,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.22}]},"timestamp":"2025-08-10T20:51:55.049493Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"}],"operations":[],"timestamp":"2025-08-10T20:51:55.049493Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9527,"left":0.2423,"right":0.4916,"top":0.3071},"class":{"lower_clothing_colors":[{"name":"Beige","score":0.19}],"score":0.79,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.22}]},"timestamp":"2025-08-10T20:51:55.149390Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4445,"left":0.3258,"right":0.3939,"top":0.2834},"class":{"score":0.86,"type":"Face"},"timestamp":"2025-08-10T20:51:55.149390Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:55.149390Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9391,"left":0.2488,"right":0.4953,"top":0.3041},"class":{"lower_clothing_colors":[{"name":"Beige","score":0.18}],"score":0.8,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.22}]},"timestamp":"2025-08-10T20:51:55.249288Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4471,"left":0.3343,"right":0.4033,"top":0.2823},"class":{"score":0.86,"type":"Face"},"timestamp":"2025-08-10T20:51:55.249288Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.5612,"left":0.228,"right":0.2551,"top":0.4983},"timestamp":"2025-08-10T20:51:55.249288Z","track_id":"dd5091b2-ce28-4d88-aac3-1ef81a2f4512"}],"operations":[],"timestamp":"2025-08-10T20:51:55.249288Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9349,"left":0.2544,"right":0.4999,"top":0.3025},"class":{"lower_clothing_colors":[{"name":"Beige","score":0.18}],"score":0.8,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.22}]},"timestamp":"2025-08-10T20:51:55.349186Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4512,"left":0.3419,"right":0.411,"top":0.2823},"class":{"score":0.86,"type":"Face"},"timestamp":"2025-08-10T20:51:55.349186Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:55.349186Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9386,"left":0.2583,"right":0.5012,"top":0.2976},"class":{"lower_clothing_colors":[{"name":"Beige","score":0.17}],"score":0.8,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.22}]},"timestamp":"2025-08-10T20:51:55.449083Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4538,"left":0.3497,"right":0.4184,"top":0.2831},"class":{"score":0.86,"type":"Face"},"timestamp":"2025-08-10T20:51:55.449083Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:55.449083Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9419,"left":0.2652,"right":0.5045,"top":0.2959},"class":{"lower_clothing_colors":[{"name":"Beige","score":0.17}],"score":0.81,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.22}]},"timestamp":"2025-08-10T20:51:55.548980Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4564,"left":0.3553,"right":0.4242,"top":0.2853},"class":{"score":0.86,"type":"Face"},"timestamp":"2025-08-10T20:51:55.548980Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:55.548980Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.946,"left":0.2688,"right":0.5035,"top":0.2925},"class":{"lower_clothing_colors":[{"name":"Beige","score":0.17}],"score":0.81,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.22}]},"timestamp":"2025-08-10T20:51:55.648879Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4581,"left":0.3583,"right":0.429,"top":0.2867},"class":{"score":0.85,"type":"Face"},"timestamp":"2025-08-10T20:51:55.648879Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:55.648879Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9524,"left":0.2718,"right":0.501,"top":0.2891},"class":{"lower_clothing_colors":[{"name":"Beige","score":0.18}],"score":0.82,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.21}]},"timestamp":"2025-08-10T20:51:55.748776Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4589,"left":0.3612,"right":0.4326,"top":0.289},"class":{"score":0.85,"type":"Face"},"timestamp":"2025-08-10T20:51:55.748776Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:55.748776Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9588,"left":0.2733,"right":0.5015,"top":0.2866},"class":{"lower_clothing_colors":[{"name":"Beige","score":0.18}],"score":0.82,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.22}]},"timestamp":"2025-08-10T20:51:55.848673Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4597,"left":0.3621,"right":0.4342,"top":0.2903},"class":{"score":0.85,"type":"Face"},"timestamp":"2025-08-10T20:51:55.848673Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[{"id":"dd5091b2-ce28-4d88-aac3-1ef81a2f4512","type":"DeleteOperation"}],"timestamp":"2025-08-10T20:51:55.848673Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9603,"left":0.2749,"right":0.5007,"top":0.2834},"class":{"lower_clothing_colors":[{"name":"Beige","score":0.18}],"score":0.82,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.21}]},"timestamp":"2025-08-10T20:51:55.948571Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4604,"left":0.3629,"right":0.4352,"top":0.2912},"class":{"score":0.85,"type":"Face"},"timestamp":"2025-08-10T20:51:55.948571Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:55.948571Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9647,"left":0.2744,"right":0.4983,"top":0.2808},"class":{"lower_clothing_colors":[{"name":"Beige","score":0.18}],"score":0.83,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.21}]},"timestamp":"2025-08-10T20:51:56.048470Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4612,"left":0.3613,"right":0.4342,"top":0.2917},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:56.048470Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:56.048470Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9703,"left":0.2743,"right":0.497,"top":0.2807},"class":{"lower_clothing_colors":[{"name":"Beige","score":0.18}],"score":0.83,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.21}]},"timestamp":"2025-08-10T20:51:56.148366Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.46,"left":0.3601,"right":0.4326,"top":0.2916},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:56.148366Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:56.148366Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9744,"left":0.2736,"right":0.4951,"top":0.2759},"class":{"lower_clothing_colors":[{"name":"White","score":0.18}],"score":0.83,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.21}]},"timestamp":"2025-08-10T20:51:56.248264Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4607,"left":0.3582,"right":0.4311,"top":0.2919},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:56.248264Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:56.248264Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9799,"left":0.2736,"right":0.4929,"top":0.2745},"class":{"lower_clothing_colors":[{"name":"White","score":0.19}],"score":0.84,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.21}]},"timestamp":"2025-08-10T20:51:56.348162Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4616,"left":0.3563,"right":0.4291,"top":0.2913},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:56.348162Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:56.348162Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9881,"left":0.2734,"right":0.4942,"top":0.2717},"class":{"lower_clothing_colors":[{"name":"White","score":0.2}],"score":0.84,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.21}]},"timestamp":"2025-08-10T20:51:56.448059Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4622,"left":0.3549,"right":0.4267,"top":0.2907},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:56.448059Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:56.448059Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9935,"left":0.2693,"right":0.4927,"top":0.2716},"class":{"lower_clothing_colors":[{"name":"White","score":0.2}],"score":0.84,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.21}]},"timestamp":"2025-08-10T20:51:56.547955Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4631,"left":0.3534,"right":0.4246,"top":0.2898},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:56.547955Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:56.547955Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9976,"left":0.266,"right":0.4917,"top":0.2692},"class":{"lower_clothing_colors":[{"name":"White","score":0.21}],"score":0.84,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.21}]},"timestamp":"2025-08-10T20:51:56.647857Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4636,"left":0.3515,"right":0.4223,"top":0.2877},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:56.647857Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:56.647857Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9983,"left":0.2643,"right":0.4919,"top":0.2673},"class":{"lower_clothing_colors":[{"name":"White","score":0.21}],"score":0.85,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.21}]},"timestamp":"2025-08-10T20:51:56.747752Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4613,"left":0.3495,"right":0.4204,"top":0.2849},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:56.747752Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:56.747752Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9983,"left":0.2629,"right":0.4923,"top":0.2681},"class":{"lower_clothing_colors":[{"name":"White","score":0.21}],"score":0.85,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.21}]},"timestamp":"2025-08-10T20:51:56.847650Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4618,"left":0.3464,"right":0.4179,"top":0.2839},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:56.847650Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:56.847650Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9983,"left":0.2605,"right":0.4928,"top":0.2646},"class":{"lower_clothing_colors":[{"name":"White","score":0.21}],"score":0.85,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.21}]},"timestamp":"2025-08-10T20:51:56.947547Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4626,"left":0.3441,"right":0.416,"top":0.2828},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:56.947547Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:56.947547Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9983,"left":0.2586,"right":0.492,"top":0.2681},"class":{"lower_clothing_colors":[{"name":"White","score":0.21}],"score":0.85,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.21}]},"timestamp":"2025-08-10T20:51:57.047445Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4633,"left":0.3417,"right":0.414,"top":0.2819},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:57.047445Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:57.047445Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9983,"left":0.2579,"right":0.4909,"top":0.2692},"class":{"lower_clothing_colors":[{"name":"White","score":0.22}],"score":0.85,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.21}]},"timestamp":"2025-08-10T20:51:57.147342Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4642,"left":0.34,"right":0.4127,"top":0.2825},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:57.147342Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:57.147342Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9983,"left":0.2576,"right":0.4916,"top":0.2679},"class":{"lower_clothing_colors":[{"name":"White","score":0.22}],"score":0.85,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.21}]},"timestamp":"2025-08-10T20:51:57.247240Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4644,"left":0.3385,"right":0.4115,"top":0.2821},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:57.247240Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:57.247240Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9983,"left":0.2568,"right":0.4915,"top":0.2693},"class":{"lower_clothing_colors":[{"name":"White","score":0.22}],"score":0.85,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.21}]},"timestamp":"2025-08-10T20:51:57.347137Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4645,"left":0.3379,"right":0.411,"top":0.2819},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:57.347137Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:57.347137Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9983,"left":0.2577,"right":0.493,"top":0.2706},"class":{"lower_clothing_colors":[{"name":"White","score":0.22}],"score":0.85,"type":"Human","upper_clothing_colors":[{"name":"White","score":0.2}]},"timestamp":"2025-08-10T20:51:57.447035Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4646,"left":0.3376,"right":0.4109,"top":0.2817},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:57.447035Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:57.447035Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9983,"left":0.2578,"right":0.4921,"top":0.2694},"class":{"lower_clothing_colors":[{"name":"White","score":0.22}],"score":0.85,"type":"Human","upper_clothing_colors":[{"name":"Blue","score":0.2}]},"timestamp":"2025-08-10T20:51:57.546933Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.465,"left":0.3375,"right":0.411,"top":0.2813},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:57.546933Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:57.546933Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9983,"left":0.2572,"right":0.4909,"top":0.2699},"class":{"lower_clothing_colors":[{"name":"White","score":0.22}],"score":0.85,"type":"Human","upper_clothing_colors":[{"name":"Blue","score":0.21}]},"timestamp":"2025-08-10T20:51:57.646832Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4649,"left":0.3376,"right":0.4112,"top":0.2813},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:57.646832Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:57.646832Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9983,"left":0.2568,"right":0.4912,"top":0.2703},"class":{"lower_clothing_colors":[{"name":"White","score":0.22}],"score":0.86,"type":"Human","upper_clothing_colors":[{"name":"Blue","score":0.21}]},"timestamp":"2025-08-10T20:51:57.746726Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4655,"left":0.3379,"right":0.4115,"top":0.2823},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:57.746726Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:57.746726Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9983,"left":0.2574,"right":0.4921,"top":0.2736},"class":{"lower_clothing_colors":[{"name":"White","score":0.22}],"score":0.86,"type":"Human","upper_clothing_colors":[{"name":"Blue","score":0.21}]},"timestamp":"2025-08-10T20:51:57.846627Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.465,"left":0.3387,"right":0.4118,"top":0.283},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:57.846627Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:57.846627Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9093,"left":0.3197,"right":0.4843,"top":0.2909},"timestamp":"2025-08-10T20:51:57.946521Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4655,"left":0.3386,"right":0.4118,"top":0.2838},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:57.946521Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7427,"left":0.226,"right":0.3197,"top":0.5316},"timestamp":"2025-08-10T20:51:57.946521Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.7352,"left":0.3176,"right":0.328,"top":0.7094},"timestamp":"2025-08-10T20:51:57.946521Z","track_id":"591486b3-f329-4082-a977-2a167fb2ebcd"}],"operations":[],"timestamp":"2025-08-10T20:51:57.946521Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9093,"left":0.3197,"right":0.4843,"top":0.2909},"timestamp":"2025-08-10T20:51:58.046420Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4658,"left":0.3383,"right":0.412,"top":0.2845},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:58.046420Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7427,"left":0.226,"right":0.3197,"top":0.5316},"timestamp":"2025-08-10T20:51:58.046420Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[{"id":"591486b3-f329-4082-a977-2a167fb2ebcd","type":"DeleteOperation"}],"timestamp":"2025-08-10T20:51:58.046420Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9093,"left":0.3197,"right":0.4843,"top":0.2909},"timestamp":"2025-08-10T20:51:58.146317Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4654,"left":0.3391,"right":0.4115,"top":0.2841},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:58.146317Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7427,"left":0.226,"right":0.3197,"top":0.5316},"timestamp":"2025-08-10T20:51:58.146317Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:51:58.146317Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9093,"left":0.3197,"right":0.4843,"top":0.2909},"timestamp":"2025-08-10T20:51:58.246214Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4656,"left":0.3372,"right":0.4108,"top":0.2847},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:58.246214Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7427,"left":0.226,"right":0.319,"top":0.5316},"timestamp":"2025-08-10T20:51:58.246214Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:51:58.246214Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9093,"left":0.3197,"right":0.4843,"top":0.2909},"timestamp":"2025-08-10T20:51:58.346111Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4652,"left":0.3344,"right":0.4075,"top":0.2843},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:58.346111Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7427,"left":0.226,"right":0.3169,"top":0.5316},"timestamp":"2025-08-10T20:51:58.346111Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:51:58.346111Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9081,"left":0.3187,"right":0.4832,"top":0.2921},"timestamp":"2025-08-10T20:51:58.446011Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4637,"left":0.3316,"right":0.404,"top":0.2871},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:58.446011Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7427,"left":0.226,"right":0.3149,"top":0.5316},"timestamp":"2025-08-10T20:51:58.446011Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:51:58.446011Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9044,"left":0.3156,"right":0.4801,"top":0.2958},"timestamp":"2025-08-10T20:51:58.545908Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.462,"left":0.3268,"right":0.3983,"top":0.2877},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:58.545908Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7427,"left":0.226,"right":0.3128,"top":0.5316},"timestamp":"2025-08-10T20:51:58.545908Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:51:58.545908Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9758,"left":0.2559,"right":0.4845,"top":0.3048},"class":{"lower_clothing_colors":[{"name":"White","score":0.2}],"score":0.87,"type":"Human","upper_clothing_colors":[{"name":"Blue","score":0.21}]},"timestamp":"2025-08-10T20:51:58.645805Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4605,"left":0.3191,"right":0.3892,"top":0.2883},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:58.645805Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:58.645805Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9731,"left":0.25,"right":0.4804,"top":0.311},"class":{"lower_clothing_colors":[{"name":"White","score":0.19}],"score":0.87,"type":"Human","upper_clothing_colors":[{"name":"Blue","score":0.2}]},"timestamp":"2025-08-10T20:51:58.745702Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4602,"left":0.3078,"right":0.3771,"top":0.2916},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:58.745702Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:58.745702Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9687,"left":0.2422,"right":0.4768,"top":0.3144},"class":{"lower_clothing_colors":[{"name":"White","score":0.19}],"score":0.86,"type":"Human","upper_clothing_colors":[{"name":"Blue","score":0.2}]},"timestamp":"2025-08-10T20:51:58.845603Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.461,"left":0.294,"right":0.3627,"top":0.2958},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:58.845603Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[{"id":"590ff929-2964-42c4-a3cf-0e2d280604df","type":"DeleteOperation"},{"id":"d6b54a80-dbd1-41fe-a470-5ccb4baef76c","type":"DeleteOperation"}],"timestamp":"2025-08-10T20:51:58.845603Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9648,"left":0.233,"right":0.4776,"top":0.3179},"class":{"lower_clothing_colors":[{"name":"White","score":0.18}],"score":0.86,"type":"Human","upper_clothing_colors":[{"name":"Blue","score":0.2}]},"timestamp":"2025-08-10T20:51:58.945498Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4654,"left":0.2771,"right":0.3456,"top":0.3018},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:58.945498Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:58.945498Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9598,"left":0.2259,"right":0.4754,"top":0.3252},"class":{"lower_clothing_colors":[{"name":"White","score":0.17}],"score":0.85,"type":"Human","upper_clothing_colors":[{"name":"Blue","score":0.2}]},"timestamp":"2025-08-10T20:51:59.045396Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4718,"left":0.2576,"right":0.326,"top":0.3101},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:59.045396Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:59.045396Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9575,"left":0.2184,"right":0.4706,"top":0.336},"class":{"lower_clothing_colors":[{"name":"White","score":0.17}],"score":0.84,"type":"Human","upper_clothing_colors":[{"name":"Blue","score":0.2}]},"timestamp":"2025-08-10T20:51:59.145293Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.48,"left":0.2368,"right":0.3039,"top":0.3194},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:59.145293Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:59.145293Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9554,"left":0.2095,"right":0.4648,"top":0.3504},"class":{"lower_clothing_colors":[{"name":"White","score":0.17}],"score":0.84,"type":"Human","upper_clothing_colors":[{"name":"Blue","score":0.2}]},"timestamp":"2025-08-10T20:51:59.245191Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.4954,"left":0.2114,"right":0.2813,"top":0.3336},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:51:59.245191Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:59.245191Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9575,"left":0.1925,"right":0.4596,"top":0.3674},"class":{"lower_clothing_colors":[{"name":"White","score":0.16}],"score":0.84,"type":"Human","upper_clothing_colors":[{"name":"Blue","score":0.2}]},"timestamp":"2025-08-10T20:51:59.345088Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.5164,"left":0.1875,"right":0.2566,"top":0.357},"class":{"score":0.83,"type":"Face"},"timestamp":"2025-08-10T20:51:59.345088Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:59.345088Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9579,"left":0.1731,"right":0.458,"top":0.3819},"class":{"lower_clothing_colors":[{"name":"White","score":0.15}],"score":0.84,"type":"Human","upper_clothing_colors":[{"name":"Blue","score":0.19}]},"timestamp":"2025-08-10T20:51:59.444985Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.5402,"left":0.1647,"right":0.2323,"top":0.3868},"class":{"score":0.82,"type":"Face"},"timestamp":"2025-08-10T20:51:59.444985Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:59.444985Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.951,"left":0.1554,"right":0.4589,"top":0.3838},"class":{"lower_clothing_colors":[{"name":"Blue","score":0.15}],"score":0.82,"type":"Human","upper_clothing_colors":[{"name":"Blue","score":0.19}]},"timestamp":"2025-08-10T20:51:59.544882Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.5664,"left":0.145,"right":0.2121,"top":0.4182},"class":{"score":0.82,"type":"Face"},"timestamp":"2025-08-10T20:51:59.544882Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:59.544882Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9519,"left":0.1393,"right":0.457,"top":0.3982},"class":{"lower_clothing_colors":[{"name":"Blue","score":0.15}],"score":0.82,"type":"Human","upper_clothing_colors":[{"name":"Blue","score":0.19}]},"timestamp":"2025-08-10T20:51:59.644781Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.592,"left":0.1286,"right":0.1954,"top":0.4496},"class":{"score":0.82,"type":"Face"},"timestamp":"2025-08-10T20:51:59.644781Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:59.644781Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9631,"left":0.1183,"right":0.4565,"top":0.43},"class":{"lower_clothing_colors":[{"name":"Blue","score":0.15}],"score":0.8,"type":"Human","upper_clothing_colors":[{"name":"Black","score":0.19}]},"timestamp":"2025-08-10T20:51:59.744677Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.614,"left":0.1166,"right":0.1834,"top":0.4776},"class":{"score":0.81,"type":"Face"},"timestamp":"2025-08-10T20:51:59.744677Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:59.744677Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9676,"left":0.1038,"right":0.4481,"top":0.4596},"class":{"lower_clothing_colors":[{"name":"Blue","score":0.15}],"score":0.79,"type":"Human","upper_clothing_colors":[{"name":"Black","score":0.18}]},"timestamp":"2025-08-10T20:51:59.844576Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.6319,"left":0.1074,"right":0.1751,"top":0.5002},"class":{"score":0.8,"type":"Face"},"timestamp":"2025-08-10T20:51:59.844576Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:59.844576Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9584,"left":0.0976,"right":0.4504,"top":0.455},"class":{"lower_clothing_colors":[{"name":"Blue","score":0.15}],"score":0.78,"type":"Human","upper_clothing_colors":[{"name":"Black","score":0.18}]},"timestamp":"2025-08-10T20:51:59.944473Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.6468,"left":0.1026,"right":0.1703,"top":0.5187},"class":{"score":0.79,"type":"Face"},"timestamp":"2025-08-10T20:51:59.944473Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:51:59.944473Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9502,"left":0.0758,"right":0.4453,"top":0.4516},"class":{"lower_clothing_colors":[{"name":"Blue","score":0.14}],"score":0.77,"type":"Human","upper_clothing_colors":[{"name":"Black","score":0.19}]},"timestamp":"2025-08-10T20:52:00.044370Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"}],"operations":[],"timestamp":"2025-08-10T20:52:00.044370Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.952,"left":0.0729,"right":0.4412,"top":0.4773},"class":{"lower_clothing_colors":[{"name":"Blue","score":0.14}],"score":0.75,"type":"Human","upper_clothing_colors":[{"name":"Black","score":0.19}]},"timestamp":"2025-08-10T20:52:00.144268Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"},{"bounding_box":{"bottom":0.9007,"left":0.435,"right":0.4614,"top":0.7908},"timestamp":"2025-08-10T20:52:00.144268Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[],"timestamp":"2025-08-10T20:52:00.144268Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.9365,"left":0.0706,"right":0.4474,"top":0.4615},"class":{"lower_clothing_colors":[{"name":"Blue","score":0.14}],"score":0.75,"type":"Human","upper_clothing_colors":[{"name":"Black","score":0.19}]},"timestamp":"2025-08-10T20:52:00.244166Z","track_id":"3a1817d7-66ea-4224-9f3f-54f62e89c2d0"}],"operations":[],"timestamp":"2025-08-10T20:52:00.244166Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.6908,"left":0.1072,"right":0.2218,"top":0.5267},"timestamp":"2025-08-10T20:52:00.344063Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7427,"left":0.2406,"right":0.3073,"top":0.6576},"timestamp":"2025-08-10T20:52:00.344063Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9155,"left":0.4316,"right":0.46,"top":0.7822},"timestamp":"2025-08-10T20:52:00.344063Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5526,"left":0.2308,"right":0.2558,"top":0.5242},"timestamp":"2025-08-10T20:52:00.344063Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.7649,"left":0.3135,"right":0.3899,"top":0.6649},"timestamp":"2025-08-10T20:52:00.344063Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9464,"left":0.3989,"right":0.4309,"top":0.8427},"timestamp":"2025-08-10T20:52:00.344063Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"}],"operations":[],"timestamp":"2025-08-10T20:52:00.344063Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.6908,"left":0.1034,"right":0.2215,"top":0.5353},"timestamp":"2025-08-10T20:52:00.443961Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7427,"left":0.2406,"right":0.3121,"top":0.6514},"timestamp":"2025-08-10T20:52:00.443961Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9236,"left":0.4302,"right":0.4594,"top":0.7792},"timestamp":"2025-08-10T20:52:00.443961Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5606,"left":0.2277,"right":0.2589,"top":0.5254},"timestamp":"2025-08-10T20:52:00.443961Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.7612,"left":0.309,"right":0.386,"top":0.6649},"timestamp":"2025-08-10T20:52:00.443961Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9495,"left":0.3989,"right":0.4326,"top":0.8445},"timestamp":"2025-08-10T20:52:00.443961Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"}],"operations":[],"timestamp":"2025-08-10T20:52:00.443961Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.6908,"left":0.0982,"right":0.2142,"top":0.5464},"timestamp":"2025-08-10T20:52:00.543859Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7427,"left":0.2406,"right":0.3142,"top":0.655},"timestamp":"2025-08-10T20:52:00.543859Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9218,"left":0.4302,"right":0.4594,"top":0.7773},"timestamp":"2025-08-10T20:52:00.543859Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5699,"left":0.2266,"right":0.2579,"top":0.5291},"timestamp":"2025-08-10T20:52:00.543859Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.7612,"left":0.3079,"right":0.385,"top":0.6649},"timestamp":"2025-08-10T20:52:00.543859Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9588,"left":0.3989,"right":0.4336,"top":0.8501},"timestamp":"2025-08-10T20:52:00.543859Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"}],"operations":[],"timestamp":"2025-08-10T20:52:00.543859Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.6914,"left":0.093,"right":0.2111,"top":0.5557},"timestamp":"2025-08-10T20:52:00.643757Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7427,"left":0.2406,"right":0.3156,"top":0.6563},"timestamp":"2025-08-10T20:52:00.643757Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9205,"left":0.4302,"right":0.4597,"top":0.7779},"timestamp":"2025-08-10T20:52:00.643757Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5785,"left":0.2253,"right":0.2575,"top":0.5341},"timestamp":"2025-08-10T20:52:00.643757Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.7625,"left":0.3069,"right":0.3839,"top":0.6649},"timestamp":"2025-08-10T20:52:00.643757Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9674,"left":0.3996,"right":0.4357,"top":0.8544},"timestamp":"2025-08-10T20:52:00.643757Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.6069,"left":0.2843,"right":0.2971,"top":0.5693},"timestamp":"2025-08-10T20:52:00.643757Z","track_id":"c93329eb-5bb1-4a4a-9f2b-297583983fde"}],"operations":[],"timestamp":"2025-08-10T20:52:00.643757Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.6933,"left":0.0878,"right":0.2163,"top":0.5612},"timestamp":"2025-08-10T20:52:00.743654Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7427,"left":0.2406,"right":0.3156,"top":0.6526},"timestamp":"2025-08-10T20:52:00.743654Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9205,"left":0.4302,"right":0.4607,"top":0.7834},"timestamp":"2025-08-10T20:52:00.743654Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5859,"left":0.2232,"right":0.2586,"top":0.5415},"timestamp":"2025-08-10T20:52:00.743654Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.7662,"left":0.3059,"right":0.3829,"top":0.6649},"timestamp":"2025-08-10T20:52:00.743654Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9748,"left":0.4017,"right":0.4399,"top":0.8563},"timestamp":"2025-08-10T20:52:00.743654Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.6217,"left":0.2843,"right":0.2982,"top":0.5822},"timestamp":"2025-08-10T20:52:00.743654Z","track_id":"c93329eb-5bb1-4a4a-9f2b-297583983fde"}],"operations":[],"timestamp":"2025-08-10T20:52:00.743654Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.6958,"left":0.0837,"right":0.2177,"top":0.5662},"timestamp":"2025-08-10T20:52:00.843552Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7452,"left":0.2406,"right":0.3159,"top":0.6501},"timestamp":"2025-08-10T20:52:00.843552Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9205,"left":0.4302,"right":0.4621,"top":0.7853},"timestamp":"2025-08-10T20:52:00.843552Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5915,"left":0.2218,"right":0.2593,"top":0.5476},"timestamp":"2025-08-10T20:52:00.843552Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.7693,"left":0.3027,"right":0.3805,"top":0.6649},"timestamp":"2025-08-10T20:52:00.843552Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9797,"left":0.4031,"right":0.443,"top":0.8563},"timestamp":"2025-08-10T20:52:00.843552Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.6328,"left":0.2843,"right":0.299,"top":0.5908},"timestamp":"2025-08-10T20:52:00.843552Z","track_id":"c93329eb-5bb1-4a4a-9f2b-297583983fde"}],"operations":[],"timestamp":"2025-08-10T20:52:00.843552Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.6995,"left":0.0816,"right":0.2114,"top":0.5698},"timestamp":"2025-08-10T20:52:00.943449Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7526,"left":0.2406,"right":0.3169,"top":0.6501},"timestamp":"2025-08-10T20:52:00.943449Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9205,"left":0.4302,"right":0.4642,"top":0.7797},"timestamp":"2025-08-10T20:52:00.943449Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5933,"left":0.2218,"right":0.2593,"top":0.5514},"timestamp":"2025-08-10T20:52:00.943449Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.7711,"left":0.2954,"right":0.3753,"top":0.6649},"timestamp":"2025-08-10T20:52:00.943449Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9797,"left":0.4031,"right":0.444,"top":0.8526},"timestamp":"2025-08-10T20:52:00.943449Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.6366,"left":0.2843,"right":0.299,"top":0.5908},"timestamp":"2025-08-10T20:52:00.943449Z","track_id":"c93329eb-5bb1-4a4a-9f2b-297583983fde"}],"operations":[],"timestamp":"2025-08-10T20:52:00.943449Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.7031,"left":0.0802,"right":0.2073,"top":0.5723},"timestamp":"2025-08-10T20:52:01.043346Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7576,"left":0.2406,"right":0.3176,"top":0.6501},"timestamp":"2025-08-10T20:52:01.043346Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9205,"left":0.4302,"right":0.4659,"top":0.776},"timestamp":"2025-08-10T20:52:01.043346Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.594,"left":0.2218,"right":0.2593,"top":0.5544},"timestamp":"2025-08-10T20:52:01.043346Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.7723,"left":0.2902,"right":0.3715,"top":0.6649},"timestamp":"2025-08-10T20:52:01.043346Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9797,"left":0.4058,"right":0.445,"top":0.8507},"timestamp":"2025-08-10T20:52:01.043346Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.639,"left":0.2843,"right":0.299,"top":0.5921},"timestamp":"2025-08-10T20:52:01.043346Z","track_id":"c93329eb-5bb1-4a4a-9f2b-297583983fde"}],"operations":[],"timestamp":"2025-08-10T20:52:01.043346Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.7069,"left":0.0802,"right":0.2073,"top":0.5723},"timestamp":"2025-08-10T20:52:01.143243Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7576,"left":0.2406,"right":0.3176,"top":0.6501},"timestamp":"2025-08-10T20:52:01.143243Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9205,"left":0.4302,"right":0.467,"top":0.776},"timestamp":"2025-08-10T20:52:01.143243Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5921,"left":0.2218,"right":0.2593,"top":0.5563},"timestamp":"2025-08-10T20:52:01.143243Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.7723,"left":0.2891,"right":0.3704,"top":0.6649},"timestamp":"2025-08-10T20:52:01.143243Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9797,"left":0.4141,"right":0.4461,"top":0.8525},"timestamp":"2025-08-10T20:52:01.143243Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.639,"left":0.2843,"right":0.299,"top":0.5958},"timestamp":"2025-08-10T20:52:01.143243Z","track_id":"c93329eb-5bb1-4a4a-9f2b-297583983fde"}],"operations":[],"timestamp":"2025-08-10T20:52:01.143243Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.7094,"left":0.0798,"right":0.2069,"top":0.5735},"timestamp":"2025-08-10T20:52:01.243141Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7576,"left":0.2406,"right":0.3176,"top":0.6501},"timestamp":"2025-08-10T20:52:01.243141Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9205,"left":0.4302,"right":0.4677,"top":0.7779},"timestamp":"2025-08-10T20:52:01.243141Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5908,"left":0.2218,"right":0.2593,"top":0.5575},"timestamp":"2025-08-10T20:52:01.243141Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.7723,"left":0.2881,"right":0.3694,"top":0.6649},"timestamp":"2025-08-10T20:52:01.243141Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9797,"left":0.4186,"right":0.4461,"top":0.8531},"timestamp":"2025-08-10T20:52:01.243141Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.639,"left":0.284,"right":0.299,"top":0.5983},"timestamp":"2025-08-10T20:52:01.243141Z","track_id":"c93329eb-5bb1-4a4a-9f2b-297583983fde"}],"operations":[],"timestamp":"2025-08-10T20:52:01.243141Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.7094,"left":0.0787,"right":0.2059,"top":0.5772},"timestamp":"2025-08-10T20:52:01.343039Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7576,"left":0.2406,"right":0.3176,"top":0.6501},"timestamp":"2025-08-10T20:52:01.343039Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9205,"left":0.4302,"right":0.4677,"top":0.7834},"timestamp":"2025-08-10T20:52:01.343039Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5908,"left":0.2218,"right":0.2593,"top":0.5575},"timestamp":"2025-08-10T20:52:01.343039Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.7723,"left":0.2871,"right":0.3684,"top":0.6649},"timestamp":"2025-08-10T20:52:01.343039Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9797,"left":0.4155,"right":0.444,"top":0.8513},"timestamp":"2025-08-10T20:52:01.343039Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.639,"left":0.2829,"right":0.299,"top":0.5983},"timestamp":"2025-08-10T20:52:01.343039Z","track_id":"c93329eb-5bb1-4a4a-9f2b-297583983fde"}],"operations":[],"timestamp":"2025-08-10T20:52:01.343039Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.7094,"left":0.0777,"right":0.2055,"top":0.5797},"timestamp":"2025-08-10T20:52:01.442938Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7576,"left":0.2406,"right":0.3176,"top":0.6501},"timestamp":"2025-08-10T20:52:01.442938Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9205,"left":0.4305,"right":0.4683,"top":0.7871},"timestamp":"2025-08-10T20:52:01.442938Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5908,"left":0.2218,"right":0.2593,"top":0.5575},"timestamp":"2025-08-10T20:52:01.442938Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.7723,"left":0.2864,"right":0.3677,"top":0.6649},"timestamp":"2025-08-10T20:52:01.442938Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9797,"left":0.4135,"right":0.4426,"top":0.8501},"timestamp":"2025-08-10T20:52:01.442938Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.639,"left":0.2822,"right":0.299,"top":0.5983},"timestamp":"2025-08-10T20:52:01.442938Z","track_id":"c93329eb-5bb1-4a4a-9f2b-297583983fde"}],"operations":[],"timestamp":"2025-08-10T20:52:01.442938Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.7094,"left":0.0766,"right":0.2066,"top":0.5797},"timestamp":"2025-08-10T20:52:01.542834Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7576,"left":0.2406,"right":0.3176,"top":0.6501},"timestamp":"2025-08-10T20:52:01.542834Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9205,"left":0.4316,"right":0.4704,"top":0.7871},"timestamp":"2025-08-10T20:52:01.542834Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5908,"left":0.2218,"right":0.2593,"top":0.5575},"timestamp":"2025-08-10T20:52:01.542834Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.7723,"left":0.2864,"right":0.3677,"top":0.6649},"timestamp":"2025-08-10T20:52:01.542834Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9797,"left":0.4135,"right":0.4426,"top":0.8501},"timestamp":"2025-08-10T20:52:01.542834Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.639,"left":0.2822,"right":0.299,"top":0.5983},"timestamp":"2025-08-10T20:52:01.542834Z","track_id":"c93329eb-5bb1-4a4a-9f2b-297583983fde"}],"operations":[],"timestamp":"2025-08-10T20:52:01.542834Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.7081,"left":0.0763,"right":0.2069,"top":0.5797},"timestamp":"2025-08-10T20:52:01.642732Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7576,"left":0.2406,"right":0.3176,"top":0.6501},"timestamp":"2025-08-10T20:52:01.642732Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9187,"left":0.4319,"right":0.4718,"top":0.7853},"timestamp":"2025-08-10T20:52:01.642732Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5908,"left":0.2218,"right":0.2593,"top":0.5581},"timestamp":"2025-08-10T20:52:01.642732Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.7723,"left":0.2864,"right":0.3677,"top":0.6649},"timestamp":"2025-08-10T20:52:01.642732Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9797,"left":0.4141,"right":0.4433,"top":0.8501},"timestamp":"2025-08-10T20:52:01.642732Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.639,"left":0.2822,"right":0.299,"top":0.5989},"timestamp":"2025-08-10T20:52:01.642732Z","track_id":"c93329eb-5bb1-4a4a-9f2b-297583983fde"},{"bounding_box":{"bottom":0.984,"left":0.4656,"right":0.4916,"top":0.9495},"timestamp":"2025-08-10T20:52:01.642732Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"}],"operations":[],"timestamp":"2025-08-10T20:52:01.642732Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.7044,"left":0.0773,"right":0.2059,"top":0.5797},"timestamp":"2025-08-10T20:52:01.742629Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7576,"left":0.2406,"right":0.3176,"top":0.6501},"timestamp":"2025-08-10T20:52:01.742629Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.913,"left":0.4309,"right":0.4718,"top":0.7797},"timestamp":"2025-08-10T20:52:01.742629Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5908,"left":0.2218,"right":0.2593,"top":0.5599},"timestamp":"2025-08-10T20:52:01.742629Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.7723,"left":0.2864,"right":0.3677,"top":0.6649},"timestamp":"2025-08-10T20:52:01.742629Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9797,"left":0.4162,"right":0.4454,"top":0.8501},"timestamp":"2025-08-10T20:52:01.742629Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.639,"left":0.2822,"right":0.299,"top":0.6007},"timestamp":"2025-08-10T20:52:01.742629Z","track_id":"c93329eb-5bb1-4a4a-9f2b-297583983fde"},{"bounding_box":{"bottom":0.9859,"left":0.4656,"right":0.4948,"top":0.9476},"timestamp":"2025-08-10T20:52:01.742629Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"}],"operations":[],"timestamp":"2025-08-10T20:52:01.742629Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.7007,"left":0.0794,"right":0.2059,"top":0.576},"timestamp":"2025-08-10T20:52:01.842526Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7576,"left":0.2406,"right":0.3176,"top":0.6501},"timestamp":"2025-08-10T20:52:01.842526Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9093,"left":0.4312,"right":0.4715,"top":0.7816},"timestamp":"2025-08-10T20:52:01.842526Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5896,"left":0.2239,"right":0.2593,"top":0.5612},"timestamp":"2025-08-10T20:52:01.842526Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.7723,"left":0.2864,"right":0.3677,"top":0.6649},"timestamp":"2025-08-10T20:52:01.842526Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9797,"left":0.4176,"right":0.4468,"top":0.8532},"timestamp":"2025-08-10T20:52:01.842526Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.6341,"left":0.2826,"right":0.2986,"top":0.6007},"timestamp":"2025-08-10T20:52:01.842526Z","track_id":"c93329eb-5bb1-4a4a-9f2b-297583983fde"},{"bounding_box":{"bottom":0.989,"left":0.4659,"right":0.4986,"top":0.9464},"timestamp":"2025-08-10T20:52:01.842526Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"}],"operations":[],"timestamp":"2025-08-10T20:52:01.842526Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.697,"left":0.0836,"right":0.208,"top":0.5649},"timestamp":"2025-08-10T20:52:01.942424Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7576,"left":0.2406,"right":0.3176,"top":0.6501},"timestamp":"2025-08-10T20:52:01.942424Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9093,"left":0.4343,"right":0.4704,"top":0.7982},"timestamp":"2025-08-10T20:52:01.942424Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5859,"left":0.2301,"right":0.2593,"top":0.5612},"timestamp":"2025-08-10T20:52:01.942424Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.7723,"left":0.2864,"right":0.3677,"top":0.6649},"timestamp":"2025-08-10T20:52:01.942424Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9797,"left":0.4176,"right":0.4468,"top":0.8625},"timestamp":"2025-08-10T20:52:01.942424Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.6193,"left":0.2836,"right":0.2975,"top":0.597},"timestamp":"2025-08-10T20:52:01.942424Z","track_id":"c93329eb-5bb1-4a4a-9f2b-297583983fde"},{"bounding_box":{"bottom":0.9946,"left":0.467,"right":0.5037,"top":0.9464},"timestamp":"2025-08-10T20:52:01.942424Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"}],"operations":[],"timestamp":"2025-08-10T20:52:01.942424Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.6933,"left":0.0902,"right":0.2097,"top":0.5476},"timestamp":"2025-08-10T20:52:02.042322Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7576,"left":0.2406,"right":0.3176,"top":0.6501},"timestamp":"2025-08-10T20:52:02.042322Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9093,"left":0.4357,"right":0.4701,"top":0.8063},"timestamp":"2025-08-10T20:52:02.042322Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.7717,"left":0.2864,"right":0.3677,"top":0.6637},"timestamp":"2025-08-10T20:52:02.042322Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9797,"left":0.4169,"right":0.4468,"top":0.8693},"timestamp":"2025-08-10T20:52:02.042322Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.9983,"left":0.4673,"right":0.5069,"top":0.9489},"timestamp":"2025-08-10T20:52:02.042322Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"}],"operations":[],"timestamp":"2025-08-10T20:52:02.042322Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.6896,"left":0.1016,"right":0.2107,"top":0.518},"timestamp":"2025-08-10T20:52:02.142218Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7576,"left":0.2406,"right":0.3176,"top":0.6501},"timestamp":"2025-08-10T20:52:02.142218Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9093,"left":0.4336,"right":0.4711,"top":0.797},"timestamp":"2025-08-10T20:52:02.142218Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.7699,"left":0.2864,"right":0.3677,"top":0.66},"timestamp":"2025-08-10T20:52:02.142218Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9797,"left":0.4148,"right":0.4468,"top":0.8711},"timestamp":"2025-08-10T20:52:02.142218Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.9983,"left":0.4663,"right":0.5058,"top":0.9563},"timestamp":"2025-08-10T20:52:02.142218Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"}],"operations":[],"timestamp":"2025-08-10T20:52:02.142218Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.6834,"left":0.1141,"right":0.2128,"top":0.4884},"timestamp":"2025-08-10T20:52:02.242117Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7551,"left":0.2406,"right":0.3138,"top":0.6563},"timestamp":"2025-08-10T20:52:02.242117Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9081,"left":0.4316,"right":0.4735,"top":0.7866},"timestamp":"2025-08-10T20:52:02.242117Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.7643,"left":0.2909,"right":0.3701,"top":0.6501},"timestamp":"2025-08-10T20:52:02.242117Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.968,"left":0.4135,"right":0.4457,"top":0.8692},"timestamp":"2025-08-10T20:52:02.242117Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.9983,"left":0.4649,"right":0.4996,"top":0.9643},"timestamp":"2025-08-10T20:52:02.242117Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"}],"operations":[],"timestamp":"2025-08-10T20:52:02.242117Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.6723,"left":0.1287,"right":0.217,"top":0.4587},"timestamp":"2025-08-10T20:52:02.342014Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7476,"left":0.2406,"right":0.3023,"top":0.6748},"timestamp":"2025-08-10T20:52:02.342014Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9044,"left":0.4295,"right":0.4787,"top":0.7736},"timestamp":"2025-08-10T20:52:02.342014Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.7513,"left":0.3044,"right":0.3774,"top":0.6278},"timestamp":"2025-08-10T20:52:02.342014Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9328,"left":0.4135,"right":0.4426,"top":0.8599},"timestamp":"2025-08-10T20:52:02.342014Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.9983,"left":0.4628,"right":0.4829,"top":0.9736},"timestamp":"2025-08-10T20:52:02.342014Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"}],"operations":[],"timestamp":"2025-08-10T20:52:02.342014Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.6563,"left":0.1457,"right":0.2249,"top":0.4316},"timestamp":"2025-08-10T20:52:02.441912Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7414,"left":0.2406,"right":0.2933,"top":0.6847},"timestamp":"2025-08-10T20:52:02.441912Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9051,"left":0.4278,"right":0.4836,"top":0.763},"timestamp":"2025-08-10T20:52:02.441912Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.7458,"left":0.3166,"right":0.3902,"top":0.6038},"timestamp":"2025-08-10T20:52:02.441912Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9093,"left":0.4131,"right":0.4416,"top":0.8538},"timestamp":"2025-08-10T20:52:02.441912Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.9964,"left":0.4611,"right":0.4735,"top":0.9748},"timestamp":"2025-08-10T20:52:02.441912Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"}],"operations":[{"id":"c93329eb-5bb1-4a4a-9f2b-297583983fde","type":"DeleteOperation"}],"timestamp":"2025-08-10T20:52:02.441912Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.6303,"left":0.1676,"right":0.2406,"top":0.4093},"timestamp":"2025-08-10T20:52:02.541810Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7377,"left":0.2406,"right":0.2891,"top":0.6773},"timestamp":"2025-08-10T20:52:02.541810Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9143,"left":0.4267,"right":0.4878,"top":0.7575},"timestamp":"2025-08-10T20:52:02.541810Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.755,"left":0.326,"right":0.4142,"top":0.576},"timestamp":"2025-08-10T20:52:02.541810Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9093,"left":0.4121,"right":0.4447,"top":0.8538},"timestamp":"2025-08-10T20:52:02.541810Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.9909,"left":0.46,"right":0.4787,"top":0.96},"timestamp":"2025-08-10T20:52:02.541810Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"}],"operations":[],"timestamp":"2025-08-10T20:52:02.541810Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.5252,"left":0.1784,"right":0.2494,"top":0.3652},"class":{"score":0.51,"type":"Face"},"timestamp":"2025-08-10T20:52:02.641708Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7352,"left":0.2406,"right":0.2826,"top":0.6748},"timestamp":"2025-08-10T20:52:02.641708Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9199,"left":0.426,"right":0.4927,"top":0.7495},"timestamp":"2025-08-10T20:52:02.641708Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5927,"left":0.2434,"right":0.2496,"top":0.5599},"timestamp":"2025-08-10T20:52:02.641708Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.7594,"left":0.3368,"right":0.4333,"top":0.5519},"timestamp":"2025-08-10T20:52:02.641708Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9093,"left":0.4124,"right":0.4468,"top":0.8538},"timestamp":"2025-08-10T20:52:02.641708Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.989,"left":0.4604,"right":0.4832,"top":0.9482},"timestamp":"2025-08-10T20:52:02.641708Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"}],"operations":[],"timestamp":"2025-08-10T20:52:02.641708Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4987,"left":0.2028,"right":0.2726,"top":0.3362},"class":{"score":0.53,"type":"Face"},"timestamp":"2025-08-10T20:52:02.741604Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7352,"left":0.2406,"right":0.2711,"top":0.6822},"timestamp":"2025-08-10T20:52:02.741604Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.918,"left":0.426,"right":0.4989,"top":0.7365},"timestamp":"2025-08-10T20:52:02.741604Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5982,"left":0.2454,"right":0.2517,"top":0.5563},"timestamp":"2025-08-10T20:52:02.741604Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.7538,"left":0.3503,"right":0.4426,"top":0.5353},"timestamp":"2025-08-10T20:52:02.741604Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9093,"left":0.4155,"right":0.4468,"top":0.8538},"timestamp":"2025-08-10T20:52:02.741604Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.9946,"left":0.4635,"right":0.4864,"top":0.9427},"timestamp":"2025-08-10T20:52:02.741604Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"}],"operations":[],"timestamp":"2025-08-10T20:52:02.741604Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4758,"left":0.2264,"right":0.2955,"top":0.313},"class":{"score":0.55,"type":"Face"},"timestamp":"2025-08-10T20:52:02.841504Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7365,"left":0.2409,"right":0.2662,"top":0.6803},"timestamp":"2025-08-10T20:52:02.841504Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9161,"left":0.426,"right":0.5031,"top":0.7273},"timestamp":"2025-08-10T20:52:02.841504Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.7538,"left":0.3558,"right":0.4516,"top":0.518},"timestamp":"2025-08-10T20:52:02.841504Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9093,"left":0.4173,"right":0.4468,"top":0.8538},"timestamp":"2025-08-10T20:52:02.841504Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.9983,"left":0.4663,"right":0.4892,"top":0.939},"timestamp":"2025-08-10T20:52:02.841504Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"}],"operations":[],"timestamp":"2025-08-10T20:52:02.841504Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4599,"left":0.2485,"right":0.3164,"top":0.2944},"class":{"score":0.57,"type":"Face"},"timestamp":"2025-08-10T20:52:02.941399Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7402,"left":0.242,"right":0.2746,"top":0.66},"timestamp":"2025-08-10T20:52:02.941399Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9143,"left":0.426,"right":0.5031,"top":0.7254},"timestamp":"2025-08-10T20:52:02.941399Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.7649,"left":0.3454,"right":0.46,"top":0.4995},"timestamp":"2025-08-10T20:52:02.941399Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9093,"left":0.4162,"right":0.4468,"top":0.8538},"timestamp":"2025-08-10T20:52:02.941399Z","track_id":"40911fb9-6226-4481-8eb9-8696bea5dfd5"},{"bounding_box":{"bottom":0.9983,"left":0.4683,"right":0.4913,"top":0.939},"timestamp":"2025-08-10T20:52:02.941399Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"}],"operations":[],"timestamp":"2025-08-10T20:52:02.941399Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4484,"left":0.2708,"right":0.3383,"top":0.2811},"class":{"score":0.58,"type":"Face"},"timestamp":"2025-08-10T20:52:03.041298Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7427,"left":0.243,"right":0.2812,"top":0.6464},"timestamp":"2025-08-10T20:52:03.041298Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4236,"right":0.5027,"top":0.7241},"timestamp":"2025-08-10T20:52:03.041298Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.7729,"left":0.3406,"right":0.4656,"top":0.4816},"timestamp":"2025-08-10T20:52:03.041298Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9983,"left":0.4701,"right":0.493,"top":0.939},"timestamp":"2025-08-10T20:52:03.041298Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"}],"operations":[],"timestamp":"2025-08-10T20:52:03.041298Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.439,"left":0.2901,"right":0.3582,"top":0.2715},"class":{"score":0.6,"type":"Face"},"timestamp":"2025-08-10T20:52:03.141195Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7427,"left":0.2441,"right":0.2843,"top":0.6464},"timestamp":"2025-08-10T20:52:03.141195Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4163,"right":0.5017,"top":0.7241},"timestamp":"2025-08-10T20:52:03.141195Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.7748,"left":0.3468,"right":0.4656,"top":0.465},"timestamp":"2025-08-10T20:52:03.141195Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9983,"left":0.4711,"right":0.4941,"top":0.939},"timestamp":"2025-08-10T20:52:03.141195Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"}],"operations":[],"timestamp":"2025-08-10T20:52:03.141195Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4325,"left":0.3054,"right":0.3742,"top":0.264},"class":{"score":0.61,"type":"Face"},"timestamp":"2025-08-10T20:52:03.241097Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7365,"left":0.2454,"right":0.2881,"top":0.647},"timestamp":"2025-08-10T20:52:03.241097Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4117,"right":0.5013,"top":0.7241},"timestamp":"2025-08-10T20:52:03.241097Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5989,"left":0.2406,"right":0.2448,"top":0.5538},"timestamp":"2025-08-10T20:52:03.241097Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.776,"left":0.3503,"right":0.4656,"top":0.4539},"timestamp":"2025-08-10T20:52:03.241097Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9958,"left":0.4721,"right":0.4948,"top":0.939},"timestamp":"2025-08-10T20:52:03.241097Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"},{"bounding_box":{"bottom":0.5118,"left":0.3169,"right":0.4065,"top":0.4081},"timestamp":"2025-08-10T20:52:03.241097Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:03.241097Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4295,"left":0.3181,"right":0.3866,"top":0.2618},"class":{"score":0.63,"type":"Face"},"timestamp":"2025-08-10T20:52:03.340990Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.718,"left":0.2475,"right":0.2933,"top":0.6489},"timestamp":"2025-08-10T20:52:03.340990Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4128,"right":0.5024,"top":0.7241},"timestamp":"2025-08-10T20:52:03.340990Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.6007,"left":0.2406,"right":0.2448,"top":0.5538},"timestamp":"2025-08-10T20:52:03.340990Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.776,"left":0.3482,"right":0.4656,"top":0.4539},"timestamp":"2025-08-10T20:52:03.340990Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9884,"left":0.4732,"right":0.4948,"top":0.939},"timestamp":"2025-08-10T20:52:03.340990Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"},{"bounding_box":{"bottom":0.5081,"left":0.3149,"right":0.4045,"top":0.4044},"timestamp":"2025-08-10T20:52:03.340990Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:03.340990Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4298,"left":0.3288,"right":0.3967,"top":0.2612},"class":{"score":0.64,"type":"Face"},"timestamp":"2025-08-10T20:52:03.440889Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7106,"left":0.2489,"right":0.2971,"top":0.6495},"timestamp":"2025-08-10T20:52:03.440889Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4141,"right":0.5037,"top":0.7241},"timestamp":"2025-08-10T20:52:03.440889Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.6019,"left":0.2406,"right":0.2448,"top":0.5538},"timestamp":"2025-08-10T20:52:03.440889Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.776,"left":0.3468,"right":0.4663,"top":0.4539},"timestamp":"2025-08-10T20:52:03.440889Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9834,"left":0.4739,"right":0.4948,"top":0.939},"timestamp":"2025-08-10T20:52:03.440889Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"},{"bounding_box":{"bottom":0.5223,"left":0.3124,"right":0.4145,"top":0.4007},"timestamp":"2025-08-10T20:52:03.440889Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:03.440889Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4312,"left":0.3361,"right":0.4051,"top":0.2615},"class":{"score":0.66,"type":"Face"},"timestamp":"2025-08-10T20:52:03.540784Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7254,"left":0.2489,"right":0.2982,"top":0.6476},"timestamp":"2025-08-10T20:52:03.540784Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4162,"right":0.5058,"top":0.7241},"timestamp":"2025-08-10T20:52:03.540784Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.6019,"left":0.2406,"right":0.2448,"top":0.5538},"timestamp":"2025-08-10T20:52:03.540784Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.776,"left":0.3468,"right":0.4683,"top":0.4539},"timestamp":"2025-08-10T20:52:03.540784Z","track_id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158"},{"bounding_box":{"bottom":0.9834,"left":0.4739,"right":0.4948,"top":0.939},"timestamp":"2025-08-10T20:52:03.540784Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"},{"bounding_box":{"bottom":0.5723,"left":0.3093,"right":0.4489,"top":0.397},"timestamp":"2025-08-10T20:52:03.540784Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:03.540784Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4328,"left":0.341,"right":0.4112,"top":0.2632},"class":{"score":0.67,"type":"Face"},"timestamp":"2025-08-10T20:52:03.640689Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7328,"left":0.2489,"right":0.299,"top":0.6458},"timestamp":"2025-08-10T20:52:03.640689Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:03.640689Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.6019,"left":0.2406,"right":0.2448,"top":0.5538},"timestamp":"2025-08-10T20:52:03.640689Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.9834,"left":0.4739,"right":0.4948,"top":0.939},"timestamp":"2025-08-10T20:52:03.640689Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"},{"bounding_box":{"bottom":0.6045,"left":0.3079,"right":0.4711,"top":0.3896},"timestamp":"2025-08-10T20:52:03.640689Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"},{"bounding_box":{"bottom":0.4908,"left":0.2843,"right":0.3038,"top":0.4551},"timestamp":"2025-08-10T20:52:03.640689Z","track_id":"90edf393-65a4-45c0-969f-a06acee42fac"}],"operations":[{"id":"7289aaf6-6ca7-400b-ac8b-be5a7ac5f158","type":"DeleteOperation"}],"timestamp":"2025-08-10T20:52:03.640689Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4348,"left":0.3449,"right":0.4147,"top":0.2653},"class":{"score":0.68,"type":"Face"},"timestamp":"2025-08-10T20:52:03.740579Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7254,"left":0.2489,"right":0.299,"top":0.6439},"timestamp":"2025-08-10T20:52:03.740579Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:03.740579Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.6019,"left":0.2406,"right":0.2448,"top":0.5538},"timestamp":"2025-08-10T20:52:03.740579Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.9834,"left":0.4739,"right":0.4948,"top":0.939},"timestamp":"2025-08-10T20:52:03.740579Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"},{"bounding_box":{"bottom":0.6007,"left":0.31,"right":0.469,"top":0.3748},"timestamp":"2025-08-10T20:52:03.740579Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"},{"bounding_box":{"bottom":0.4908,"left":0.2843,"right":0.2996,"top":0.4587},"timestamp":"2025-08-10T20:52:03.740579Z","track_id":"90edf393-65a4-45c0-969f-a06acee42fac"}],"operations":[],"timestamp":"2025-08-10T20:52:03.740579Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4374,"left":0.3468,"right":0.416,"top":0.2681},"class":{"score":0.69,"type":"Face"},"timestamp":"2025-08-10T20:52:03.840479Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.2489,"right":0.299,"top":0.6433},"timestamp":"2025-08-10T20:52:03.840479Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:03.840479Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.6019,"left":0.2406,"right":0.2448,"top":0.5538},"timestamp":"2025-08-10T20:52:03.840479Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.9834,"left":0.4739,"right":0.4948,"top":0.939},"timestamp":"2025-08-10T20:52:03.840479Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"},{"bounding_box":{"bottom":0.5946,"left":0.334,"right":0.4677,"top":0.3785},"timestamp":"2025-08-10T20:52:03.840479Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"},{"bounding_box":{"bottom":0.4908,"left":0.2846,"right":0.2968,"top":0.463},"timestamp":"2025-08-10T20:52:03.840479Z","track_id":"90edf393-65a4-45c0-969f-a06acee42fac"}],"operations":[],"timestamp":"2025-08-10T20:52:03.840479Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4402,"left":0.347,"right":0.4156,"top":0.2712},"class":{"score":0.7,"type":"Face"},"timestamp":"2025-08-10T20:52:03.940374Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.2489,"right":0.299,"top":0.6451},"timestamp":"2025-08-10T20:52:03.940374Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:03.940374Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.6019,"left":0.2406,"right":0.2448,"top":0.5538},"timestamp":"2025-08-10T20:52:03.940374Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.9834,"left":0.4739,"right":0.4948,"top":0.939},"timestamp":"2025-08-10T20:52:03.940374Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"},{"bounding_box":{"bottom":0.5835,"left":0.4017,"right":0.4677,"top":0.4192},"timestamp":"2025-08-10T20:52:03.940374Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"},{"bounding_box":{"bottom":0.4908,"left":0.2857,"right":0.2968,"top":0.4686},"timestamp":"2025-08-10T20:52:03.940374Z","track_id":"90edf393-65a4-45c0-969f-a06acee42fac"}],"operations":[],"timestamp":"2025-08-10T20:52:03.940374Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4425,"left":0.3456,"right":0.414,"top":0.2739},"class":{"score":0.71,"type":"Face"},"timestamp":"2025-08-10T20:52:04.040275Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.2492,"right":0.299,"top":0.6464},"timestamp":"2025-08-10T20:52:04.040275Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:04.040275Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.6019,"left":0.2406,"right":0.2448,"top":0.5538},"timestamp":"2025-08-10T20:52:04.040275Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.9834,"left":0.4739,"right":0.4948,"top":0.939},"timestamp":"2025-08-10T20:52:04.040275Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"},{"bounding_box":{"bottom":0.5773,"left":0.4461,"right":0.4677,"top":0.4452},"timestamp":"2025-08-10T20:52:04.040275Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"},{"bounding_box":{"bottom":0.4908,"left":0.2864,"right":0.2968,"top":0.4723},"timestamp":"2025-08-10T20:52:04.040275Z","track_id":"90edf393-65a4-45c0-969f-a06acee42fac"}],"operations":[],"timestamp":"2025-08-10T20:52:04.040275Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4453,"left":0.3439,"right":0.4118,"top":0.2771},"class":{"score":0.72,"type":"Face"},"timestamp":"2025-08-10T20:52:04.140170Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.2503,"right":0.299,"top":0.6464},"timestamp":"2025-08-10T20:52:04.140170Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:04.140170Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.6019,"left":0.2406,"right":0.2448,"top":0.5538},"timestamp":"2025-08-10T20:52:04.140170Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.9834,"left":0.4739,"right":0.4948,"top":0.939},"timestamp":"2025-08-10T20:52:04.140170Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"},{"bounding_box":{"bottom":0.5809,"left":0.444,"right":0.4677,"top":0.4414},"timestamp":"2025-08-10T20:52:04.140170Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"},{"bounding_box":{"bottom":0.4908,"left":0.2864,"right":0.2968,"top":0.4723},"timestamp":"2025-08-10T20:52:04.140170Z","track_id":"90edf393-65a4-45c0-969f-a06acee42fac"}],"operations":[],"timestamp":"2025-08-10T20:52:04.140170Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4473,"left":0.3417,"right":0.4093,"top":0.2796},"class":{"score":0.73,"type":"Face"},"timestamp":"2025-08-10T20:52:04.240069Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.299,"top":0.6464},"timestamp":"2025-08-10T20:52:04.240069Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:04.240069Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.6019,"left":0.2406,"right":0.2448,"top":0.5538},"timestamp":"2025-08-10T20:52:04.240069Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.9834,"left":0.4739,"right":0.4948,"top":0.939},"timestamp":"2025-08-10T20:52:04.240069Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"},{"bounding_box":{"bottom":0.5834,"left":0.4399,"right":0.467,"top":0.439},"timestamp":"2025-08-10T20:52:04.240069Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"},{"bounding_box":{"bottom":0.4908,"left":0.2864,"right":0.2968,"top":0.4723},"timestamp":"2025-08-10T20:52:04.240069Z","track_id":"90edf393-65a4-45c0-969f-a06acee42fac"}],"operations":[],"timestamp":"2025-08-10T20:52:04.240069Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4496,"left":0.3395,"right":0.4067,"top":0.2823},"class":{"score":0.73,"type":"Face"},"timestamp":"2025-08-10T20:52:04.339965Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.299,"top":0.6464},"timestamp":"2025-08-10T20:52:04.339965Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:04.339965Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.6019,"left":0.2406,"right":0.2448,"top":0.5538},"timestamp":"2025-08-10T20:52:04.339965Z","track_id":"e7d536b3-2cb0-494e-8b1d-697988d8f236"},{"bounding_box":{"bottom":0.9834,"left":0.4739,"right":0.4948,"top":0.939},"timestamp":"2025-08-10T20:52:04.339965Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"},{"bounding_box":{"bottom":0.5834,"left":0.4316,"right":0.4649,"top":0.439},"timestamp":"2025-08-10T20:52:04.339965Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"},{"bounding_box":{"bottom":0.4908,"left":0.2864,"right":0.2968,"top":0.4723},"timestamp":"2025-08-10T20:52:04.339965Z","track_id":"90edf393-65a4-45c0-969f-a06acee42fac"}],"operations":[],"timestamp":"2025-08-10T20:52:04.339965Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4515,"left":0.3374,"right":0.4043,"top":0.2847},"class":{"score":0.74,"type":"Face"},"timestamp":"2025-08-10T20:52:04.439864Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2986,"top":0.6464},"timestamp":"2025-08-10T20:52:04.439864Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:04.439864Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.984,"left":0.4739,"right":0.4948,"top":0.939},"timestamp":"2025-08-10T20:52:04.439864Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"},{"bounding_box":{"bottom":0.5834,"left":0.4257,"right":0.4635,"top":0.439},"timestamp":"2025-08-10T20:52:04.439864Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[{"id":"e7d536b3-2cb0-494e-8b1d-697988d8f236","type":"DeleteOperation"}],"timestamp":"2025-08-10T20:52:04.439864Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4531,"left":0.3349,"right":0.4015,"top":0.2867},"class":{"score":0.75,"type":"Face"},"timestamp":"2025-08-10T20:52:04.539761Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2975,"top":0.6464},"timestamp":"2025-08-10T20:52:04.539761Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:04.539761Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.9859,"left":0.4739,"right":0.4948,"top":0.939},"timestamp":"2025-08-10T20:52:04.539761Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"},{"bounding_box":{"bottom":0.5834,"left":0.4246,"right":0.4635,"top":0.439},"timestamp":"2025-08-10T20:52:04.539761Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:04.539761Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4543,"left":0.3325,"right":0.3997,"top":0.2883},"class":{"score":0.75,"type":"Face"},"timestamp":"2025-08-10T20:52:04.639659Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2968,"top":0.6464},"timestamp":"2025-08-10T20:52:04.639659Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:04.639659Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.9866,"left":0.4739,"right":0.4948,"top":0.939},"timestamp":"2025-08-10T20:52:04.639659Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"},{"bounding_box":{"bottom":0.5834,"left":0.4236,"right":0.4635,"top":0.439},"timestamp":"2025-08-10T20:52:04.639659Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:04.639659Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4552,"left":0.3306,"right":0.3983,"top":0.2896},"class":{"score":0.76,"type":"Face"},"timestamp":"2025-08-10T20:52:04.739555Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2968,"top":0.6464},"timestamp":"2025-08-10T20:52:04.739555Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:04.739555Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.9847,"left":0.4739,"right":0.4948,"top":0.939},"timestamp":"2025-08-10T20:52:04.739555Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"},{"bounding_box":{"bottom":0.5834,"left":0.4225,"right":0.4635,"top":0.439},"timestamp":"2025-08-10T20:52:04.739555Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:04.739555Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4558,"left":0.3288,"right":0.3975,"top":0.2906},"class":{"score":0.76,"type":"Face"},"timestamp":"2025-08-10T20:52:04.839454Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2964,"top":0.6464},"timestamp":"2025-08-10T20:52:04.839454Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:04.839454Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.9834,"left":0.4739,"right":0.4948,"top":0.939},"timestamp":"2025-08-10T20:52:04.839454Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4635,"top":0.439},"timestamp":"2025-08-10T20:52:04.839454Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[{"id":"90edf393-65a4-45c0-969f-a06acee42fac","type":"DeleteOperation"}],"timestamp":"2025-08-10T20:52:04.839454Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4562,"left":0.3277,"right":0.3967,"top":0.2913},"class":{"score":0.77,"type":"Face"},"timestamp":"2025-08-10T20:52:04.939350Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2954,"top":0.6464},"timestamp":"2025-08-10T20:52:04.939350Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:04.939350Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.9834,"left":0.4739,"right":0.4948,"top":0.939},"timestamp":"2025-08-10T20:52:04.939350Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4635,"top":0.439},"timestamp":"2025-08-10T20:52:04.939350Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:04.939350Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4565,"left":0.3269,"right":0.3961,"top":0.2919},"class":{"score":0.77,"type":"Face"},"timestamp":"2025-08-10T20:52:05.039249Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2943,"top":0.6464},"timestamp":"2025-08-10T20:52:05.039249Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:05.039249Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.9834,"left":0.4739,"right":0.4948,"top":0.939},"timestamp":"2025-08-10T20:52:05.039249Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4638,"top":0.439},"timestamp":"2025-08-10T20:52:05.039249Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:05.039249Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4565,"left":0.3264,"right":0.3958,"top":0.2922},"class":{"score":0.78,"type":"Face"},"timestamp":"2025-08-10T20:52:05.139146Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2933,"top":0.6464},"timestamp":"2025-08-10T20:52:05.139146Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:05.139146Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.9834,"left":0.4739,"right":0.4948,"top":0.939},"timestamp":"2025-08-10T20:52:05.139146Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4649,"top":0.439},"timestamp":"2025-08-10T20:52:05.139146Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:05.139146Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.457,"left":0.3259,"right":0.3959,"top":0.293},"class":{"score":0.78,"type":"Face"},"timestamp":"2025-08-10T20:52:05.239044Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:05.239044Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:05.239044Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.9834,"left":0.4739,"right":0.4948,"top":0.939},"timestamp":"2025-08-10T20:52:05.239044Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4656,"top":0.439},"timestamp":"2025-08-10T20:52:05.239044Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:05.239044Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4568,"left":0.3258,"right":0.3958,"top":0.293},"class":{"score":0.79,"type":"Face"},"timestamp":"2025-08-10T20:52:05.338942Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:05.338942Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:05.338942Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.9834,"left":0.4739,"right":0.4948,"top":0.939},"timestamp":"2025-08-10T20:52:05.338942Z","track_id":"75746fe5-7fee-497f-b369-39eb98445d09"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4656,"top":0.439},"timestamp":"2025-08-10T20:52:05.338942Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:05.338942Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4569,"left":0.3242,"right":0.3948,"top":0.2925},"class":{"score":0.79,"type":"Face"},"timestamp":"2025-08-10T20:52:05.438840Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:05.438840Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:05.438840Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4656,"top":0.4396},"timestamp":"2025-08-10T20:52:05.438840Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[{"id":"75746fe5-7fee-497f-b369-39eb98445d09","type":"DeleteOperation"}],"timestamp":"2025-08-10T20:52:05.438840Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4583,"left":0.3226,"right":0.3945,"top":0.2945},"class":{"score":0.8,"type":"Face"},"timestamp":"2025-08-10T20:52:05.538736Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:05.538736Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:05.538736Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4656,"top":0.4415},"timestamp":"2025-08-10T20:52:05.538736Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:05.538736Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4585,"left":0.3222,"right":0.3948,"top":0.2942},"class":{"score":0.8,"type":"Face"},"timestamp":"2025-08-10T20:52:05.638635Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2929,"top":0.6464},"timestamp":"2025-08-10T20:52:05.638635Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:05.638635Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4656,"top":0.4427},"timestamp":"2025-08-10T20:52:05.638635Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:05.638635Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4583,"left":0.3223,"right":0.3949,"top":0.2943},"class":{"score":0.8,"type":"Face"},"timestamp":"2025-08-10T20:52:05.738531Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.294,"top":0.6464},"timestamp":"2025-08-10T20:52:05.738531Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:05.738531Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4656,"top":0.4427},"timestamp":"2025-08-10T20:52:05.738531Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:05.738531Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4581,"left":0.3218,"right":0.3946,"top":0.2942},"class":{"score":0.81,"type":"Face"},"timestamp":"2025-08-10T20:52:05.838429Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2943,"top":0.6464},"timestamp":"2025-08-10T20:52:05.838429Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:05.838429Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4656,"top":0.4427},"timestamp":"2025-08-10T20:52:05.838429Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:05.838429Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.458,"left":0.3212,"right":0.3944,"top":0.2946},"class":{"score":0.81,"type":"Face"},"timestamp":"2025-08-10T20:52:05.938326Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2933,"top":0.6464},"timestamp":"2025-08-10T20:52:05.938326Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:05.938326Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4656,"top":0.4427},"timestamp":"2025-08-10T20:52:05.938326Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:05.938326Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.458,"left":0.3215,"right":0.395,"top":0.2941},"class":{"score":0.81,"type":"Face"},"timestamp":"2025-08-10T20:52:06.038225Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:06.038225Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:06.038225Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4656,"top":0.4427},"timestamp":"2025-08-10T20:52:06.038225Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:06.038225Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4589,"left":0.3209,"right":0.395,"top":0.2955},"class":{"score":0.82,"type":"Face"},"timestamp":"2025-08-10T20:52:06.138122Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:06.138122Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:06.138122Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4656,"top":0.4427},"timestamp":"2025-08-10T20:52:06.138122Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:06.138122Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4583,"left":0.3209,"right":0.3949,"top":0.2942},"class":{"score":0.82,"type":"Face"},"timestamp":"2025-08-10T20:52:06.238019Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:06.238019Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:06.238019Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4656,"top":0.4427},"timestamp":"2025-08-10T20:52:06.238019Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:06.238019Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4582,"left":0.3211,"right":0.3948,"top":0.2937},"class":{"score":0.82,"type":"Face"},"timestamp":"2025-08-10T20:52:06.337917Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:06.337917Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:06.337917Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4656,"top":0.4427},"timestamp":"2025-08-10T20:52:06.337917Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:06.337917Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4593,"left":0.3207,"right":0.395,"top":0.2947},"class":{"score":0.82,"type":"Face"},"timestamp":"2025-08-10T20:52:06.437814Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:06.437814Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:06.437814Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4652,"top":0.4427},"timestamp":"2025-08-10T20:52:06.437814Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:06.437814Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4597,"left":0.3204,"right":0.3951,"top":0.2945},"class":{"score":0.83,"type":"Face"},"timestamp":"2025-08-10T20:52:06.537711Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:06.537711Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:06.537711Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4642,"top":0.4427},"timestamp":"2025-08-10T20:52:06.537711Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:06.537711Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4601,"left":0.3202,"right":0.3953,"top":0.2957},"class":{"score":0.83,"type":"Face"},"timestamp":"2025-08-10T20:52:06.637609Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:06.637609Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:06.637609Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4635,"top":0.4427},"timestamp":"2025-08-10T20:52:06.637609Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:06.637609Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4594,"left":0.3206,"right":0.3952,"top":0.2951},"class":{"score":0.83,"type":"Face"},"timestamp":"2025-08-10T20:52:06.737507Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:06.737507Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:06.737507Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4635,"top":0.4427},"timestamp":"2025-08-10T20:52:06.737507Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:06.737507Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4587,"left":0.3204,"right":0.3953,"top":0.2951},"class":{"score":0.83,"type":"Face"},"timestamp":"2025-08-10T20:52:06.837405Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:06.837405Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:06.837405Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4638,"top":0.4427},"timestamp":"2025-08-10T20:52:06.837405Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:06.837405Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.459,"left":0.3203,"right":0.3954,"top":0.2948},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:52:06.937302Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:06.937302Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:06.937302Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4649,"top":0.4427},"timestamp":"2025-08-10T20:52:06.937302Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:06.937302Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4587,"left":0.3207,"right":0.3953,"top":0.294},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:52:07.037200Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:07.037200Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:07.037200Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4652,"top":0.4427},"timestamp":"2025-08-10T20:52:07.037200Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:07.037200Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4581,"left":0.3215,"right":0.3958,"top":0.2937},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:52:07.137097Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:07.137097Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:07.137097Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4642,"top":0.4427},"timestamp":"2025-08-10T20:52:07.137097Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:07.137097Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.458,"left":0.3221,"right":0.3961,"top":0.2931},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:52:07.236994Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:07.236994Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:07.236994Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4635,"top":0.4427},"timestamp":"2025-08-10T20:52:07.236994Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:07.236994Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4576,"left":0.3222,"right":0.3958,"top":0.2929},"class":{"score":0.84,"type":"Face"},"timestamp":"2025-08-10T20:52:07.336892Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:07.336892Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:07.336892Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4635,"top":0.4427},"timestamp":"2025-08-10T20:52:07.336892Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:07.336892Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4572,"left":0.3223,"right":0.3955,"top":0.2929},"class":{"score":0.85,"type":"Face"},"timestamp":"2025-08-10T20:52:07.436792Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:07.436792Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:07.436792Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4638,"top":0.4427},"timestamp":"2025-08-10T20:52:07.436792Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:07.436792Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4573,"left":0.3224,"right":0.3952,"top":0.2925},"class":{"score":0.85,"type":"Face"},"timestamp":"2025-08-10T20:52:07.536678Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:07.536678Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:07.536678Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4649,"top":0.4427},"timestamp":"2025-08-10T20:52:07.536678Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:07.536678Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4571,"left":0.3228,"right":0.3956,"top":0.2925},"class":{"score":0.85,"type":"Face"},"timestamp":"2025-08-10T20:52:07.636588Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2929,"top":0.6464},"timestamp":"2025-08-10T20:52:07.636588Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:07.636588Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4652,"top":0.4427},"timestamp":"2025-08-10T20:52:07.636588Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:07.636588Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4572,"left":0.3231,"right":0.3959,"top":0.2922},"class":{"score":0.85,"type":"Face"},"timestamp":"2025-08-10T20:52:07.736482Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.294,"top":0.6464},"timestamp":"2025-08-10T20:52:07.736482Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:07.736482Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4642,"top":0.4427},"timestamp":"2025-08-10T20:52:07.736482Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:07.736482Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4569,"left":0.3233,"right":0.3962,"top":0.2915},"class":{"score":0.85,"type":"Face"},"timestamp":"2025-08-10T20:52:07.836381Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2943,"top":0.6464},"timestamp":"2025-08-10T20:52:07.836381Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:07.836381Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4635,"top":0.4427},"timestamp":"2025-08-10T20:52:07.836381Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:07.836381Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4568,"left":0.3231,"right":0.3957,"top":0.2918},"class":{"score":0.86,"type":"Face"},"timestamp":"2025-08-10T20:52:07.936278Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2933,"top":0.6464},"timestamp":"2025-08-10T20:52:07.936278Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:07.936278Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"},{"bounding_box":{"bottom":0.5834,"left":0.4218,"right":0.4635,"top":0.4427},"timestamp":"2025-08-10T20:52:07.936278Z","track_id":"10ed2cbd-008d-4789-8aba-bf266b31697a"}],"operations":[],"timestamp":"2025-08-10T20:52:07.936278Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4567,"left":0.3229,"right":0.3953,"top":0.292},"class":{"score":0.86,"type":"Face"},"timestamp":"2025-08-10T20:52:08.036176Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:08.036176Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:08.036176Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[{"id":"10ed2cbd-008d-4789-8aba-bf266b31697a","type":"DeleteOperation"}],"timestamp":"2025-08-10T20:52:08.036176Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4567,"left":0.3231,"right":0.3956,"top":0.2923},"class":{"score":0.86,"type":"Face"},"timestamp":"2025-08-10T20:52:08.136073Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:08.136073Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:08.136073Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[],"timestamp":"2025-08-10T20:52:08.136073Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4578,"left":0.3226,"right":0.3958,"top":0.294},"class":{"score":0.86,"type":"Face"},"timestamp":"2025-08-10T20:52:08.235975Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:08.235975Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:08.235975Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[],"timestamp":"2025-08-10T20:52:08.235975Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4575,"left":0.3228,"right":0.3961,"top":0.294},"class":{"score":0.86,"type":"Face"},"timestamp":"2025-08-10T20:52:08.335867Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:08.335867Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:08.335867Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[],"timestamp":"2025-08-10T20:52:08.335867Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4573,"left":0.323,"right":0.3962,"top":0.2939},"class":{"score":0.86,"type":"Face"},"timestamp":"2025-08-10T20:52:08.435771Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:08.435771Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:08.435771Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[],"timestamp":"2025-08-10T20:52:08.435771Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4566,"left":0.324,"right":0.3968,"top":0.2933},"class":{"score":0.86,"type":"Face"},"timestamp":"2025-08-10T20:52:08.535663Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:08.535663Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:08.535663Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[],"timestamp":"2025-08-10T20:52:08.535663Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4565,"left":0.3236,"right":0.3962,"top":0.2934},"class":{"score":0.86,"type":"Face"},"timestamp":"2025-08-10T20:52:08.635572Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:08.635572Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:08.635572Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[],"timestamp":"2025-08-10T20:52:08.635572Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4563,"left":0.3232,"right":0.3957,"top":0.2925},"class":{"score":0.86,"type":"Face"},"timestamp":"2025-08-10T20:52:08.735458Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:08.735458Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:08.735458Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[],"timestamp":"2025-08-10T20:52:08.735458Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4563,"left":0.3233,"right":0.3958,"top":0.2927},"class":{"score":0.86,"type":"Face"},"timestamp":"2025-08-10T20:52:08.835356Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:08.835356Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:08.835356Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[],"timestamp":"2025-08-10T20:52:08.835356Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4563,"left":0.3229,"right":0.3954,"top":0.2928},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:08.935253Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:08.935253Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:08.935253Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[],"timestamp":"2025-08-10T20:52:08.935253Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4558,"left":0.323,"right":0.3957,"top":0.2924},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:09.035152Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:09.035152Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:09.035152Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[],"timestamp":"2025-08-10T20:52:09.035152Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4554,"left":0.3228,"right":0.3953,"top":0.2921},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:09.135048Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:09.135048Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:09.135048Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[],"timestamp":"2025-08-10T20:52:09.135048Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4551,"left":0.3225,"right":0.395,"top":0.2919},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:09.234950Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:09.234950Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:09.234950Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[],"timestamp":"2025-08-10T20:52:09.234950Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4554,"left":0.3227,"right":0.3953,"top":0.2922},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:09.334842Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:09.334842Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:09.334842Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[],"timestamp":"2025-08-10T20:52:09.334842Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4552,"left":0.3225,"right":0.395,"top":0.292},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:09.434742Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2936,"top":0.6464},"timestamp":"2025-08-10T20:52:09.434742Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:09.434742Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[],"timestamp":"2025-08-10T20:52:09.434742Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.455,"left":0.3228,"right":0.3954,"top":0.2919},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:09.534638Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2947,"top":0.6464},"timestamp":"2025-08-10T20:52:09.534638Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:09.534638Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[],"timestamp":"2025-08-10T20:52:09.534638Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4562,"left":0.322,"right":0.3954,"top":0.2924},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:09.634537Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2936,"top":0.6464},"timestamp":"2025-08-10T20:52:09.634537Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:09.634537Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[],"timestamp":"2025-08-10T20:52:09.634537Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4564,"left":0.3223,"right":0.3957,"top":0.2927},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:09.734434Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:09.734434Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:09.734434Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[],"timestamp":"2025-08-10T20:52:09.734434Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4577,"left":0.3217,"right":0.3956,"top":0.2945},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:09.834332Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:09.834332Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:09.834332Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[],"timestamp":"2025-08-10T20:52:09.834332Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4577,"left":0.3215,"right":0.3959,"top":0.2948},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:09.934229Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:09.934229Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:09.934229Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[],"timestamp":"2025-08-10T20:52:09.934229Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.457,"left":0.3215,"right":0.3952,"top":0.2941},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:10.034131Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:10.034131Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:10.034131Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[],"timestamp":"2025-08-10T20:52:10.034131Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4566,"left":0.3214,"right":0.3956,"top":0.2949},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:10.134024Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:10.134024Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:10.134024Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[],"timestamp":"2025-08-10T20:52:10.134024Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4569,"left":0.3215,"right":0.3953,"top":0.2943},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:10.233924Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:10.233924Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"},{"bounding_box":{"bottom":0.9131,"left":0.4176,"right":0.5072,"top":0.7241},"timestamp":"2025-08-10T20:52:10.233924Z","track_id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821"}],"operations":[],"timestamp":"2025-08-10T20:52:10.233924Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4577,"left":0.3211,"right":0.3953,"top":0.2943},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:10.333819Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:10.333819Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[{"id":"10884a74-0bf4-4a34-9a49-cfa2d6c6d821","type":"DeleteOperation"},{"id":"40911fb9-6226-4481-8eb9-8696bea5dfd5","type":"DeleteOperation"}],"timestamp":"2025-08-10T20:52:10.333819Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4575,"left":0.3213,"right":0.3951,"top":0.2941},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:10.433721Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:10.433721Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:10.433721Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4582,"left":0.321,"right":0.3951,"top":0.2941},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:10.533614Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:10.533614Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:10.533614Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.458,"left":0.3206,"right":0.394,"top":0.2943},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:10.633512Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:10.633512Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:10.633512Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4577,"left":0.3205,"right":0.3932,"top":0.2941},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:10.733409Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:10.733409Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:10.733409Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4583,"left":0.3203,"right":0.3925,"top":0.2941},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:10.833307Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:10.833307Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:10.833307Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4591,"left":0.3203,"right":0.3931,"top":0.2953},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:10.933204Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:10.933204Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:10.933204Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4586,"left":0.3201,"right":0.3925,"top":0.2953},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:11.033102Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:11.033102Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:11.033102Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4576,"left":0.3203,"right":0.3921,"top":0.2943},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:11.132999Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:11.132999Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:11.132999Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4584,"left":0.3203,"right":0.3917,"top":0.2955},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:11.232899Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:11.232899Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:11.232899Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4579,"left":0.3205,"right":0.3915,"top":0.295},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:11.332794Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:11.332794Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:11.332794Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4576,"left":0.3204,"right":0.3911,"top":0.295},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:11.432692Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:11.432692Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:11.432692Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4572,"left":0.3207,"right":0.391,"top":0.2946},"class":{"score":0.87,"type":"Face"},"timestamp":"2025-08-10T20:52:11.532590Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:11.532590Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:11.532590Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.457,"left":0.3206,"right":0.391,"top":0.2947},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:11.632486Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:11.632486Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:11.632486Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4579,"left":0.3207,"right":0.3922,"top":0.2958},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:11.732384Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:11.732384Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:11.732384Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4576,"left":0.3206,"right":0.392,"top":0.2957},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:11.832282Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:11.832282Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:11.832282Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4583,"left":0.3207,"right":0.393,"top":0.2967},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:11.932179Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:11.932179Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:11.932179Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4578,"left":0.3208,"right":0.3927,"top":0.2959},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:12.032076Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:12.032076Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:12.032076Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4569,"left":0.321,"right":0.3925,"top":0.2948},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:12.131974Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:12.131974Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:12.131974Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4561,"left":0.3215,"right":0.3932,"top":0.2938},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:12.231874Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:12.231874Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:12.231874Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4555,"left":0.3219,"right":0.3937,"top":0.293},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:12.331770Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:12.331770Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:12.331770Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4555,"left":0.3218,"right":0.3932,"top":0.2929},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:12.431667Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:12.431667Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:12.431667Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4556,"left":0.3221,"right":0.3937,"top":0.2929},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:12.531565Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:12.531565Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:12.531565Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4557,"left":0.3219,"right":0.3932,"top":0.2929},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:12.631463Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:12.631463Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:12.631463Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4553,"left":0.322,"right":0.3927,"top":0.2924},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:12.731360Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:12.731360Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:12.731360Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4557,"left":0.3215,"right":0.3923,"top":0.293},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:12.831258Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:12.831258Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:12.831258Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4559,"left":0.3211,"right":0.3919,"top":0.2935},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:12.931155Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:12.931155Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:12.931155Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4562,"left":0.3208,"right":0.3917,"top":0.2939},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:13.031052Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:13.031052Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:13.031052Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4563,"left":0.3209,"right":0.3916,"top":0.2939},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:13.130950Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:13.130950Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:13.130950Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4563,"left":0.3212,"right":0.3915,"top":0.2938},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:13.230847Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:13.230847Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:13.230847Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4573,"left":0.3209,"right":0.3914,"top":0.2939},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:13.330746Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:13.330746Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:13.330746Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4581,"left":0.3207,"right":0.3913,"top":0.294},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:13.430643Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:13.430643Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:13.430643Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4579,"left":0.3208,"right":0.3913,"top":0.2938},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:13.530541Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:13.530541Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:13.530541Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4578,"left":0.3206,"right":0.391,"top":0.2941},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:13.630438Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:13.630438Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:13.630438Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4576,"left":0.3205,"right":0.3911,"top":0.2944},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:13.730335Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:13.730335Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:13.730335Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4569,"left":0.321,"right":0.3912,"top":0.2936},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:13.830233Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:13.830233Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:13.830233Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4571,"left":0.3211,"right":0.3913,"top":0.2931},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:13.930130Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:13.930130Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:13.930130Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4571,"left":0.3209,"right":0.3914,"top":0.2935},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:14.030028Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:14.030028Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:14.030028Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.457,"left":0.3209,"right":0.3925,"top":0.2939},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:14.129926Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:14.129926Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:14.129926Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4564,"left":0.321,"right":0.3924,"top":0.2932},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:14.229823Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:14.229823Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:14.229823Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4575,"left":0.3208,"right":0.3922,"top":0.2947},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:14.329721Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:14.329721Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:14.329721Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4568,"left":0.3212,"right":0.3922,"top":0.2939},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:14.429618Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:14.429618Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:14.429618Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4567,"left":0.3212,"right":0.392,"top":0.2938},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:14.529515Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:14.529515Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:14.529515Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4575,"left":0.3211,"right":0.3931,"top":0.2938},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:14.629413Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:14.629413Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:14.629413Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4573,"left":0.3211,"right":0.3928,"top":0.2937},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:14.729311Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:14.729311Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:14.729311Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4566,"left":0.3214,"right":0.3925,"top":0.293},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:14.829209Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:14.829209Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:14.829209Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4566,"left":0.3208,"right":0.3919,"top":0.2935},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:14.929105Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:14.929105Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:14.929105Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4567,"left":0.3206,"right":0.3918,"top":0.2939},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:15.029004Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:15.029004Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:15.029004Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4566,"left":0.3211,"right":0.3926,"top":0.2938},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:15.128901Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:15.128901Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:15.128901Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4566,"left":0.3209,"right":0.3923,"top":0.2941},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:15.228799Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:15.228799Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:15.228799Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4567,"left":0.3207,"right":0.3921,"top":0.2944},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:15.328696Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:15.328696Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:15.328696Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4567,"left":0.3205,"right":0.3919,"top":0.2947},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:15.428594Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:15.428594Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:15.428594Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4567,"left":0.3204,"right":0.3918,"top":0.2949},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:15.528492Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:15.528492Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:15.528492Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4567,"left":0.3203,"right":0.3917,"top":0.295},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:15.628389Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:15.628389Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:15.628389Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4567,"left":0.3204,"right":0.3928,"top":0.2952},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:15.728286Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:15.728286Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:15.728286Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4577,"left":0.3203,"right":0.3925,"top":0.2963},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:15.828184Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:15.828184Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:15.828184Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4575,"left":0.3204,"right":0.3934,"top":0.2962},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:15.928082Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"},{"bounding_box":{"bottom":0.7205,"left":0.251,"right":0.2926,"top":0.6464},"timestamp":"2025-08-10T20:52:15.928082Z","track_id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67"}],"operations":[],"timestamp":"2025-08-10T20:52:15.928082Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4573,"left":0.3208,"right":0.3945,"top":0.296},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:16.027979Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[{"id":"d4086ecb-bf8f-404f-b992-b0b863ab3e67","type":"DeleteOperation"}],"timestamp":"2025-08-10T20:52:16.027979Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4565,"left":0.3211,"right":0.394,"top":0.2949},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:16.127877Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:16.127877Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4564,"left":0.3208,"right":0.3931,"top":0.295},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:16.227774Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:16.227774Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4564,"left":0.3206,"right":0.3927,"top":0.295},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:16.327672Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:16.327672Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4563,"left":0.3208,"right":0.3923,"top":0.2946},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:16.427570Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:16.427570Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4563,"left":0.3209,"right":0.3921,"top":0.2942},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:16.527467Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:16.527467Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4571,"left":0.3207,"right":0.3918,"top":0.2941},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:16.627365Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:16.627365Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4581,"left":0.3206,"right":0.3916,"top":0.2954},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:16.727261Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:16.727261Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4587,"left":0.3205,"right":0.3915,"top":0.295},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:16.827160Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:16.827160Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4594,"left":0.3204,"right":0.3914,"top":0.2961},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:16.927057Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:16.927057Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4589,"left":0.3208,"right":0.3928,"top":0.2959},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:17.026955Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:17.026955Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4584,"left":0.3207,"right":0.3926,"top":0.2957},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:17.126852Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:17.126852Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4588,"left":0.3205,"right":0.3923,"top":0.2952},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:17.226750Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:17.226750Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4583,"left":0.3212,"right":0.3933,"top":0.2951},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:17.326647Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:17.326647Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4578,"left":0.3214,"right":0.3941,"top":0.2945},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:17.426545Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:17.426545Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4574,"left":0.3217,"right":0.3945,"top":0.2941},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:17.526442Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:17.526442Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4582,"left":0.3218,"right":0.3953,"top":0.2952},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:17.626339Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:17.626339Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4593,"left":0.3215,"right":0.3956,"top":0.2959},"class":{"score":0.88,"type":"Face"},"timestamp":"2025-08-10T20:52:17.726238Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:17.726238Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4587,"left":0.321,"right":0.3943,"top":0.2957},"class":{"score":0.89,"type":"Face"},"timestamp":"2025-08-10T20:52:17.826135Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:17.826135Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4581,"left":0.3213,"right":0.3945,"top":0.295},"class":{"score":0.89,"type":"Face"},"timestamp":"2025-08-10T20:52:17.926033Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:17.926033Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4585,"left":0.3211,"right":0.3948,"top":0.2947},"class":{"score":0.89,"type":"Face"},"timestamp":"2025-08-10T20:52:18.025930Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:18.025930Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4577,"left":0.3207,"right":0.3939,"top":0.295},"class":{"score":0.89,"type":"Face"},"timestamp":"2025-08-10T20:52:18.125828Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:18.125828Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4584,"left":0.3204,"right":0.3932,"top":0.296},"class":{"score":0.89,"type":"Face"},"timestamp":"2025-08-10T20:52:18.225726Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:18.225726Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.458,"left":0.3202,"right":0.3926,"top":0.2958},"class":{"score":0.89,"type":"Face"},"timestamp":"2025-08-10T20:52:18.325623Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:18.325623Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4575,"left":0.3208,"right":0.3931,"top":0.2952},"class":{"score":0.89,"type":"Face"},"timestamp":"2025-08-10T20:52:18.425520Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:18.425520Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4572,"left":0.3206,"right":0.3925,"top":0.2951},"class":{"score":0.89,"type":"Face"},"timestamp":"2025-08-10T20:52:18.525418Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:18.525418Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.4569,"left":0.3204,"right":0.3921,"top":0.295},"class":{"score":0.89,"type":"Face"},"timestamp":"2025-08-10T20:52:18.625316Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:18.625316Z"}} +{"frame":{"observations":[{"bounding_box":{"bottom":0.457,"left":0.321,"right":0.3928,"top":0.2942},"class":{"score":0.89,"type":"Face"},"timestamp":"2025-08-10T20:52:18.725213Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operation \ No newline at end of file diff --git a/project-time-in-area-analytics/test_files/sample_data_feeder.sh b/project-time-in-area-analytics/test_files/sample_data_feeder.sh index 7dbe7a0..dc8418c 100755 --- a/project-time-in-area-analytics/test_files/sample_data_feeder.sh +++ b/project-time-in-area-analytics/test_files/sample_data_feeder.sh @@ -26,28 +26,29 @@ if ! command -v jq >/dev/null 2>&1; then exit 1 fi -# Process each frame and output one detection per message +# Process each frame and output one observation per message while IFS= read -r line; do - # Extract frame info - frame=$(echo "$line" | jq -r '.frame') - timestamp=$(echo "$line" | jq -r '.timestamp') + # Extract frame timestamp + frame_timestamp=$(echo "$line" | jq -r '.frame.timestamp') - # Get number of detections - detection_count=$(echo "$line" | jq '.detections | length') + # Get number of observations (handle null/empty cases) + observation_count=$(echo "$line" | jq '.frame.observations | length // 0') - # Only output messages if there are detections - if [ "$detection_count" -gt 0 ]; then - # Output each detection as a separate message + # Only output messages if there are observations + if [ "$observation_count" -gt 0 ] 2>/dev/null; then + # Output each observation as a separate message i=0 - while [ $i -lt "$detection_count" ]; do - detection=$(echo "$line" | jq ".detections[$i]") - track_id=$(echo "$detection" | jq -r '.track_id') - object_type=$(echo "$detection" | jq -r '.object_type') - x=$(echo "$detection" | jq -r '.x') - y=$(echo "$detection" | jq -r '.y') + while [ $i -lt "$observation_count" ]; do + observation=$(echo "$line" | jq ".frame.observations[$i]") + track_id=$(echo "$observation" | jq -r '.track_id') + object_type=$(echo "$observation" | jq -r '.class.type') + timestamp=$(echo "$observation" | jq -r '.timestamp') + + # Extract bounding box data + bounding_box=$(echo "$observation" | jq -c '.bounding_box') # Output individual detection with frame context - echo "{\"frame\": $frame, \"timestamp\": \"$timestamp\", \"track_id\": \"$track_id\", \"object_type\": \"$object_type\", \"x\": $x, \"y\": $y}" + echo "{\"frame\": \"$frame_timestamp\", \"timestamp\": \"$timestamp\", \"track_id\": \"$track_id\", \"object_type\": \"$object_type\", \"bounding_box\": $bounding_box}" i=$((i + 1)) done diff --git a/project-time-in-area-analytics/test_files/simple_tracks.jsonl b/project-time-in-area-analytics/test_files/simple_tracks.jsonl index 17d9139..1d7afa5 100644 --- a/project-time-in-area-analytics/test_files/simple_tracks.jsonl +++ b/project-time-in-area-analytics/test_files/simple_tracks.jsonl @@ -1,10 +1,11 @@ -{"frame": 1, "timestamp": "2024-01-15T10:00:00Z", "detections": []} -{"frame": 2, "timestamp": "2024-01-15T10:00:01Z", "detections": [{"track_id": "track_001", "object_type": "human", "x": 250, "y": 200}]} -{"frame": 3, "timestamp": "2024-01-15T10:00:02Z", "detections": [{"track_id": "track_001", "object_type": "human", "x": 260, "y": 210}]} -{"frame": 4, "timestamp": "2024-01-15T10:00:03Z", "detections": [{"track_id": "track_001", "object_type": "human", "x": 270, "y": 220}, {"track_id": "track_002", "object_type": "human", "x": 150, "y": 180}]} -{"frame": 5, "timestamp": "2024-01-15T10:00:04Z", "detections": [{"track_id": "track_001", "object_type": "human", "x": 280, "y": 230}, {"track_id": "track_002", "object_type": "human", "x": 160, "y": 190}]} -{"frame": 6, "timestamp": "2024-01-15T10:00:05Z", "detections": [{"track_id": "track_002", "object_type": "human", "x": 170, "y": 200}]} -{"frame": 7, "timestamp": "2024-01-15T10:01:10Z", "detections": [{"track_id": "track_003", "object_type": "vehicle", "x": 300, "y": 250}]} -{"frame": 8, "timestamp": "2024-01-15T10:01:11Z", "detections": [{"track_id": "track_003", "object_type": "vehicle", "x": 310, "y": 260}]} -{"frame": 9, "timestamp": "2024-01-15T10:01:12Z", "detections": [{"track_id": "track_003", "object_type": "vehicle", "x": 320, "y": 270}, {"track_id": "track_001", "object_type": "human", "x": 290, "y": 240}]} -{"frame": 10, "timestamp": "2024-01-15T10:01:13Z", "detections": [{"track_id": "track_004", "object_type": "human", "x": 400, "y": 300}]} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.6, "left": 0.2, "right": 0.3, "top": 0.4}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:01Z", "track_id": "track_001"}], "timestamp": "2024-01-15T10:00:01Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.62, "left": 0.22, "right": 0.32, "top": 0.42}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:02Z", "track_id": "track_001"}], "timestamp": "2024-01-15T10:00:02Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.64, "left": 0.24, "right": 0.34, "top": 0.44}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:03Z", "track_id": "track_001"}, {"bounding_box": {"bottom": 0.56, "left": 0.12, "right": 0.18, "top": 0.36}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:03Z", "track_id": "track_002"}], "timestamp": "2024-01-15T10:00:03Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.66, "left": 0.26, "right": 0.36, "top": 0.46}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:04Z", "track_id": "track_001"}, {"bounding_box": {"bottom": 0.58, "left": 0.14, "right": 0.20, "top": 0.38}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:04Z", "track_id": "track_002"}], "timestamp": "2024-01-15T10:00:04Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.60, "left": 0.16, "right": 0.22, "top": 0.40}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:05Z", "track_id": "track_002"}], "timestamp": "2024-01-15T10:00:05Z"}} +{"frame": {"observations": [], "operations": [{"id": "track_001", "type": "DeleteOperation"}], "timestamp": "2024-01-15T10:00:06Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.75, "left": 0.25, "right": 0.35, "top": 0.50}, "class": {"type": "Vehicle"}, "timestamp": "2024-01-15T10:01:10Z", "track_id": "track_003"}], "timestamp": "2024-01-15T10:01:10Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.77, "left": 0.27, "right": 0.37, "top": 0.52}, "class": {"type": "Vehicle"}, "timestamp": "2024-01-15T10:01:11Z", "track_id": "track_003"}], "timestamp": "2024-01-15T10:01:11Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.79, "left": 0.29, "right": 0.39, "top": 0.54}, "class": {"type": "Vehicle"}, "timestamp": "2024-01-15T10:01:12Z", "track_id": "track_003"}, {"bounding_box": {"bottom": 0.68, "left": 0.28, "right": 0.38, "top": 0.48}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:01:12Z", "track_id": "track_001"}], "timestamp": "2024-01-15T10:01:12Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.80, "left": 0.35, "right": 0.45, "top": 0.60}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:01:13Z", "track_id": "track_004"}], "timestamp": "2024-01-15T10:01:13Z"}} +{"frame": {"observations": [], "operations": [], "timestamp": "2024-01-15T10:01:25Z"}} \ No newline at end of file diff --git a/project-time-in-area-analytics/test_scripts/README.md b/project-time-in-area-analytics/test_scripts/README.md new file mode 100644 index 0000000..12267f9 --- /dev/null +++ b/project-time-in-area-analytics/test_scripts/README.md @@ -0,0 +1,154 @@ +# Test Scripts + +This directory contains helper scripts for testing and visualizing the time-in-area analytics functionality. All scripts work seamlessly together with the same JSONL data format used throughout this project. + +## Table of Contents + + + +- [Installation](#installation) +- [Recording Real Device Data](#recording-real-device-data) + - [Basic Usage](#basic-usage) + - [Advanced Usage](#advanced-usage) + - [Parameters](#parameters) + - [Authentication](#authentication) + - [AXIS OS Compatibility](#axis-os-compatibility) + - [Use Cases](#use-cases) +- [Track Heatmap Visualization](#track-heatmap-visualization) + - [Basic Usage](#basic-usage-1) + - [Advanced Usage](#advanced-usage-1) + - [Features & Example Output](#features--example-output) + - [Activity Percentage Calculation](#activity-percentage-calculation) +- [Prerequisites](#prerequisites) + + + +## Installation + +Install the required dependencies for all scripts: + +```bash +pip install -r requirements.txt +``` + +## Recording Real Device Data + +The `record_real_data.py` script allows you to record live analytics scene description data from Axis cameras for testing and analysis purposes. + +### Basic Usage + +```bash +python record_real_data.py --host --username +``` + +This will record 30 seconds of data by default and save it to `test_files/real_device_data.jsonl`. + +### Advanced Usage + +```bash +python record_real_data.py \ + --host \ + --username \ + --duration 60 \ + --topic "com.axis.analytics_scene_description.v0.beta" \ + --source "1" \ + --output-file "my_recording.jsonl" +``` + +### Parameters + +- `--host, -h`: Device IP address or hostname (default: 192.168.1.2) +- `--username, -u`: SSH username (default: acap-fixeditdataagent) +- `--password, -p`: SSH password (optional, will prompt if needed) +- `--duration, -d`: Recording duration in seconds (default: 30) +- `--topic`: Message broker topic to consume (default: com.axis.analytics_scene_description.v0.beta) +- `--source`: Message broker source (default: 1) +- `--output-file, -o`: Output file path (default: test_files/real_device_data.jsonl) + +### Authentication + +The script supports multiple authentication methods in this order: + +1. **CLI Password**: If `--password` is provided, uses that directly +2. **SSH Key Authentication**: Tries key authentication if no password specified +3. **Password Prompt**: Falls back to prompting for password if key auth fails + +### AXIS OS Compatibility + +- **AXIS OS < 12**: You can SSH as root without restrictions: + + ```bash + python record_real_data.py --host --username root + ``` + +- **AXIS OS 12+**: SSH as root is disabled. Regular SSH users cannot access the message broker. If you are a [Technology Integration Partner](https://www.axis.com/partner/technology-integration-partner-program), you can enable dev mode in the camera (instructions included in [this e-learning course](https://learning.fixedit.ai/spaces/11778313/content)) and use the FixedIT Data Agent user: + ```bash + python record_real_data.py --host --username acap-fixeditdataagent + ``` + +### Use Cases + +- **Deterministic Testing**: Record real data to test analytics pipelines with reproducible results +- **Algorithm Development**: Capture edge cases and specific scenarios for algorithm tuning +- **Data Analysis**: Use recorded data with visualization tools like `track_heatmap_viewer.py` +- **Debugging**: Capture problematic scenarios for investigation + +## Track Heatmap Visualization + +The `track_heatmap_viewer.py` script creates heatmap visualizations showing track activity over time. This helps visualize when different track IDs are active across frames, making it easy to understand track lifecycles and identify patterns in object detection data. + +### Basic Usage + +Display heatmap interactively: + +```bash +python track_heatmap_viewer.py ../test_files/simple_tracks.jsonl +``` + +### Advanced Usage + +Enable verbose output with detailed statistics: + +```bash +python track_heatmap_viewer.py ../test_files/simple_tracks.jsonl --verbose +``` + +Show alarm visualization (tracks exceeding threshold appear in red): + +```bash +python track_heatmap_viewer.py ../test_files/simple_tracks.jsonl --alarm-threshold 2.0 +``` + +Get help: + +```bash +python track_heatmap_viewer.py --help +``` + +### Features & Example Output + +The following image is an example of the output when running with `--alarm-threshold 10`, i.e. 10 seconds before a track turns red. + +![Track Heatmap Example](../.images/track-heatmap-120s.png) +_Example heatmap showing track activity over time with labeled components_ + +**Understanding the Heatmap Elements:** + +- **Statistics Overlay (top-left white box)**: Shows key dataset metrics + - **Tracks: 42** - Total unique track IDs detected across all frames + - **Frames: 1180** - Number of frames containing at least one detection (not total elapsed frames) + - **Activity: 99.8%** - Percentage of frames with detections present + - **Alarms: 5** - Number of tracks exceeding the alarm threshold duration +- **X-axis (Time)**: Timestamps of frames with observations only - time gaps without detections are not shown +- **Y-axis (Track IDs)**: Individual object identifiers (e.g., `3effc`, `58cef`) sorted alphabetically +- **Color Legend (right side)**: Visual scale showing track states from Absent (gray) to Present (green) to Alarm (red) + +#### Activity Percentage Calculation + +The **Activity** percentage shows what portion of the time period had detections present. It is calculated as: + +``` +Activity = (Frames with ≥1 detection / Total frames) × 100 +``` + +This metric answers: "What percentage of the time period had activity?" A higher percentage means activity was present during most of the monitored time, while a lower percentage indicates activity was sporadic or brief. diff --git a/project-time-in-area-analytics/test_scripts/record_real_data.py b/project-time-in-area-analytics/test_scripts/record_real_data.py new file mode 100644 index 0000000..59d6ff3 --- /dev/null +++ b/project-time-in-area-analytics/test_scripts/record_real_data.py @@ -0,0 +1,355 @@ +#!/usr/bin/env python3 +""" +Script to record real analytics scene description data from Axis device. + +This creates a test file with actual device data for more realistic testing. +Uses SSH to connect to the device and record analytics scene description data. +""" + +import getpass +import json +import threading +import time +from pathlib import Path +from typing import Optional, Protocol, Iterator, Dict, Any + +import click +import paramiko + + +class CommandRunner(Protocol): + """Protocol for running commands and returning output.""" + + def run_command(self, command: str, timeout_seconds: int) -> Iterator[str]: + """Run a command and yield output lines. + + Args: + command: The command to execute + timeout_seconds: Maximum time to wait for command completion + + """ + ... + + +class SSHCommandRunner: + """SSH implementation of CommandRunner.""" + + def __init__( + self, host: str, username: str, password: Optional[str] = None + ): + """Initialize SSH connection parameters. + + Args: + host: SSH host to connect to + username: SSH username + password: SSH password (optional, will prompt if needed) + """ + self.host = host + self.username = username + self.password = password + self.client = None + + def connect(self): + """Establish SSH connection to the device.""" + self.client = paramiko.SSHClient() + self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + + # Try connecting with key first, then password if provided + if self.password: + self.client.connect( + hostname=self.host, + username=self.username, + password=self.password, + timeout=10 + ) + else: + self.client.connect( + hostname=self.host, + username=self.username, + timeout=10 + ) + + def run_command(self, command: str, timeout_seconds: int) -> Iterator[str]: + """Run command via SSH and yield output lines with timeout. + + Args: + command: Command to execute on remote host + timeout_seconds: Maximum time to wait for command completion + + Yields: + str: Lines of output from the command + + Raises: + RuntimeError: If SSH connection fails + """ + if not self.client: + raise RuntimeError("Not connected to device") + + stdin, stdout, stderr = self.client.exec_command(command) + + # Use threading for timeout instead of signals + lines = [] + finished = threading.Event() + + def read_output(): + try: + for line in stdout: + if finished.is_set(): + break + lines.append(line.strip()) + except (paramiko.SSHException, OSError, EOFError): + pass # Connection closed or network error + finally: + finished.set() + + reader_thread = threading.Thread(target=read_output) + reader_thread.daemon = True + reader_thread.start() + + # Wait for timeout or completion + start_time = time.time() + while (time.time() - start_time < timeout_seconds + and not finished.is_set()): + time.sleep(0.1) + + finished.set() # Signal thread to stop + reader_thread.join(timeout=1) # Give thread time to finish + + for line in lines: + yield line + + def close(self): + """Close the SSH connection.""" + if self.client: + self.client.close() + + +class DataRecorder: + """Records data from a command runner, agnostic to transport method.""" + + def __init__(self, runner: CommandRunner): + """Initialize with a command runner. + + Args: + runner: CommandRunner instance for executing commands + """ + self.runner = runner + + def extract_json_from_line(self, line: str) -> Optional[Dict[str, Any]]: + """ + Extract and parse JSON from a line that may have a prefix. + + This handles cases where message-broker-cli output has prefixes like: + "2024-01-01 12:00:00 {"key": "value", ...}" + We want just the JSON part parsed as a Python object. + + Args: + line: Input line that may contain JSON with optional prefix + + Returns: + Parsed JSON object if found and valid, None otherwise + + Examples: + >>> recorder = DataRecorder(None) + >>> recorder.extract_json_from_line('{"test": "value"}') + {'test': 'value'} + + >>> recorder.extract_json_from_line( + ... '2024-01-01 12:00:00 {"key": "value"}' + ... ) + {'key': 'value'} + + >>> recorder.extract_json_from_line('no json here') + + >>> recorder.extract_json_from_line('prefix {"invalid": json}') + + >>> recorder.extract_json_from_line('') + + >>> recorder.extract_json_from_line( + ... 'ts {"nested": {"data": [1, 2, 3]}}' + ... ) + {'nested': {'data': [1, 2, 3]}} + """ + # Find the first '{' character to locate potential JSON + json_start = line.find('{') + if json_start == -1: + # No JSON found in this line + return None + + json_line = line[json_start:] + + # Parse and return the JSON object + try: + return json.loads(json_line) + except json.JSONDecodeError: + # The extracted part isn't valid JSON + return None + + def record_data(self, topic: str, source: str, output_file: Path, + timeout_seconds: int) -> int: + """ + Record data from message broker. + + Args: + topic: Message broker topic to consume. + source: Message broker source. + output_file: Path to save the recorded data. + timeout_seconds: Maximum recording duration in seconds. + + Returns: + int: Number of valid JSON lines recorded. + """ + command = f'message-broker-cli consume "{topic}" "{source}"' + + line_count = 0 + with output_file.open('w') as f: + for line in self.runner.run_command(command, timeout_seconds): + json_obj = self.extract_json_from_line(line) + if json_obj is not None: + # Convert back to compact JSON string for file output + # separators=(',', ':') removes spaces after commas and + # colons + # for smaller file size and consistent JSONL format + f.write(json.dumps(json_obj, separators=(',', ':')) + '\n') + f.flush() # Ensure data is written immediately + line_count += 1 + + return line_count + + +@click.command() +@click.option('--host', '-h', default='192.168.1.2', + help='Device IP address or hostname') +@click.option('--username', '-u', default='acap-fixeditdataagent', + help='SSH username') +@click.option('--password', '-p', default=None, + help='SSH password (if not provided, will try key auth first, ' + 'then prompt)') +@click.option( + '--topic', + default='com.axis.analytics_scene_description.v0.beta', + help='Message broker topic to consume' +) +@click.option('--source', default='1', + help='Message broker source') +@click.option( + '--output-file', '-o', + default='test_files/real_device_data.jsonl', + help='Output file path' +) +@click.option('--duration', '-d', default=30, + help='Recording duration in seconds') +def main(host: str, username: str, password: Optional[str], topic: str, + source: str, output_file: str, duration: int): + r""" + Record real analytics scene description data from Axis device. + + This script connects to an Axis device via SSH and records analytics scene + description data for testing purposes. The recorded data can be used with + the time-in-area analytics pipeline for more realistic testing. + + Args: + host: SSH host/IP address to connect to + username: SSH username for authentication + password: SSH password (optional, will prompt if needed) + topic: Message broker topic to consume from + source: Message broker source identifier + output_file: Path to output JSONL file + duration: Recording duration in seconds + + Raises: + Abort: If user cancels password prompt + ClickException: If output directory doesn't exist + + \b + Authentication: + - First tries SSH key authentication + - Falls back to password authentication if key auth fails + - Prompts for password if not provided via --password option + + \b + AXIS OS Compatibility: + - AXIS OS < 12: Can SSH as root without password restrictions + - AXIS OS 12+: SSH as root is disabled, use FixedIT Data Agent user in + dev mode + """ + click.echo( + "Recording real analytics scene description data from device..." + ) + click.echo(f"Device: {username}@{host}") + click.echo(f"Topic: {topic}") + click.echo(f"Source: {source}") + click.echo(f"Duration: {duration} seconds") + click.echo(f"Output file: {output_file}") + click.echo("") + + # Validate that output directory exists + output_path = Path(output_file) + if not output_path.parent.exists(): + raise click.ClickException( + f"Output directory does not exist: {output_path.parent}" + ) + + if not password: + try: + # Try to connect without password first (key auth) + ssh_runner = SSHCommandRunner(host, username) + ssh_runner.connect() + click.echo("✅ Connected using SSH key authentication") + except (paramiko.AuthenticationException, paramiko.SSHException): + # Key auth failed, prompt for password + try: + password = getpass.getpass(f"Password for {username}@{host}: ") + ssh_runner = SSHCommandRunner(host, username, password) + ssh_runner.connect() + click.echo("✅ Connected using password authentication") + except KeyboardInterrupt: + click.echo("\n❌ Cancelled by user") + raise click.Abort() + except KeyboardInterrupt: + click.echo("\n❌ Cancelled by user") + raise click.Abort() + else: + ssh_runner = SSHCommandRunner(host, username, password) + ssh_runner.connect() + click.echo("✅ Connected to device") + + click.echo("Starting data recording...") + + try: + # Record data + recorder = DataRecorder(ssh_runner) + line_count = recorder.record_data(topic, source, output_path, duration) + + if line_count > 0: + click.echo( + f"✅ Successfully recorded {line_count} lines of real device " + f"data" + ) + click.echo(f"📁 Saved to: {output_file}") + click.echo("") + click.echo("Sample of recorded data (first 3 lines):") + else: + click.echo("ℹ️ No data was recorded during the timeout period.") + click.echo("This is normal if:") + click.echo(" - No motion or objects were detected by the camera") + click.echo(" - No analytics events occurred during recording") + click.echo( + f" - The specified topic/source '{topic}/{source}' had no " + f"activity" + ) + click.echo("") + click.echo("The connection and command executed successfully.") + finally: + ssh_runner.close() + + click.echo("") + click.echo("🧪 To test with this real data, use:") + click.echo(f'export SAMPLE_FILE="{output_file}"') + click.echo( + "Then run your telegraf test commands as documented in README.md" + ) + + +if __name__ == '__main__': + main() diff --git a/project-time-in-area-analytics/test_scripts/requirements.txt b/project-time-in-area-analytics/test_scripts/requirements.txt new file mode 100644 index 0000000..488114d --- /dev/null +++ b/project-time-in-area-analytics/test_scripts/requirements.txt @@ -0,0 +1,4 @@ +click==8.2.1 +matplotlib==3.9.4 +numpy==2.2.1 +paramiko==3.5.0 diff --git a/project-time-in-area-analytics/test_scripts/track_heatmap_viewer.py b/project-time-in-area-analytics/test_scripts/track_heatmap_viewer.py new file mode 100755 index 0000000..ea6524e --- /dev/null +++ b/project-time-in-area-analytics/test_scripts/track_heatmap_viewer.py @@ -0,0 +1,697 @@ +#!/usr/bin/env python3 +""" +Track Heatmap Viewer. + +This script creates a heatmap visualization showing when different track IDs are active over time. +The visualization displays: +- X-axis: Time (timestamps of frames with observations) +- Y-axis: Track IDs +- Green cells: Track is present in that frame +- Gray cells: Track is not present in that frame + +Note: Only frames with observations are shown. Gaps in time are not represented. +This helps visualize track lifecycles and identify patterns in object detection data. +""" + +import json +import sys +from dataclasses import dataclass +from datetime import datetime +from pathlib import Path +from typing import Dict, List, Optional, Set, Tuple, Union + +import click +import matplotlib.pyplot as plt +import numpy as np + +# Color constants for heatmap visualization +COLOR_ABSENT = "#CCCCCC" # Gray - track is absent +COLOR_PRESENT = "#4CAF50" # Green - track is present +COLOR_ALARM = "#F44336" # Red - track exceeds alarm threshold + + +@dataclass +class BoundingBox: + """Bounding box coordinates.""" + + left: float + top: float + right: float + bottom: float + + +@dataclass +class ObjectClass: + """Object classification.""" + + type: str + + +@dataclass +class Detection: + """A single object detection with tracking information.""" + + track_id: str + timestamp: str + bounding_box: BoundingBox + class_info: ObjectClass + + +@dataclass +class Frame: + """A single frame containing multiple detections.""" + + frame_number: int + timestamp: str + detections: List[Detection] + + @property + def track_ids(self) -> List[str]: + """ + Get all track IDs present in this frame, sorted alphabetically. + + Examples: + >>> bbox1 = BoundingBox(0.1, 0.2, 0.3, 0.4) + >>> bbox2 = BoundingBox(0.2, 0.3, 0.4, 0.5) + >>> detection1 = Detection("track_001", "2024-01-15T10:00:01Z", bbox1, ObjectClass("Human")) + >>> detection2 = Detection("track_002", "2024-01-15T10:00:01Z", bbox2, ObjectClass("Vehicle")) + >>> frame = Frame(1, "2024-01-15T10:00:01Z", [detection1, detection2]) + >>> frame.track_ids + ['track_001', 'track_002'] + """ + return sorted({detection.track_id for detection in self.detections}) + + +@dataclass +class TrackData: + """Container for parsed track data from JSONL file.""" + + frames: List[Frame] + all_track_ids: Set[str] + + +def _parse_observation_to_detection(obs: Dict) -> Detection: + """ + Parse a single observation dictionary into a Detection object. + + Args: + obs: Observation dictionary from JSONL data + + Returns: + Detection object with parsed data + + Raises: + ValueError: If required fields are missing + + Examples: + >>> obs = { + ... "track_id": "track_001", + ... "timestamp": "2024-01-15T10:00:01Z", + ... "bounding_box": {"left": 0.2, "top": 0.4, "right": 0.3, "bottom": 0.6}, + ... "class": {"type": "Human"} + ... } + >>> detection = _parse_observation_to_detection(obs) + >>> detection.track_id + 'track_001' + >>> detection.timestamp + '2024-01-15T10:00:01Z' + >>> detection.bounding_box.left + 0.2 + >>> detection.class_info.type + 'Human' + """ + # Validate required fields + if "track_id" not in obs: + raise ValueError("Missing required 'track_id' field in observation") + if "timestamp" not in obs: + raise ValueError("Missing required 'timestamp' field in observation") + if "bounding_box" not in obs: + raise ValueError("Missing required 'bounding_box' field in observation") + # Create BoundingBox + bbox_data = obs["bounding_box"] + if not all(coord in bbox_data for coord in ["left", "top", "right", "bottom"]): + raise ValueError("Missing required bounding box coordinates (left, top, right, bottom)") + + bounding_box = BoundingBox( + left=bbox_data["left"], + top=bbox_data["top"], + right=bbox_data["right"], + bottom=bbox_data["bottom"], + ) + + # Create ObjectClass (optional - some tracks may not have classification yet) + if "class" in obs and "type" in obs["class"]: + class_info = ObjectClass(type=obs["class"]["type"]) + else: + # Use "Unknown" for tracks without classification + class_info = ObjectClass(type="Unknown") + + # Create Detection + return Detection( + track_id=obs["track_id"], + timestamp=obs["timestamp"], + bounding_box=bounding_box, + class_info=class_info, + ) + + +def _parse_frame_data(frame_data: Dict, line_num: int) -> Tuple[Frame, Set[str]]: + """ + Parse a single frame data dictionary into a Frame object. + + Args: + frame_data: Frame dictionary from JSONL data + line_num: Line number to use as frame number + + Returns: + Tuple of (Frame object, set of track IDs found in this frame) + + Raises: + ValueError: If required frame fields are missing + """ + # Validate required frame fields + if "timestamp" not in frame_data: + raise ValueError("Missing required 'timestamp' field in frame data") + if "observations" not in frame_data: + raise ValueError("Missing required 'observations' field in frame data") + + observations = frame_data["observations"] + frame_timestamp = frame_data["timestamp"] + + # Parse observations into Detection objects + detections = [] + frame_track_ids = set() + + for obs in observations: + if "track_id" in obs: + detection = _parse_observation_to_detection(obs) + detections.append(detection) + frame_track_ids.add(obs["track_id"]) + + # Create Frame object + frame = Frame( + frame_number=line_num, + timestamp=frame_timestamp, + detections=detections, + ) + + return frame, frame_track_ids + + +def _parse_jsonl_line(line: str, line_num: int) -> Tuple[Frame, Set[str]]: + """ + Parse a single line from a JSONL file into a Frame object. + + Args: + line: JSON string from JSONL file + line_num: Line number for error reporting and frame numbering + + Returns: + Tuple of (Frame object, set of track IDs found in this frame) + + Raises: + ValueError: If JSON is invalid or doesn't contain expected 'frame' key + + Examples: + >>> line = '''{"frame": {"timestamp": "2024-01-15T10:00:01Z", "observations": [{"track_id": "track_001", "timestamp": "2024-01-15T10:00:01Z", "bounding_box": {"left": 0.2, "top": 0.4, "right": 0.3, "bottom": 0.6}, "class": {"type": "Human"}}]}}''' + >>> frame, track_ids = _parse_jsonl_line(line, 1) + >>> frame.frame_number + 1 + >>> frame.timestamp + '2024-01-15T10:00:01Z' + >>> len(frame.detections) + 1 + >>> track_ids + {'track_001'} + """ + try: + data = json.loads(line) + except json.JSONDecodeError as e: + raise ValueError( + f"Invalid JSON on line {line_num}: {e}. " + f"Expected JSONL format with one JSON object per line." + ) from e + + # All valid lines must contain frame data + if "frame" not in data: + raise ValueError( + f"Missing 'frame' key on line {line_num}. " + f'Expected format: {{"frame": {{...}}}} but got keys: {list(data.keys())}' + ) + + return _parse_frame_data(data["frame"], line_num) + + +def parse_jsonl_file(file_path: Path) -> TrackData: + """ + Parse JSONL file and extract frame data and all unique track IDs. + + Args: + file_path: Path to the JSONL file + + Returns: + TrackData containing frames and all unique track IDs + + Raises: + FileNotFoundError: If the input file doesn't exist + OSError: If there's an error reading the file + ValueError: If JSON is invalid or missing expected 'frame' key + """ + frames = [] + all_track_ids = set() + + try: + with open(file_path, "r", encoding="utf-8") as f: + for line_num, line in enumerate(f, 1): + line = line.strip() + if not line: + continue + + try: + frame, frame_track_ids = _parse_jsonl_line(line, line_num) + frames.append(frame) + all_track_ids.update(frame_track_ids) + + except ValueError as e: + raise ValueError(f"Error parsing line {line_num}: {e}") from e + + except FileNotFoundError as e: + raise FileNotFoundError(f"File not found: {file_path}") from e + except OSError as e: + raise OSError(f"Error reading file {file_path}: {e}") from e + + return TrackData(frames=frames, all_track_ids=all_track_ids) + + +def _create_heatmap_matrix( + frames: List[Frame], sorted_track_ids: List[str] +) -> np.ndarray: + """ + Create the heatmap matrix from frame data. + + Args: + frames: List of Frame objects + sorted_track_ids: Sorted list of track IDs + + Returns: + 2D numpy array representing track presence over time + + Examples: + >>> # Create test data - 3 frames, 2 tracks + >>> bbox = BoundingBox(0.1, 0.2, 0.3, 0.4) + >>> obj_class = ObjectClass("Human") + >>> + >>> # Frame 1: only track_001 + >>> det1 = Detection("track_001", "2024-01-01T00:00:01Z", bbox, obj_class) + >>> frame1 = Frame(1, "2024-01-01T00:00:01Z", [det1]) + >>> + >>> # Frame 2: both tracks + >>> det2a = Detection("track_001", "2024-01-01T00:00:02Z", bbox, obj_class) + >>> det2b = Detection("track_002", "2024-01-01T00:00:02Z", bbox, obj_class) + >>> frame2 = Frame(2, "2024-01-01T00:00:02Z", [det2a, det2b]) + >>> + >>> # Frame 3: only track_002 + >>> det3 = Detection("track_002", "2024-01-01T00:00:03Z", bbox, obj_class) + >>> frame3 = Frame(3, "2024-01-01T00:00:03Z", [det3]) + >>> + >>> frames = [frame1, frame2, frame3] + >>> track_ids = ["track_001", "track_002"] + >>> matrix = _create_heatmap_matrix(frames, track_ids) + >>> matrix.shape + (2, 3) + >>> matrix.tolist() + [[1.0, 1.0, 0.0], [0.0, 1.0, 1.0]] + """ + num_tracks = len(sorted_track_ids) + num_frames = len(frames) + heatmap_matrix = np.zeros((num_tracks, num_frames)) + + for frame_idx, frame in enumerate(frames): + frame_track_ids = set(frame.track_ids) + for track_idx, track_id in enumerate(sorted_track_ids): + if track_id in frame_track_ids: + heatmap_matrix[track_idx, frame_idx] = 1 + + return heatmap_matrix + + +def _create_alarm_matrix( + frames: List[Frame], sorted_track_ids: List[str], alarm_threshold: float +) -> np.ndarray: + """ + Create a matrix indicating which tracks exceed the alarm threshold. + + This function implements time-in-area calculation by tracking when each track first + appears and calculating how long it has been present. When a track's time in area + exceeds the alarm_threshold, it gets marked as an alarm condition. + + The algorithm: + 1. Track first appearance time for each track ID + 2. For each subsequent frame, calculate time elapsed since first appearance + 3. Mark frames where time_in_area >= alarm_threshold as alarm conditions + + This creates a separate "alarm layer" that gets combined with the basic presence + heatmap to show alarm conditions in red while normal presence remains green. + + Args: + frames: List of Frame objects with timestamps and detections + sorted_track_ids: Sorted list of track IDs for consistent matrix ordering + alarm_threshold: Time threshold in seconds for alarm conditions + + Returns: + 2D numpy array: 1 where track exceeds threshold, 0 otherwise + + Examples: + >>> # Create test data - track_001 exceeds 2-second threshold + >>> bbox = BoundingBox(0.1, 0.2, 0.3, 0.4) + >>> obj_class = ObjectClass("Human") + >>> + >>> # Frame 1: track_001 appears (0 seconds elapsed) + >>> det1 = Detection("track_001", "2024-01-01T00:00:01Z", bbox, obj_class) + >>> frame1 = Frame(1, "2024-01-01T00:00:01Z", [det1]) + >>> + >>> # Frame 2: track_001 still present (1 second elapsed) + >>> det2 = Detection("track_001", "2024-01-01T00:00:02Z", bbox, obj_class) + >>> frame2 = Frame(2, "2024-01-01T00:00:02Z", [det2]) + >>> + >>> # Frame 3: track_001 still present (3 seconds elapsed - exceeds threshold!) + >>> det3 = Detection("track_001", "2024-01-01T00:00:04Z", bbox, obj_class) + >>> frame3 = Frame(3, "2024-01-01T00:00:04Z", [det3]) + >>> + >>> # Frame 4: track_001 still present (5 seconds elapsed - still in alarm) + >>> det4 = Detection("track_001", "2024-01-01T00:00:06Z", bbox, obj_class) + >>> frame4 = Frame(4, "2024-01-01T00:00:06Z", [det4]) + >>> + >>> frames = [frame1, frame2, frame3, frame4] + >>> track_ids = ["track_001"] + >>> alarm_matrix = _create_alarm_matrix(frames, track_ids, 2.0) + >>> alarm_matrix.shape + (1, 4) + >>> alarm_matrix.tolist() + [[0.0, 0.0, 1.0, 1.0]] + """ + num_tracks = len(sorted_track_ids) + num_frames = len(frames) + + # Create alarm matrix: same dimensions as heatmap, but tracks alarm conditions + alarm_matrix = np.zeros((num_tracks, num_frames)) + + # Track first appearance times as seconds - this is our "state" for time-in-area calculation + track_first_seen: Dict[str, float] = {} + + # Reference time for converting timestamps to seconds + reference_time: Union[datetime, None] = None + + # Process each frame chronologically to calculate cumulative time in area + for frame_idx, frame in enumerate(frames): + frame_track_ids = frame.track_ids + frame_timestamp = frame.timestamp + + # All frames must have timestamps for time-in-area calculation + if not frame_timestamp: + raise ValueError( + f"Missing timestamp in frame {frame_idx}. Time-in-area calculation requires timestamps in all frames." + ) + + # Convert timestamp to seconds relative to first frame + try: + current_datetime = datetime.fromisoformat( + frame_timestamp.replace("Z", "+00:00") + ) + if reference_time is None: + reference_time = current_datetime + current_time_seconds = 0.0 + else: + time_diff = current_datetime - reference_time + current_time_seconds = time_diff.total_seconds() + except ValueError as e: + raise ValueError( + f"Invalid timestamp format '{frame_timestamp}' in frame {frame_idx}: {e}. Expected ISO format like '2024-01-15T10:00:01Z'" + ) from e + + # Check each track to see if it's present and calculate time in area + for track_idx, track_id in enumerate(sorted_track_ids): + if track_id in frame_track_ids: + # Record when we first see this track (start of time-in-area measurement) + if track_id not in track_first_seen: + track_first_seen[track_id] = current_time_seconds + + # Calculate how long this track has been in the area + first_time_seconds = track_first_seen[track_id] + time_in_area = current_time_seconds - first_time_seconds + + # Mark this frame as alarm condition if track exceeds threshold + if time_in_area >= alarm_threshold: + alarm_matrix[track_idx, frame_idx] = 1 + + return alarm_matrix + + +def _setup_alarm_heatmap_plot( + heatmap_matrix: np.ndarray, + num_tracks: int, + num_frames: int, + alarm_matrix: Optional[np.ndarray] = None, +): + """ + Set up the matplotlib plot for the heatmap with appropriate colors. + + Args: + heatmap_matrix: 2D numpy array with track presence data + num_tracks: Number of unique tracks + num_frames: Number of frames + alarm_matrix: Optional 2D numpy array with alarm data. If provided, uses 3-color scheme. + + Returns: + Tuple of (axes, image) from matplotlib + """ + _, ax = plt.subplots(figsize=(max(12, num_frames * 0.1), max(6, num_tracks * 0.3))) + + # Create combined matrix: 0=absent, 1=present, 2=alarm (if alarm_matrix provided) + if alarm_matrix is not None: + combined_matrix = heatmap_matrix + alarm_matrix + show_alarm_colors = True + else: + combined_matrix = heatmap_matrix + show_alarm_colors = False + + if show_alarm_colors: + # Three-color colormap: gray, green, red + colors = [COLOR_ABSENT, COLOR_PRESENT, COLOR_ALARM] + title = "Track Activity Heatmap\n(Gray = Absent, Green = Present, Red = Alarm)" + vmax = 2 + else: + # Two-color colormap: gray, green + colors = [COLOR_ABSENT, COLOR_PRESENT] + title = "Track Activity Heatmap\n(Green = Track Present, Gray = Track Absent)" + vmax = 1 + + cmap = plt.matplotlib.colors.ListedColormap(colors) + + im = ax.imshow( + combined_matrix, + cmap=cmap, + aspect="auto", + interpolation="nearest", + vmin=0, + vmax=vmax, + ) + + ax.set_xlabel("Time (Frames with Observations)") + ax.set_ylabel("Track ID") + ax.set_title(title) + + return ax, im + + +def create_heatmap( + frames: List[Frame], + all_track_ids: Set[str], + alarm_threshold: float = float("inf"), +) -> None: + """ + Create a heatmap visualization of track activity over time with optional alarm overlay. + + This function creates a dual-layer visualization: + 1. Base heatmap: Shows basic track presence (green) vs absence (gray) + 2. Alarm overlay: Shows tracks that exceed time-in-area threshold (red) + + The visualization combines both layers: gray=absent, green=present, red=alarm. + When alarm_threshold is infinite (default), only the base heatmap is shown. + When a threshold is specified, tracks exceeding that time duration are highlighted in red. + + This allows visual comparison with Telegraf output to validate alarm logic. + + Args: + frames: List of Frame objects with timestamps and detections + all_track_ids: Set of all unique track IDs found in the data + alarm_threshold: Time threshold in seconds for alarm visualization (default: inf = no alarms) + """ + if not frames: + click.echo("No frame data to visualize.") + return + + if not all_track_ids: + click.echo("No track IDs found in the data.") + return + + sorted_track_ids = sorted(list(all_track_ids)) + num_tracks = len(sorted_track_ids) + num_frames = len(frames) + + heatmap_matrix = _create_heatmap_matrix(frames, sorted_track_ids) + + # Only create alarm matrix if user requested alarm visualization + if alarm_threshold != float("inf"): + alarm_matrix = _create_alarm_matrix(frames, sorted_track_ids, alarm_threshold) + ax, im = _setup_alarm_heatmap_plot( + heatmap_matrix, num_tracks, num_frames, alarm_matrix + ) + else: + ax, im = _setup_alarm_heatmap_plot(heatmap_matrix, num_tracks, num_frames) + + # Set y-axis labels (track IDs) + ax.set_yticks(range(num_tracks)) + ax.set_yticklabels(sorted_track_ids) + + # Set x-axis labels (timestamps) + step = max(1, num_frames // 20) # Show ~20 labels max + x_ticks = range(0, num_frames, step) + # Format timestamps to show just time (HH:MM:SS) + x_labels = [] + for i in x_ticks: + timestamp_str = frames[i].timestamp + # Parse ISO timestamp and format as HH:MM:SS + dt = datetime.fromisoformat(timestamp_str.replace('Z', '+00:00')) + x_labels.append(dt.strftime("%H:%M:%S")) + ax.set_xticks(x_ticks) + ax.set_xticklabels(x_labels, rotation=45) + + # Add grid for better readability + ax.set_xticks(np.arange(-0.5, num_frames, 1), minor=True) + ax.set_yticks(np.arange(-0.5, num_tracks, 1), minor=True) + ax.grid(which="minor", color="white", linestyle="-", linewidth=0.5) + + # Add colorbar legend + cbar = plt.colorbar(im, ax=ax, shrink=0.6) + if alarm_threshold != float("inf"): + cbar.set_ticks([0.33, 1.0, 1.67]) + cbar.set_ticklabels(["Absent", "Present", "Alarm"]) + else: + cbar.set_ticks([0.25, 0.75]) + cbar.set_ticklabels(["Absent", "Present"]) + + # Calculate statistics + frames_with_activity = np.sum(np.sum(heatmap_matrix, axis=0) >= 1) + activity_percentage = ( + (frames_with_activity / num_frames) * 100 if num_frames > 0 else 0 + ) + + # Calculate alarm statistics if alarm matrix exists + alarm_tracks = set() + if alarm_threshold != float("inf"): + # Find tracks that have at least one alarm (red box) + for track_idx, track_id in enumerate(sorted_track_ids): + if np.any(alarm_matrix[track_idx, :] > 0): + alarm_tracks.add(track_id) + + # Print alarm tracks to stdout for Telegraf comparison + if alarm_tracks: + print(f"\nTracks with alarms (>= {alarm_threshold}s):") + for track_id in sorted(alarm_tracks): + print(f" {track_id}") + else: + print(f"\nNo tracks exceeded alarm threshold of {alarm_threshold}s") + + # Render statistics text overlay + alarm_count = len(alarm_tracks) + alarm_stats = f" | Alarms: {alarm_count}" if alarm_threshold != float("inf") else "" + + stats_text = ( + f"Tracks: {num_tracks} | Frames: {num_frames} | " + f"Activity: {activity_percentage:.1f}%{alarm_stats}" + ) + ax.text( + 0.02, + 0.98, + stats_text, + transform=ax.transAxes, + bbox={"boxstyle": "round,pad=0.3", "facecolor": "white", "alpha": 0.8}, + verticalalignment="top", + fontsize=10, + ) + + plt.tight_layout() + plt.show() + + +@click.command() +@click.argument("input_file", type=click.Path(exists=True)) +@click.option( + "--verbose", + "-v", + is_flag=True, + help="Enable verbose output with detailed statistics.", +) +@click.option( + "--alarm-threshold", + "-a", + type=float, + default=float("inf"), + help="Time threshold in seconds for alarm visualization (tracks exceeding this show in red).", +) +def main(input_file: str, verbose: bool, alarm_threshold: float): + """ + Create a heatmap visualization of track activity over time. + + Args: + input_file: Path to JSONL file containing frame data with track IDs + verbose: Enable verbose output with detailed statistics + alarm_threshold: Time threshold in seconds for alarm visualization + + INPUT_FILE should be a JSONL file containing frame data with track IDs, + such as the output from FixedIT Data Agent analytics or test data files. + + Examples: + # Display heatmap interactively + python track_heatmap_viewer.py test_files/simple_tracks.jsonl + + # Verbose output with statistics + python track_heatmap_viewer.py test_files/simple_tracks.jsonl --verbose + + # Show alarms for tracks exceeding 5 seconds + python track_heatmap_viewer.py test_files/simple_tracks.jsonl --alarm-threshold 5.0 + """ + try: + click.echo(f"Loading track data from: {input_file}") + + # Parse the input file + track_data = parse_jsonl_file(Path(input_file)) + frames = track_data.frames + all_track_ids = track_data.all_track_ids + + if verbose: + click.echo("\nDataset Statistics:") + click.echo(f" Total frames: {len(frames)}") + click.echo(f" Unique tracks: {len(all_track_ids)}") + + if frames: + first_timestamp = frames[0].timestamp + last_timestamp = frames[-1].timestamp + click.echo(f" Time range: {first_timestamp} to {last_timestamp}") + + if all_track_ids: + click.echo(f" Track IDs: {', '.join(sorted(all_track_ids))}") + + # Create the heatmap + create_heatmap(frames, all_track_ids, alarm_threshold) + + click.echo("\nClose the plot window to exit.") + + except (OSError, ValueError) as e: + click.echo(f"Error: {e}", err=True) + sys.exit(1) + + +if __name__ == "__main__": + main() # pylint: disable=no-value-for-parameter From da77d3fe9df85358909bab5364e1a182ca3a35f7 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Sat, 16 Aug 2025 11:46:09 +0200 Subject: [PATCH 03/42] Add automated system tests to CI/CD This commit adds system tests as a CICD job and fixes a few bugs: - Different > vs >= in the two implementations - Gap in fake data was longer than forget time which is not realistic --- .../project-time-in-area-test-analytics.yml | 366 ++++++++++++++++++ project-time-in-area-analytics/README.md | 45 +++ .../config_process_threshold_filter.conf | 4 +- .../test_files/simple_tracks.jsonl | 10 +- .../test_scripts/track_heatmap_viewer.py | 212 ++++++---- 5 files changed, 564 insertions(+), 73 deletions(-) create mode 100644 .github/workflows/project-time-in-area-test-analytics.yml diff --git a/.github/workflows/project-time-in-area-test-analytics.yml b/.github/workflows/project-time-in-area-test-analytics.yml new file mode 100644 index 0000000..9517d15 --- /dev/null +++ b/.github/workflows/project-time-in-area-test-analytics.yml @@ -0,0 +1,366 @@ +name: Test Time-in-Area Analytics + +on: + push: + branches: [main, feature/*] + paths: + - "project-time-in-area-analytics/**" + - ".github/workflows/project-time-in-area-test-analytics.yml" + pull_request: + branches: [main] + paths: + - "project-time-in-area-analytics/**" + - ".github/workflows/project-time-in-area-test-analytics.yml" + +jobs: + test-visualization-script: + name: Test Track Heatmap Viewer + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Python 3.13 + uses: actions/setup-python@v4 + with: + python-version: "3.13" + + - name: Install Python dependencies + run: | + cd project-time-in-area-analytics + pip install -r test_scripts/requirements.txt + + - name: Test visualization script - No alarms (threshold 15s) + run: | + cd project-time-in-area-analytics + + echo "Testing heatmap viewer with threshold: 15s (expecting no alarms)" + + # Run heatmap viewer with high threshold + HEATMAP_OUTPUT=$(python test_scripts/track_heatmap_viewer.py test_files/simple_tracks.jsonl --alarm-threshold 15 --no-ui 2>&1) + echo "Heatmap output: $HEATMAP_OUTPUT" + + # Expected: 0 alarms + EXPECTED_ALARMS=0 + + if echo "$HEATMAP_OUTPUT" | grep -q "No tracks exceeded alarm threshold"; then + ACTUAL_ALARMS=0 + else + ACTUAL_ALARMS=$(echo "$HEATMAP_OUTPUT" | grep -A 10 "Tracks with alarms" | grep -E "^\s+track_" | wc -l) + fi + + echo "Expected alarms: $EXPECTED_ALARMS" + echo "Actual alarms: $ACTUAL_ALARMS" + + if [ "$ACTUAL_ALARMS" -eq "$EXPECTED_ALARMS" ]; then + echo "✅ PASS: Heatmap viewer correctly found $ACTUAL_ALARMS alarms for threshold 15s" + else + echo "❌ FAIL: Expected $EXPECTED_ALARMS alarms but found $ACTUAL_ALARMS for threshold 15s" + exit 1 + fi + + - name: Test visualization script - Some alarms (threshold 2s) + run: | + cd project-time-in-area-analytics + + echo "Testing heatmap viewer with threshold: 2s (expecting 3 alarms)" + + # Run heatmap viewer with moderate threshold + HEATMAP_OUTPUT=$(python test_scripts/track_heatmap_viewer.py test_files/simple_tracks.jsonl --alarm-threshold 2 --no-ui 2>&1) + echo "Heatmap output: $HEATMAP_OUTPUT" + + # Expected: 3 alarms (track_001, track_002, track_003) + EXPECTED_ALARMS=3 + EXPECTED_TRACKS="track_001 track_002 track_003" + + if echo "$HEATMAP_OUTPUT" | grep -q "No tracks exceeded alarm threshold"; then + ACTUAL_ALARMS=0 + ACTUAL_TRACKS="" + else + ACTUAL_ALARMS=$(echo "$HEATMAP_OUTPUT" | grep -A 10 "Tracks with alarms" | grep -E "^\s+track_" | wc -l) + ACTUAL_TRACKS=$(echo "$HEATMAP_OUTPUT" | grep -A 10 "Tracks with alarms" | grep -E "^\s+track_" | sed 's/^\s*//' | sort | tr '\n' ' ' | sed 's/ $//') + fi + + echo "Expected alarms: $EXPECTED_ALARMS" + echo "Expected tracks: $EXPECTED_TRACKS" + echo "Actual alarms: $ACTUAL_ALARMS" + echo "Actual tracks: $ACTUAL_TRACKS" + + if [ "$ACTUAL_ALARMS" -eq "$EXPECTED_ALARMS" ] && [ "$ACTUAL_TRACKS" = "$EXPECTED_TRACKS" ]; then + echo "✅ PASS: Heatmap viewer correctly found $ACTUAL_ALARMS alarms with correct track IDs for threshold 2s" + else + echo "❌ FAIL: Expected $EXPECTED_ALARMS alarms ($EXPECTED_TRACKS) but found $ACTUAL_ALARMS alarms ($ACTUAL_TRACKS) for threshold 2s" + exit 1 + fi + + - name: Test visualization script - All alarms (threshold 0s) + run: | + cd project-time-in-area-analytics + + echo "Testing heatmap viewer with threshold: 0s (expecting 4 alarms)" + + # Run heatmap viewer with zero threshold + HEATMAP_OUTPUT=$(python test_scripts/track_heatmap_viewer.py test_files/simple_tracks.jsonl --alarm-threshold 0 --no-ui 2>&1) + echo "Heatmap output: $HEATMAP_OUTPUT" + + # Expected: 4 alarms (all tracks: track_001, track_002, track_003, track_004) + EXPECTED_ALARMS=4 + EXPECTED_TRACKS="track_001 track_002 track_003 track_004" + + if echo "$HEATMAP_OUTPUT" | grep -q "No tracks exceeded alarm threshold"; then + ACTUAL_ALARMS=0 + ACTUAL_TRACKS="" + else + ACTUAL_ALARMS=$(echo "$HEATMAP_OUTPUT" | grep -A 10 "Tracks with alarms" | grep -E "^\s+track_" | wc -l) + ACTUAL_TRACKS=$(echo "$HEATMAP_OUTPUT" | grep -A 10 "Tracks with alarms" | grep -E "^\s+track_" | sed 's/^\s*//' | sort | tr '\n' ' ' | sed 's/ $//') + fi + + echo "Expected alarms: $EXPECTED_ALARMS" + echo "Expected tracks: $EXPECTED_TRACKS" + echo "Actual alarms: $ACTUAL_ALARMS" + echo "Actual tracks: $ACTUAL_TRACKS" + + if [ "$ACTUAL_ALARMS" -eq "$EXPECTED_ALARMS" ] && [ "$ACTUAL_TRACKS" = "$EXPECTED_TRACKS" ]; then + echo "✅ PASS: Heatmap viewer correctly found $ACTUAL_ALARMS alarms with correct track IDs for threshold 0s" + else + echo "❌ FAIL: Expected $EXPECTED_ALARMS alarms ($EXPECTED_TRACKS) but found $ACTUAL_ALARMS alarms ($ACTUAL_TRACKS) for threshold 0s" + exit 1 + fi + + test-telegraf-pipeline: + name: Test Telegraf Pipeline + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install Telegraf + run: | + # Add InfluxDB repository + wget -qO- https://repos.influxdata.com/influxdata-archive_compat.key | sudo apt-key add - + echo "deb https://repos.influxdata.com/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/influxdb.list + + # Install Telegraf + sudo apt-get update + sudo apt-get install -y telegraf jq + + - name: Test Telegraf pipeline - No alarms (threshold 15s) + run: | + cd project-time-in-area-analytics + + echo "Testing Telegraf pipeline with threshold: 15s (expecting no alarms)" + + # Set up environment variables + export HELPER_FILES_DIR="$(pwd)" + export SAMPLE_FILE="test_files/simple_tracks.jsonl" + export ALERT_THRESHOLD_SECONDS="15" + + # Run Telegraf pipeline + TELEGRAF_OUTPUT=$(telegraf --config test_files/config_input_sample_data.conf \ + --config config_process_track_duration.conf \ + --config config_process_threshold_filter.conf \ + --config test_files/config_output_stdout.conf \ + --once 2>/dev/null) + + echo "Telegraf output: $TELEGRAF_OUTPUT" + + # Expected: 0 alarms + EXPECTED_ALARMS=0 + + # Count unique track IDs in detection_frame outputs + ACTUAL_ALARMS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "detection_frame") | .fields.track_id' 2>/dev/null | sort -u | wc -l) + + echo "Expected alarms: $EXPECTED_ALARMS" + echo "Actual alarms: $ACTUAL_ALARMS" + + if [ "$ACTUAL_ALARMS" -eq "$EXPECTED_ALARMS" ]; then + echo "✅ PASS: Telegraf pipeline correctly found $ACTUAL_ALARMS alarms for threshold 15s" + else + echo "❌ FAIL: Expected $EXPECTED_ALARMS alarms but found $ACTUAL_ALARMS for threshold 15s" + exit 1 + fi + + - name: Test Telegraf pipeline - Some alarms (threshold 2s) + run: | + cd project-time-in-area-analytics + + echo "Testing Telegraf pipeline with threshold: 2s (expecting 3 alarms)" + + # Set up environment variables + export HELPER_FILES_DIR="$(pwd)" + export SAMPLE_FILE="test_files/simple_tracks.jsonl" + export ALERT_THRESHOLD_SECONDS="2" + + # Run Telegraf pipeline + TELEGRAF_OUTPUT=$(telegraf --config test_files/config_input_sample_data.conf \ + --config config_process_track_duration.conf \ + --config config_process_threshold_filter.conf \ + --config test_files/config_output_stdout.conf \ + --once 2>/dev/null) + + echo "Telegraf output: $TELEGRAF_OUTPUT" + + # Expected: 3 alarms (track_001, track_002, track_003) + EXPECTED_ALARMS=3 + EXPECTED_TRACKS="track_001 track_002 track_003" + + # Extract unique track IDs from detection_frame outputs + ACTUAL_TRACKS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "detection_frame") | .fields.track_id' 2>/dev/null | sort -u | tr '\n' ' ' | sed 's/ $//') + ACTUAL_ALARMS=$(echo "$ACTUAL_TRACKS" | wc -w) + + echo "Expected alarms: $EXPECTED_ALARMS" + echo "Expected tracks: $EXPECTED_TRACKS" + echo "Actual alarms: $ACTUAL_ALARMS" + echo "Actual tracks: $ACTUAL_TRACKS" + + if [ "$ACTUAL_ALARMS" -eq "$EXPECTED_ALARMS" ] && [ "$ACTUAL_TRACKS" = "$EXPECTED_TRACKS" ]; then + echo "✅ PASS: Telegraf pipeline correctly found $ACTUAL_ALARMS alarms with correct track IDs for threshold 1.9s" + else + echo "❌ FAIL: Expected $EXPECTED_ALARMS alarms ($EXPECTED_TRACKS) but found $ACTUAL_ALARMS alarms ($ACTUAL_TRACKS) for threshold 1.9s" + exit 1 + fi + + - name: Test Telegraf pipeline - All alarms (threshold 0s) + run: | + cd project-time-in-area-analytics + + echo "Testing Telegraf pipeline with threshold: 0s (expecting 4 alarms)" + + # Set up environment variables + export HELPER_FILES_DIR="$(pwd)" + export SAMPLE_FILE="test_files/simple_tracks.jsonl" + export ALERT_THRESHOLD_SECONDS="0" + + # Run Telegraf pipeline + TELEGRAF_OUTPUT=$(telegraf --config test_files/config_input_sample_data.conf \ + --config config_process_track_duration.conf \ + --config config_process_threshold_filter.conf \ + --config test_files/config_output_stdout.conf \ + --once 2>/dev/null) + + echo "Telegraf output: $TELEGRAF_OUTPUT" + + # Expected: 4 alarms (all tracks: track_001, track_002, track_003, track_004) + EXPECTED_ALARMS=4 + EXPECTED_TRACKS="track_001 track_002 track_003 track_004" + + # Extract unique track IDs from detection_frame outputs + ACTUAL_TRACKS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "detection_frame") | .fields.track_id' 2>/dev/null | sort -u | tr '\n' ' ' | sed 's/ $//') + ACTUAL_ALARMS=$(echo "$ACTUAL_TRACKS" | wc -w) + + echo "Expected alarms: $EXPECTED_ALARMS" + echo "Expected tracks: $EXPECTED_TRACKS" + echo "Actual alarms: $ACTUAL_ALARMS" + echo "Actual tracks: $ACTUAL_TRACKS" + + if [ "$ACTUAL_ALARMS" -eq "$EXPECTED_ALARMS" ] && [ "$ACTUAL_TRACKS" = "$EXPECTED_TRACKS" ]; then + echo "✅ PASS: Telegraf pipeline correctly found $ACTUAL_ALARMS alarms with correct track IDs for threshold 0s" + else + echo "❌ FAIL: Expected $EXPECTED_ALARMS alarms ($EXPECTED_TRACKS) but found $ACTUAL_ALARMS alarms ($ACTUAL_TRACKS) for threshold 0s" + exit 1 + fi + + summary: + name: Test Summary + runs-on: ubuntu-latest + needs: [test-visualization-script, test-telegraf-pipeline] + if: always() + + permissions: + contents: read + pull-requests: write + + steps: + - name: Check test results + id: test_results + run: | + VIS_RESULT="${{ needs.test-visualization-script.result }}" + TELEGRAF_RESULT="${{ needs.test-telegraf-pipeline.result }}" + + echo "vis_result=$VIS_RESULT" >> $GITHUB_OUTPUT + echo "telegraf_result=$TELEGRAF_RESULT" >> $GITHUB_OUTPUT + + if [ "$VIS_RESULT" = "success" ] && [ "$TELEGRAF_RESULT" = "success" ]; then + echo "🎉 All time-in-area analytics tests passed!" + echo "" + echo "✅ Track Heatmap Viewer tests passed" + echo "✅ Telegraf Pipeline tests passed" + echo "" + echo "Both tools correctly identify tracks that exceed time-in-area thresholds." + echo "all_passed=true" >> $GITHUB_OUTPUT + else + echo "❌ Some tests failed:" + echo " - Track Heatmap Viewer: $VIS_RESULT" + echo " - Telegraf Pipeline: $TELEGRAF_RESULT" + echo "all_passed=false" >> $GITHUB_OUTPUT + fi + + - name: Comment on PR (success) + continue-on-error: true + if: github.event_name == 'pull_request' && steps.test_results.outputs.all_passed == 'true' + uses: actions/github-script@v7 + with: + script: | + const comment = `## 🎉 Time-in-Area Analytics Tests Passed! + + All tests completed successfully: + + ✅ **Track Heatmap Viewer** - All alarm detection scenarios passed + ✅ **Telegraf Pipeline** - All time-in-area calculations verified + + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: comment + }); + + - name: Comment on PR (failure) + continue-on-error: true + if: github.event_name == 'pull_request' && steps.test_results.outputs.all_passed == 'false' + uses: actions/github-script@v7 + with: + script: | + const visResult = '${{ steps.test_results.outputs.vis_result }}'; + const telegrafResult = '${{ steps.test_results.outputs.telegraf_result }}'; + + let comment = `## ❌ Time-in-Area Analytics Tests Failed + + Some tests did not pass: + + ${visResult === 'success' ? '✅' : '❌'} **Track Heatmap Viewer**: ${visResult} + ${telegrafResult === 'success' ? '✅' : '❌'} **Telegraf Pipeline**: ${telegrafResult} + + ### What This Means + `; + + if (visResult !== 'success') { + comment += ` + **Track Heatmap Viewer Issues:** + - The visualization script may not be correctly identifying tracks that exceed time-in-area thresholds + - Check the alarm detection logic in \`track_heatmap_viewer.py\` + `; + } + + if (telegrafResult !== 'success') { + comment += ` + **Telegraf Pipeline Issues:** + - The time-in-area calculation or threshold filtering may not be working correctly + - Check the Starlark processor in \`track_duration_calculator.star\` and threshold filter configuration + `; + } + + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: comment + }); + + - name: Fail if tests failed + if: steps.test_results.outputs.all_passed == 'false' + run: | + echo "❌ Some tests failed" + exit 1 diff --git a/project-time-in-area-analytics/README.md b/project-time-in-area-analytics/README.md index 2dbf65d..52ea90a 100644 --- a/project-time-in-area-analytics/README.md +++ b/project-time-in-area-analytics/README.md @@ -72,6 +72,10 @@ flowchart TD - [Data Behavior](#data-behavior) - [Data Transformation for Telegraf](#data-transformation-for-telegraf) - [Track Activity Visualization](#track-activity-visualization) +- [Automated Testing](#automated-testing) + - [GitHub Workflow](#github-workflow) + - [Test Data](#test-data) + - [PR Comments](#pr-comments) @@ -316,3 +320,44 @@ For installation, usage details, and examples, see the [test_scripts README](tes ![Track Heatmap Example](.images/track-heatmap-120s.png) _Example heatmap showing track activity over time with labeled components_ + +## Automated Testing + +This project includes comprehensive automated testing to ensure both the visualization script and Telegraf pipeline work correctly and produce consistent results. + +### GitHub Workflow + +The automated tests run on every push and pull request via the `project-time-in-area-test-analytics.yml` workflow, which includes: + +**Two Independent Test Jobs:** + +- **Track Heatmap Viewer Tests**: Validates alarm detection in the visualization script +- **Telegraf Pipeline Tests**: Validates time-in-area calculations and threshold filtering + +**Three Test Scenarios per Tool:** + +- **No alarms scenario**: High threshold (15s) should produce no alarms +- **Some alarms scenario**: Moderate threshold (2s) should identify 3 specific tracks +- **All alarms scenario**: Low threshold (0s) should identify all 4 tracks + +Both tools now behave identically, calculating total time-in-area including brief gaps under 60 seconds. If a gap is longer than 60 seconds (should not happen in data from the Axis cameras!?), then the Telegraf pipeline would forget about the track and the time-in-area would be reset to 0 once the track reappears. + +### Test Data + +The tests use `test_files/simple_tracks.jsonl` which contains simplified track data with: + +- `track_001`: Appears twice with 8s gap (total time: 11s) +- `track_002`: Continuous presence for 2s +- `track_003`: Continuous presence for 2s +- `track_004`: Single appearance (0s) + +![Example data visualized](./.images/track-heatmap-simple.png) + +### PR Comments + +The workflow automatically posts detailed comments to pull requests with: + +- ✅ Success confirmation when all tests pass +- ❌ Specific failure diagnostics and troubleshooting steps when tests fail + +This ensures both tools maintain consistent alarm detection behavior and helps catch regressions early in the development process. diff --git a/project-time-in-area-analytics/config_process_threshold_filter.conf b/project-time-in-area-analytics/config_process_threshold_filter.conf index 7297ddb..6175540 100644 --- a/project-time-in-area-analytics/config_process_threshold_filter.conf +++ b/project-time-in-area-analytics/config_process_threshold_filter.conf @@ -18,8 +18,8 @@ def apply(metric): # Get time in area from the metric time_in_area = metric.fields.get("time_in_area_seconds", 0) - # Only return metrics that exceed the threshold - if time_in_area > ${ALERT_THRESHOLD_SECONDS}: + # Only return metrics that exceed or equal the threshold + if time_in_area >= ${ALERT_THRESHOLD_SECONDS}: return metric # Track doesn't exceed threshold - don't output diff --git a/project-time-in-area-analytics/test_files/simple_tracks.jsonl b/project-time-in-area-analytics/test_files/simple_tracks.jsonl index 1d7afa5..5dc9507 100644 --- a/project-time-in-area-analytics/test_files/simple_tracks.jsonl +++ b/project-time-in-area-analytics/test_files/simple_tracks.jsonl @@ -4,8 +4,8 @@ {"frame": {"observations": [{"bounding_box": {"bottom": 0.66, "left": 0.26, "right": 0.36, "top": 0.46}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:04Z", "track_id": "track_001"}, {"bounding_box": {"bottom": 0.58, "left": 0.14, "right": 0.20, "top": 0.38}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:04Z", "track_id": "track_002"}], "timestamp": "2024-01-15T10:00:04Z"}} {"frame": {"observations": [{"bounding_box": {"bottom": 0.60, "left": 0.16, "right": 0.22, "top": 0.40}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:05Z", "track_id": "track_002"}], "timestamp": "2024-01-15T10:00:05Z"}} {"frame": {"observations": [], "operations": [{"id": "track_001", "type": "DeleteOperation"}], "timestamp": "2024-01-15T10:00:06Z"}} -{"frame": {"observations": [{"bounding_box": {"bottom": 0.75, "left": 0.25, "right": 0.35, "top": 0.50}, "class": {"type": "Vehicle"}, "timestamp": "2024-01-15T10:01:10Z", "track_id": "track_003"}], "timestamp": "2024-01-15T10:01:10Z"}} -{"frame": {"observations": [{"bounding_box": {"bottom": 0.77, "left": 0.27, "right": 0.37, "top": 0.52}, "class": {"type": "Vehicle"}, "timestamp": "2024-01-15T10:01:11Z", "track_id": "track_003"}], "timestamp": "2024-01-15T10:01:11Z"}} -{"frame": {"observations": [{"bounding_box": {"bottom": 0.79, "left": 0.29, "right": 0.39, "top": 0.54}, "class": {"type": "Vehicle"}, "timestamp": "2024-01-15T10:01:12Z", "track_id": "track_003"}, {"bounding_box": {"bottom": 0.68, "left": 0.28, "right": 0.38, "top": 0.48}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:01:12Z", "track_id": "track_001"}], "timestamp": "2024-01-15T10:01:12Z"}} -{"frame": {"observations": [{"bounding_box": {"bottom": 0.80, "left": 0.35, "right": 0.45, "top": 0.60}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:01:13Z", "track_id": "track_004"}], "timestamp": "2024-01-15T10:01:13Z"}} -{"frame": {"observations": [], "operations": [], "timestamp": "2024-01-15T10:01:25Z"}} \ No newline at end of file +{"frame": {"observations": [{"bounding_box": {"bottom": 0.75, "left": 0.25, "right": 0.35, "top": 0.50}, "class": {"type": "Vehicle"}, "timestamp": "2024-01-15T10:00:10Z", "track_id": "track_003"}], "timestamp": "2024-01-15T10:00:10Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.77, "left": 0.27, "right": 0.37, "top": 0.52}, "class": {"type": "Vehicle"}, "timestamp": "2024-01-15T10:00:11Z", "track_id": "track_003"}], "timestamp": "2024-01-15T10:00:11Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.79, "left": 0.29, "right": 0.39, "top": 0.54}, "class": {"type": "Vehicle"}, "timestamp": "2024-01-15T10:00:12Z", "track_id": "track_003"}, {"bounding_box": {"bottom": 0.68, "left": 0.28, "right": 0.38, "top": 0.48}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:12Z", "track_id": "track_001"}], "timestamp": "2024-01-15T10:00:12Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.80, "left": 0.35, "right": 0.45, "top": 0.60}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:13Z", "track_id": "track_004"}], "timestamp": "2024-01-15T10:00:13Z"}} +{"frame": {"observations": [], "operations": [], "timestamp": "2024-01-15T10:00:25Z"}} \ No newline at end of file diff --git a/project-time-in-area-analytics/test_scripts/track_heatmap_viewer.py b/project-time-in-area-analytics/test_scripts/track_heatmap_viewer.py index ea6524e..38e89e5 100755 --- a/project-time-in-area-analytics/test_scripts/track_heatmap_viewer.py +++ b/project-time-in-area-analytics/test_scripts/track_heatmap_viewer.py @@ -73,8 +73,12 @@ def track_ids(self) -> List[str]: Examples: >>> bbox1 = BoundingBox(0.1, 0.2, 0.3, 0.4) >>> bbox2 = BoundingBox(0.2, 0.3, 0.4, 0.5) - >>> detection1 = Detection("track_001", "2024-01-15T10:00:01Z", bbox1, ObjectClass("Human")) - >>> detection2 = Detection("track_002", "2024-01-15T10:00:01Z", bbox2, ObjectClass("Vehicle")) + >>> detection1 = Detection( + ... "track_001", "2024-01-15T10:00:01Z", bbox1, ObjectClass("Human") + ... ) + >>> detection2 = Detection( + ... "track_002", "2024-01-15T10:00:01Z", bbox2, ObjectClass("Vehicle") + ... ) >>> frame = Frame(1, "2024-01-15T10:00:01Z", [detection1, detection2]) >>> frame.track_ids ['track_001', 'track_002'] @@ -130,7 +134,9 @@ def _parse_observation_to_detection(obs: Dict) -> Detection: # Create BoundingBox bbox_data = obs["bounding_box"] if not all(coord in bbox_data for coord in ["left", "top", "right", "bottom"]): - raise ValueError("Missing required bounding box coordinates (left, top, right, bottom)") + raise ValueError( + "Missing required bounding box coordinates (left, top, right, bottom)" + ) bounding_box = BoundingBox( left=bbox_data["left"], @@ -213,7 +219,17 @@ def _parse_jsonl_line(line: str, line_num: int) -> Tuple[Frame, Set[str]]: ValueError: If JSON is invalid or doesn't contain expected 'frame' key Examples: - >>> line = '''{"frame": {"timestamp": "2024-01-15T10:00:01Z", "observations": [{"track_id": "track_001", "timestamp": "2024-01-15T10:00:01Z", "bounding_box": {"left": 0.2, "top": 0.4, "right": 0.3, "bottom": 0.6}, "class": {"type": "Human"}}]}}''' + >>> line = '''{ + ... "frame": { + ... "timestamp": "2024-01-15T10:00:01Z", + ... "observations": [{ + ... "track_id": "track_001", + ... "timestamp": "2024-01-15T10:00:01Z", + ... "bounding_box": {"left": 0.2, "top": 0.4, "right": 0.3, "bottom": 0.6}, + ... "class": {"type": "Human"} + ... }] + ... } + ... }''' >>> frame, track_ids = _parse_jsonl_line(line, 1) >>> frame.frame_number 1 @@ -335,7 +351,7 @@ def _create_heatmap_matrix( return heatmap_matrix -def _create_alarm_matrix( +def _create_alarm_matrix( # pylint: disable=too-many-locals frames: List[Frame], sorted_track_ids: List[str], alarm_threshold: float ) -> np.ndarray: """ @@ -410,7 +426,8 @@ def _create_alarm_matrix( # All frames must have timestamps for time-in-area calculation if not frame_timestamp: raise ValueError( - f"Missing timestamp in frame {frame_idx}. Time-in-area calculation requires timestamps in all frames." + f"Missing timestamp in frame {frame_idx}. " + "Time-in-area calculation requires timestamps in all frames." ) # Convert timestamp to seconds relative to first frame @@ -426,7 +443,8 @@ def _create_alarm_matrix( current_time_seconds = time_diff.total_seconds() except ValueError as e: raise ValueError( - f"Invalid timestamp format '{frame_timestamp}' in frame {frame_idx}: {e}. Expected ISO format like '2024-01-15T10:00:01Z'" + f"Invalid timestamp format '{frame_timestamp}' in frame {frame_idx}: {e}. " + "Expected ISO format like '2024-01-15T10:00:01Z'" ) from e # Check each track to see if it's present and calculate time in area @@ -504,36 +522,48 @@ def _setup_alarm_heatmap_plot( return ax, im -def create_heatmap( +@dataclass +class HeatmapData: # pylint: disable=too-many-instance-attributes + """Container for processed heatmap data and statistics.""" + + frames: List[Frame] + sorted_track_ids: List[str] + heatmap_matrix: np.ndarray + alarm_matrix: Optional[np.ndarray] + alarm_tracks: Set[str] + alarm_threshold: float + num_tracks: int + num_frames: int + frames_with_activity: int + activity_percentage: float + + +def process_heatmap_data( frames: List[Frame], all_track_ids: Set[str], alarm_threshold: float = float("inf"), -) -> None: +) -> Optional[HeatmapData]: """ - Create a heatmap visualization of track activity over time with optional alarm overlay. + Process track data and calculate heatmap matrices and statistics. - This function creates a dual-layer visualization: - 1. Base heatmap: Shows basic track presence (green) vs absence (gray) - 2. Alarm overlay: Shows tracks that exceed time-in-area threshold (red) - - The visualization combines both layers: gray=absent, green=present, red=alarm. - When alarm_threshold is infinite (default), only the base heatmap is shown. - When a threshold is specified, tracks exceeding that time duration are highlighted in red. - - This allows visual comparison with Telegraf output to validate alarm logic. + This function processes track data to create: + 1. Base heatmap matrix: Track presence over time + 2. Alarm matrix: Tracks that exceed time-in-area threshold (optional) + 3. Statistics: Activity percentages and alarm counts Args: frames: List of Frame objects with timestamps and detections all_track_ids: Set of all unique track IDs found in the data - alarm_threshold: Time threshold in seconds for alarm visualization (default: inf = no alarms) + alarm_threshold: Time threshold in seconds for alarm calculation (default: inf = no alarms) + + Returns: + HeatmapData object containing processed matrices and statistics, or None if no data """ if not frames: - click.echo("No frame data to visualize.") - return + return None if not all_track_ids: - click.echo("No track IDs found in the data.") - return + return None sorted_track_ids = sorted(list(all_track_ids)) num_tracks = len(sorted_track_ids) @@ -541,75 +571,109 @@ def create_heatmap( heatmap_matrix = _create_heatmap_matrix(frames, sorted_track_ids) - # Only create alarm matrix if user requested alarm visualization + # Only create alarm matrix if user requested alarm calculation + alarm_matrix = None + alarm_tracks = set() if alarm_threshold != float("inf"): alarm_matrix = _create_alarm_matrix(frames, sorted_track_ids, alarm_threshold) + + # Find tracks that have at least one alarm + for track_idx, track_id in enumerate(sorted_track_ids): + if np.any(alarm_matrix[track_idx, :] > 0): + alarm_tracks.add(track_id) + + # Print alarm tracks to stdout for Telegraf comparison + if alarm_tracks: + print(f"\nTracks with alarms (>= {alarm_threshold}s):") + for track_id in sorted(alarm_tracks): + print(f" {track_id}") + else: + print(f"\nNo tracks exceeded alarm threshold of {alarm_threshold}s") + + # Calculate statistics + frames_with_activity = np.sum(np.sum(heatmap_matrix, axis=0) >= 1) + activity_percentage = ( + (frames_with_activity / num_frames) * 100 if num_frames > 0 else 0 + ) + + return HeatmapData( + frames=frames, + sorted_track_ids=sorted_track_ids, + heatmap_matrix=heatmap_matrix, + alarm_matrix=alarm_matrix, + alarm_tracks=alarm_tracks, + alarm_threshold=alarm_threshold, + num_tracks=num_tracks, + num_frames=num_frames, + frames_with_activity=frames_with_activity, + activity_percentage=activity_percentage, + ) + + +def render_heatmap(heatmap_data: HeatmapData) -> None: + """ + Render the heatmap visualization using matplotlib. + + Args: + heatmap_data: Processed heatmap data and statistics + """ + # Set up the plot + if heatmap_data.alarm_matrix is not None: ax, im = _setup_alarm_heatmap_plot( - heatmap_matrix, num_tracks, num_frames, alarm_matrix + heatmap_data.heatmap_matrix, + heatmap_data.num_tracks, + heatmap_data.num_frames, + heatmap_data.alarm_matrix, ) else: - ax, im = _setup_alarm_heatmap_plot(heatmap_matrix, num_tracks, num_frames) + ax, im = _setup_alarm_heatmap_plot( + heatmap_data.heatmap_matrix, + heatmap_data.num_tracks, + heatmap_data.num_frames, + ) # Set y-axis labels (track IDs) - ax.set_yticks(range(num_tracks)) - ax.set_yticklabels(sorted_track_ids) + ax.set_yticks(range(heatmap_data.num_tracks)) + ax.set_yticklabels(heatmap_data.sorted_track_ids) # Set x-axis labels (timestamps) - step = max(1, num_frames // 20) # Show ~20 labels max - x_ticks = range(0, num_frames, step) + step = max(1, heatmap_data.num_frames // 20) # Show ~20 labels max + x_ticks = range(0, heatmap_data.num_frames, step) # Format timestamps to show just time (HH:MM:SS) x_labels = [] for i in x_ticks: - timestamp_str = frames[i].timestamp + timestamp_str = heatmap_data.frames[i].timestamp # Parse ISO timestamp and format as HH:MM:SS - dt = datetime.fromisoformat(timestamp_str.replace('Z', '+00:00')) + dt = datetime.fromisoformat(timestamp_str.replace("Z", "+00:00")) x_labels.append(dt.strftime("%H:%M:%S")) ax.set_xticks(x_ticks) ax.set_xticklabels(x_labels, rotation=45) # Add grid for better readability - ax.set_xticks(np.arange(-0.5, num_frames, 1), minor=True) - ax.set_yticks(np.arange(-0.5, num_tracks, 1), minor=True) + ax.set_xticks(np.arange(-0.5, heatmap_data.num_frames, 1), minor=True) + ax.set_yticks(np.arange(-0.5, heatmap_data.num_tracks, 1), minor=True) ax.grid(which="minor", color="white", linestyle="-", linewidth=0.5) # Add colorbar legend cbar = plt.colorbar(im, ax=ax, shrink=0.6) - if alarm_threshold != float("inf"): + if heatmap_data.alarm_threshold != float("inf"): cbar.set_ticks([0.33, 1.0, 1.67]) cbar.set_ticklabels(["Absent", "Present", "Alarm"]) else: cbar.set_ticks([0.25, 0.75]) cbar.set_ticklabels(["Absent", "Present"]) - # Calculate statistics - frames_with_activity = np.sum(np.sum(heatmap_matrix, axis=0) >= 1) - activity_percentage = ( - (frames_with_activity / num_frames) * 100 if num_frames > 0 else 0 - ) - - # Calculate alarm statistics if alarm matrix exists - alarm_tracks = set() - if alarm_threshold != float("inf"): - # Find tracks that have at least one alarm (red box) - for track_idx, track_id in enumerate(sorted_track_ids): - if np.any(alarm_matrix[track_idx, :] > 0): - alarm_tracks.add(track_id) - - # Print alarm tracks to stdout for Telegraf comparison - if alarm_tracks: - print(f"\nTracks with alarms (>= {alarm_threshold}s):") - for track_id in sorted(alarm_tracks): - print(f" {track_id}") - else: - print(f"\nNo tracks exceeded alarm threshold of {alarm_threshold}s") - # Render statistics text overlay - alarm_count = len(alarm_tracks) - alarm_stats = f" | Alarms: {alarm_count}" if alarm_threshold != float("inf") else "" + alarm_count = len(heatmap_data.alarm_tracks) + alarm_stats = ( + f" | Alarms: {alarm_count}" + if heatmap_data.alarm_threshold != float("inf") + else "" + ) stats_text = ( - f"Tracks: {num_tracks} | Frames: {num_frames} | " - f"Activity: {activity_percentage:.1f}%{alarm_stats}" + f"Tracks: {heatmap_data.num_tracks} | Frames: {heatmap_data.num_frames} | " + f"Activity: {heatmap_data.activity_percentage:.1f}%{alarm_stats}" ) ax.text( 0.02, @@ -640,7 +704,12 @@ def create_heatmap( default=float("inf"), help="Time threshold in seconds for alarm visualization (tracks exceeding this show in red).", ) -def main(input_file: str, verbose: bool, alarm_threshold: float): +@click.option( + "--no-ui", + is_flag=True, + help="Disable matplotlib GUI display (useful for CI/CD and headless environments).", +) +def main(input_file: str, verbose: bool, alarm_threshold: float, no_ui: bool): """ Create a heatmap visualization of track activity over time. @@ -648,6 +717,7 @@ def main(input_file: str, verbose: bool, alarm_threshold: float): input_file: Path to JSONL file containing frame data with track IDs verbose: Enable verbose output with detailed statistics alarm_threshold: Time threshold in seconds for alarm visualization + no_ui: Disable matplotlib GUI display (useful for CI/CD and headless environments) INPUT_FILE should be a JSONL file containing frame data with track IDs, such as the output from FixedIT Data Agent analytics or test data files. @@ -661,6 +731,9 @@ def main(input_file: str, verbose: bool, alarm_threshold: float): # Show alarms for tracks exceeding 5 seconds python track_heatmap_viewer.py test_files/simple_tracks.jsonl --alarm-threshold 5.0 + + # Run in headless mode (no GUI display) + python track_heatmap_viewer.py test_files/simple_tracks.jsonl --alarm-threshold 2.0 --no-ui """ try: click.echo(f"Loading track data from: {input_file}") @@ -683,10 +756,17 @@ def main(input_file: str, verbose: bool, alarm_threshold: float): if all_track_ids: click.echo(f" Track IDs: {', '.join(sorted(all_track_ids))}") - # Create the heatmap - create_heatmap(frames, all_track_ids, alarm_threshold) + # Process the heatmap data + heatmap_data = process_heatmap_data(frames, all_track_ids, alarm_threshold) + + if heatmap_data is None: + click.echo("No data available for visualization.") + return - click.echo("\nClose the plot window to exit.") + # Render the heatmap if UI is enabled + if not no_ui: + render_heatmap(heatmap_data) + click.echo("\nClose the plot window to exit.") except (OSError, ValueError) as e: click.echo(f"Error: {e}", err=True) From c1c8b57a014d6baf069e009573417e31b8a907c6 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Sun, 17 Aug 2025 16:28:40 +0200 Subject: [PATCH 04/42] Clarify system tests --- .../project-time-in-area-test-analytics.yml | 70 ++++++++++++------- 1 file changed, 43 insertions(+), 27 deletions(-) diff --git a/.github/workflows/project-time-in-area-test-analytics.yml b/.github/workflows/project-time-in-area-test-analytics.yml index 9517d15..e76e0a6 100644 --- a/.github/workflows/project-time-in-area-test-analytics.yml +++ b/.github/workflows/project-time-in-area-test-analytics.yml @@ -166,19 +166,23 @@ jobs: echo "Telegraf output: $TELEGRAF_OUTPUT" - # Expected: 0 alarms - EXPECTED_ALARMS=0 + # Expected: 0 unique tracks, 0 alarm detections + EXPECTED_UNIQUE_TRACKS=0 + EXPECTED_ALARM_DETECTIONS=0 - # Count unique track IDs in detection_frame outputs - ACTUAL_ALARMS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "detection_frame") | .fields.track_id' 2>/dev/null | sort -u | wc -l) + # Count unique track IDs and alarm detections in detection_frame outputs + ACTUAL_UNIQUE_TRACKS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "detection_frame") | .fields.track_id' 2>/dev/null | sort -u | wc -l) + ACTUAL_ALARM_DETECTIONS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "detection_frame") | .fields.track_id' 2>/dev/null | wc -l) - echo "Expected alarms: $EXPECTED_ALARMS" - echo "Actual alarms: $ACTUAL_ALARMS" + echo "Expected unique tracks: $EXPECTED_UNIQUE_TRACKS" + echo "Expected alarm detections: $EXPECTED_ALARM_DETECTIONS" + echo "Actual unique tracks: $ACTUAL_UNIQUE_TRACKS" + echo "Actual alarm detections: $ACTUAL_ALARM_DETECTIONS" - if [ "$ACTUAL_ALARMS" -eq "$EXPECTED_ALARMS" ]; then - echo "✅ PASS: Telegraf pipeline correctly found $ACTUAL_ALARMS alarms for threshold 15s" + if [ "$ACTUAL_UNIQUE_TRACKS" -eq "$EXPECTED_UNIQUE_TRACKS" ] && [ "$ACTUAL_ALARM_DETECTIONS" -eq "$EXPECTED_ALARM_DETECTIONS" ]; then + echo "✅ PASS: Telegraf pipeline correctly found $ACTUAL_UNIQUE_TRACKS unique tracks and $ACTUAL_ALARM_DETECTIONS alarm detections for threshold 15s" else - echo "❌ FAIL: Expected $EXPECTED_ALARMS alarms but found $ACTUAL_ALARMS for threshold 15s" + echo "❌ FAIL: Expected $EXPECTED_UNIQUE_TRACKS unique tracks and $EXPECTED_ALARM_DETECTIONS alarm detections, but found $ACTUAL_UNIQUE_TRACKS unique tracks and $ACTUAL_ALARM_DETECTIONS alarm detections for threshold 15s" exit 1 fi @@ -202,23 +206,29 @@ jobs: echo "Telegraf output: $TELEGRAF_OUTPUT" - # Expected: 3 alarms (track_001, track_002, track_003) - EXPECTED_ALARMS=3 + # Expected: 3 unique tracks, 5 alarm detections + # Note: Once a track exceeds the threshold, ALL subsequent detections for that track + # trigger alarms (i.e., get output by the threshold filter) + EXPECTED_UNIQUE_TRACKS=3 + EXPECTED_ALARM_DETECTIONS=5 EXPECTED_TRACKS="track_001 track_002 track_003" - # Extract unique track IDs from detection_frame outputs + # Extract unique track IDs and count alarm detections from detection_frame outputs ACTUAL_TRACKS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "detection_frame") | .fields.track_id' 2>/dev/null | sort -u | tr '\n' ' ' | sed 's/ $//') - ACTUAL_ALARMS=$(echo "$ACTUAL_TRACKS" | wc -w) + ACTUAL_UNIQUE_TRACKS=$(echo "$ACTUAL_TRACKS" | wc -w) + ACTUAL_ALARM_DETECTIONS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "detection_frame") | .fields.track_id' 2>/dev/null | wc -l) - echo "Expected alarms: $EXPECTED_ALARMS" + echo "Expected unique tracks: $EXPECTED_UNIQUE_TRACKS" + echo "Expected alarm detections: $EXPECTED_ALARM_DETECTIONS" echo "Expected tracks: $EXPECTED_TRACKS" - echo "Actual alarms: $ACTUAL_ALARMS" + echo "Actual unique tracks: $ACTUAL_UNIQUE_TRACKS" + echo "Actual alarm detections: $ACTUAL_ALARM_DETECTIONS" echo "Actual tracks: $ACTUAL_TRACKS" - if [ "$ACTUAL_ALARMS" -eq "$EXPECTED_ALARMS" ] && [ "$ACTUAL_TRACKS" = "$EXPECTED_TRACKS" ]; then - echo "✅ PASS: Telegraf pipeline correctly found $ACTUAL_ALARMS alarms with correct track IDs for threshold 1.9s" + if [ "$ACTUAL_UNIQUE_TRACKS" -eq "$EXPECTED_UNIQUE_TRACKS" ] && [ "$ACTUAL_ALARM_DETECTIONS" -eq "$EXPECTED_ALARM_DETECTIONS" ] && [ "$ACTUAL_TRACKS" = "$EXPECTED_TRACKS" ]; then + echo "✅ PASS: Telegraf pipeline correctly found $ACTUAL_UNIQUE_TRACKS unique tracks and $ACTUAL_ALARM_DETECTIONS alarm detections with correct track IDs for threshold 2s" else - echo "❌ FAIL: Expected $EXPECTED_ALARMS alarms ($EXPECTED_TRACKS) but found $ACTUAL_ALARMS alarms ($ACTUAL_TRACKS) for threshold 1.9s" + echo "❌ FAIL: Expected $EXPECTED_UNIQUE_TRACKS unique tracks and $EXPECTED_ALARM_DETECTIONS alarm detections ($EXPECTED_TRACKS) but found $ACTUAL_UNIQUE_TRACKS unique tracks and $ACTUAL_ALARM_DETECTIONS alarm detections ($ACTUAL_TRACKS) for threshold 2s" exit 1 fi @@ -242,23 +252,29 @@ jobs: echo "Telegraf output: $TELEGRAF_OUTPUT" - # Expected: 4 alarms (all tracks: track_001, track_002, track_003, track_004) - EXPECTED_ALARMS=4 + # Expected: 4 unique tracks, 12 alarm detections (all tracks: track_001, track_002, track_003, track_004) + # Note: Once a track exceeds the threshold, ALL subsequent detections for that track + # trigger alarms (i.e., get output by the threshold filter) + EXPECTED_UNIQUE_TRACKS=4 + EXPECTED_ALARM_DETECTIONS=12 EXPECTED_TRACKS="track_001 track_002 track_003 track_004" - # Extract unique track IDs from detection_frame outputs + # Extract unique track IDs and count alarm detections from detection_frame outputs ACTUAL_TRACKS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "detection_frame") | .fields.track_id' 2>/dev/null | sort -u | tr '\n' ' ' | sed 's/ $//') - ACTUAL_ALARMS=$(echo "$ACTUAL_TRACKS" | wc -w) + ACTUAL_UNIQUE_TRACKS=$(echo "$ACTUAL_TRACKS" | wc -w) + ACTUAL_ALARM_DETECTIONS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "detection_frame") | .fields.track_id' 2>/dev/null | wc -l) - echo "Expected alarms: $EXPECTED_ALARMS" + echo "Expected unique tracks: $EXPECTED_UNIQUE_TRACKS" + echo "Expected alarm detections: $EXPECTED_ALARM_DETECTIONS" echo "Expected tracks: $EXPECTED_TRACKS" - echo "Actual alarms: $ACTUAL_ALARMS" + echo "Actual unique tracks: $ACTUAL_UNIQUE_TRACKS" + echo "Actual alarm detections: $ACTUAL_ALARM_DETECTIONS" echo "Actual tracks: $ACTUAL_TRACKS" - if [ "$ACTUAL_ALARMS" -eq "$EXPECTED_ALARMS" ] && [ "$ACTUAL_TRACKS" = "$EXPECTED_TRACKS" ]; then - echo "✅ PASS: Telegraf pipeline correctly found $ACTUAL_ALARMS alarms with correct track IDs for threshold 0s" + if [ "$ACTUAL_UNIQUE_TRACKS" -eq "$EXPECTED_UNIQUE_TRACKS" ] && [ "$ACTUAL_ALARM_DETECTIONS" -eq "$EXPECTED_ALARM_DETECTIONS" ] && [ "$ACTUAL_TRACKS" = "$EXPECTED_TRACKS" ]; then + echo "✅ PASS: Telegraf pipeline correctly found $ACTUAL_UNIQUE_TRACKS unique tracks and $ACTUAL_ALARM_DETECTIONS alarm detections with correct track IDs for threshold 0s" else - echo "❌ FAIL: Expected $EXPECTED_ALARMS alarms ($EXPECTED_TRACKS) but found $ACTUAL_ALARMS alarms ($ACTUAL_TRACKS) for threshold 0s" + echo "❌ FAIL: Expected $EXPECTED_UNIQUE_TRACKS unique tracks and $EXPECTED_ALARM_DETECTIONS alarm detections ($EXPECTED_TRACKS) but found $ACTUAL_UNIQUE_TRACKS unique tracks and $ACTUAL_ALARM_DETECTIONS alarm detections ($ACTUAL_TRACKS) for threshold 0s" exit 1 fi From 594d8c95440d3350b68ea30c498f324d5cc72c4a Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Sun, 17 Aug 2025 16:30:59 +0200 Subject: [PATCH 05/42] Add micro second precission Update simple test files to have fractions of seconds like the real data and add parsing of the fractions to remove discrepancy between test script and true analytics. --- project-time-in-area-analytics/README.md | 6 +-- .../test_files/simple_tracks.jsonl | 22 ++++----- .../track_duration_calculator.star | 46 ++++++++++++++----- 3 files changed, 49 insertions(+), 25 deletions(-) diff --git a/project-time-in-area-analytics/README.md b/project-time-in-area-analytics/README.md index 52ea90a..69a486b 100644 --- a/project-time-in-area-analytics/README.md +++ b/project-time-in-area-analytics/README.md @@ -346,9 +346,9 @@ Both tools now behave identically, calculating total time-in-area including brie The tests use `test_files/simple_tracks.jsonl` which contains simplified track data with: -- `track_001`: Appears twice with 8s gap (total time: 11s) -- `track_002`: Continuous presence for 2s -- `track_003`: Continuous presence for 2s +- `track_001`: Appears twice with 8s gap (total time: 11.33s) +- `track_002`: Continuous presence for 2.22s +- `track_003`: Continuous presence for 2.22s - `track_004`: Single appearance (0s) ![Example data visualized](./.images/track-heatmap-simple.png) diff --git a/project-time-in-area-analytics/test_files/simple_tracks.jsonl b/project-time-in-area-analytics/test_files/simple_tracks.jsonl index 5dc9507..e7f22fd 100644 --- a/project-time-in-area-analytics/test_files/simple_tracks.jsonl +++ b/project-time-in-area-analytics/test_files/simple_tracks.jsonl @@ -1,11 +1,11 @@ -{"frame": {"observations": [{"bounding_box": {"bottom": 0.6, "left": 0.2, "right": 0.3, "top": 0.4}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:01Z", "track_id": "track_001"}], "timestamp": "2024-01-15T10:00:01Z"}} -{"frame": {"observations": [{"bounding_box": {"bottom": 0.62, "left": 0.22, "right": 0.32, "top": 0.42}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:02Z", "track_id": "track_001"}], "timestamp": "2024-01-15T10:00:02Z"}} -{"frame": {"observations": [{"bounding_box": {"bottom": 0.64, "left": 0.24, "right": 0.34, "top": 0.44}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:03Z", "track_id": "track_001"}, {"bounding_box": {"bottom": 0.56, "left": 0.12, "right": 0.18, "top": 0.36}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:03Z", "track_id": "track_002"}], "timestamp": "2024-01-15T10:00:03Z"}} -{"frame": {"observations": [{"bounding_box": {"bottom": 0.66, "left": 0.26, "right": 0.36, "top": 0.46}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:04Z", "track_id": "track_001"}, {"bounding_box": {"bottom": 0.58, "left": 0.14, "right": 0.20, "top": 0.38}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:04Z", "track_id": "track_002"}], "timestamp": "2024-01-15T10:00:04Z"}} -{"frame": {"observations": [{"bounding_box": {"bottom": 0.60, "left": 0.16, "right": 0.22, "top": 0.40}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:05Z", "track_id": "track_002"}], "timestamp": "2024-01-15T10:00:05Z"}} -{"frame": {"observations": [], "operations": [{"id": "track_001", "type": "DeleteOperation"}], "timestamp": "2024-01-15T10:00:06Z"}} -{"frame": {"observations": [{"bounding_box": {"bottom": 0.75, "left": 0.25, "right": 0.35, "top": 0.50}, "class": {"type": "Vehicle"}, "timestamp": "2024-01-15T10:00:10Z", "track_id": "track_003"}], "timestamp": "2024-01-15T10:00:10Z"}} -{"frame": {"observations": [{"bounding_box": {"bottom": 0.77, "left": 0.27, "right": 0.37, "top": 0.52}, "class": {"type": "Vehicle"}, "timestamp": "2024-01-15T10:00:11Z", "track_id": "track_003"}], "timestamp": "2024-01-15T10:00:11Z"}} -{"frame": {"observations": [{"bounding_box": {"bottom": 0.79, "left": 0.29, "right": 0.39, "top": 0.54}, "class": {"type": "Vehicle"}, "timestamp": "2024-01-15T10:00:12Z", "track_id": "track_003"}, {"bounding_box": {"bottom": 0.68, "left": 0.28, "right": 0.38, "top": 0.48}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:12Z", "track_id": "track_001"}], "timestamp": "2024-01-15T10:00:12Z"}} -{"frame": {"observations": [{"bounding_box": {"bottom": 0.80, "left": 0.35, "right": 0.45, "top": 0.60}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:13Z", "track_id": "track_004"}], "timestamp": "2024-01-15T10:00:13Z"}} -{"frame": {"observations": [], "operations": [], "timestamp": "2024-01-15T10:00:25Z"}} \ No newline at end of file +{"frame": {"observations": [{"bounding_box": {"bottom": 0.6, "left": 0.2, "right": 0.3, "top": 0.4}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:01.123456Z", "track_id": "track_001"}], "timestamp": "2024-01-15T10:00:01.123456Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.62, "left": 0.22, "right": 0.32, "top": 0.42}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:02.789012Z", "track_id": "track_001"}], "timestamp": "2024-01-15T10:00:02.789012Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.64, "left": 0.24, "right": 0.34, "top": 0.44}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:03.345678Z", "track_id": "track_001"}, {"bounding_box": {"bottom": 0.56, "left": 0.12, "right": 0.18, "top": 0.36}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:03.345678Z", "track_id": "track_002"}], "timestamp": "2024-01-15T10:00:03.345678Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.66, "left": 0.26, "right": 0.36, "top": 0.46}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:04.901234Z", "track_id": "track_001"}, {"bounding_box": {"bottom": 0.58, "left": 0.14, "right": 0.20, "top": 0.38}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:04.901234Z", "track_id": "track_002"}], "timestamp": "2024-01-15T10:00:04.901234Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.60, "left": 0.16, "right": 0.22, "top": 0.40}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:05.567890Z", "track_id": "track_002"}], "timestamp": "2024-01-15T10:00:05.567890Z"}} +{"frame": {"observations": [], "operations": [{"id": "track_001", "type": "DeleteOperation"}], "timestamp": "2024-01-15T10:00:06.000000Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.75, "left": 0.25, "right": 0.35, "top": 0.50}, "class": {"type": "Vehicle"}, "timestamp": "2024-01-15T10:00:10.234567Z", "track_id": "track_003"}], "timestamp": "2024-01-15T10:00:10.234567Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.77, "left": 0.27, "right": 0.37, "top": 0.52}, "class": {"type": "Vehicle"}, "timestamp": "2024-01-15T10:00:11.890123Z", "track_id": "track_003"}], "timestamp": "2024-01-15T10:00:11.890123Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.79, "left": 0.29, "right": 0.39, "top": 0.54}, "class": {"type": "Vehicle"}, "timestamp": "2024-01-15T10:00:12.456789Z", "track_id": "track_003"}, {"bounding_box": {"bottom": 0.68, "left": 0.28, "right": 0.38, "top": 0.48}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:12.456789Z", "track_id": "track_001"}], "timestamp": "2024-01-15T10:00:12.456789Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.80, "left": 0.35, "right": 0.45, "top": 0.60}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:13.012345Z", "track_id": "track_004"}], "timestamp": "2024-01-15T10:00:13.012345Z"}} +{"frame": {"observations": [], "operations": [], "timestamp": "2024-01-15T10:00:25.000000Z"}} \ No newline at end of file diff --git a/project-time-in-area-analytics/track_duration_calculator.star b/project-time-in-area-analytics/track_duration_calculator.star index 86cdb54..0b9973b 100644 --- a/project-time-in-area-analytics/track_duration_calculator.star +++ b/project-time-in-area-analytics/track_duration_calculator.star @@ -1,14 +1,37 @@ load("time.star", "time") -def parse_timestamp_to_seconds(timestamp_str): - """Parse ISO 8601 timestamp string to Unix seconds +def parse_timestamp_to_float_seconds(timestamp_str): + """Parse ISO 8601 timestamp string to Unix seconds as float - Note: Starlark uses 32-bit signed integers (max: 2,147,483,647). - Unix timestamps will overflow after year 2038. + Returns the timestamp as seconds since Unix epoch (float with microsecond precision). + + Args: + timestamp_str: ISO 8601 timestamp string (e.g., "2024-01-15T10:00:03.345678Z") + + Returns: + Float representing seconds since Unix epoch with microsecond precision """ + if "." in timestamp_str: + # Split timestamp into seconds and fractional parts + parts = timestamp_str.split(".") + seconds_part = parts[0] + fractional_part = parts[1].rstrip("Z") + + # Parse microseconds (pad to at least 6 digits, then truncate to exactly 6) + fractional_part = (fractional_part + "000000")[:6] + + microseconds_fraction = int(fractional_part) + timestamp_str = seconds_part + "Z" + else: + microseconds_fraction = 0 + time_format = "2006-01-02T15:04:05Z" time_obj = time.parse_time(timestamp_str, format=time_format) - return int(time_obj.unix) + + # Convert to float seconds: seconds + (microseconds / 1,000,000) + unix_float_seconds = float(time_obj.unix) + float(microseconds_fraction) / 1000000.0 + + return unix_float_seconds def get_time_in_area_seconds(track_id, current_seconds, track_state): """Get the time in area for a track ID and update its last seen time @@ -19,10 +42,10 @@ def get_time_in_area_seconds(track_id, current_seconds, track_state): track_state: State dictionary for tracking objects Returns: - Time in area in seconds for this track ID + Time in area as a float (seconds with microsecond precision) """ if track_id not in track_state: - # First time seeing this track ID - initialize with current timestamp in seconds + # First time seeing this track ID - initialize with current timestamp track_state[track_id] = { "first_seen_seconds": current_seconds, "last_seen_seconds": current_seconds @@ -53,8 +76,9 @@ def cleanup_stale_tracks(current_seconds, track_state, max_stale_seconds): debug_metrics = [] for track_id, track_data in track_state.items(): - last_seen = track_data["last_seen_seconds"] - time_since_seen = current_seconds - last_seen + last_seen_seconds = track_data["last_seen_seconds"] + time_since_seen = current_seconds - last_seen_seconds + if time_since_seen > max_stale_seconds: tracks_to_remove.append(track_id) @@ -81,8 +105,8 @@ def apply(metric): if track_id == "" or timestamp == "": return metric - # Parse timestamp to seconds - current_seconds = parse_timestamp_to_seconds(timestamp) + # Parse timestamp to float seconds since Unix epoch + current_seconds = parse_timestamp_to_float_seconds(timestamp) # Initialize track state subdict if it doesn't exist if "track_state" not in state: From 19727ba2729d30696573e4296130483b7cce8522 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Sun, 17 Aug 2025 16:33:41 +0200 Subject: [PATCH 06/42] Remove partial line breaking json test data --- .../test_files/real_device_data.jsonl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/project-time-in-area-analytics/test_files/real_device_data.jsonl b/project-time-in-area-analytics/test_files/real_device_data.jsonl index f0d767b..9366c9a 100644 --- a/project-time-in-area-analytics/test_files/real_device_data.jsonl +++ b/project-time-in-area-analytics/test_files/real_device_data.jsonl @@ -281,5 +281,4 @@ {"frame":{"observations":[{"bounding_box":{"bottom":0.458,"left":0.3202,"right":0.3926,"top":0.2958},"class":{"score":0.89,"type":"Face"},"timestamp":"2025-08-10T20:52:18.325623Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:18.325623Z"}} {"frame":{"observations":[{"bounding_box":{"bottom":0.4575,"left":0.3208,"right":0.3931,"top":0.2952},"class":{"score":0.89,"type":"Face"},"timestamp":"2025-08-10T20:52:18.425520Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:18.425520Z"}} {"frame":{"observations":[{"bounding_box":{"bottom":0.4572,"left":0.3206,"right":0.3925,"top":0.2951},"class":{"score":0.89,"type":"Face"},"timestamp":"2025-08-10T20:52:18.525418Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:18.525418Z"}} -{"frame":{"observations":[{"bounding_box":{"bottom":0.4569,"left":0.3204,"right":0.3921,"top":0.295},"class":{"score":0.89,"type":"Face"},"timestamp":"2025-08-10T20:52:18.625316Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:18.625316Z"}} -{"frame":{"observations":[{"bounding_box":{"bottom":0.457,"left":0.321,"right":0.3928,"top":0.2942},"class":{"score":0.89,"type":"Face"},"timestamp":"2025-08-10T20:52:18.725213Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operation \ No newline at end of file +{"frame":{"observations":[{"bounding_box":{"bottom":0.4569,"left":0.3204,"right":0.3921,"top":0.295},"class":{"score":0.89,"type":"Face"},"timestamp":"2025-08-10T20:52:18.625316Z","track_id":"030deaa3-a5d4-4dcf-9561-b12b6433effc"}],"operations":[],"timestamp":"2025-08-10T20:52:18.625316Z"}} \ No newline at end of file From f4ae4665e2cc717451f817d8f4a169de85cafa22 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Sun, 17 Aug 2025 16:34:01 +0200 Subject: [PATCH 07/42] Optimize fake data loader Reading everything in one go with jq instead of iterating and piping multiple times did more than 1000 X improve of speed. Before this, the loader timed out. --- .../test_files/sample_data_feeder.sh | 45 +++++++------------ 1 file changed, 17 insertions(+), 28 deletions(-) diff --git a/project-time-in-area-analytics/test_files/sample_data_feeder.sh b/project-time-in-area-analytics/test_files/sample_data_feeder.sh index dc8418c..ed016be 100755 --- a/project-time-in-area-analytics/test_files/sample_data_feeder.sh +++ b/project-time-in-area-analytics/test_files/sample_data_feeder.sh @@ -26,31 +26,20 @@ if ! command -v jq >/dev/null 2>&1; then exit 1 fi -# Process each frame and output one observation per message -while IFS= read -r line; do - # Extract frame timestamp - frame_timestamp=$(echo "$line" | jq -r '.frame.timestamp') - - # Get number of observations (handle null/empty cases) - observation_count=$(echo "$line" | jq '.frame.observations | length // 0') - - # Only output messages if there are observations - if [ "$observation_count" -gt 0 ] 2>/dev/null; then - # Output each observation as a separate message - i=0 - while [ $i -lt "$observation_count" ]; do - observation=$(echo "$line" | jq ".frame.observations[$i]") - track_id=$(echo "$observation" | jq -r '.track_id') - object_type=$(echo "$observation" | jq -r '.class.type') - timestamp=$(echo "$observation" | jq -r '.timestamp') - - # Extract bounding box data - bounding_box=$(echo "$observation" | jq -c '.bounding_box') - - # Output individual detection with frame context - echo "{\"frame\": \"$frame_timestamp\", \"timestamp\": \"$timestamp\", \"track_id\": \"$track_id\", \"object_type\": \"$object_type\", \"bounding_box\": $bounding_box}" - - i=$((i + 1)) - done - fi -done < "$HELPER_FILES_DIR/$SAMPLE_FILE" +# Process all frames at once with a single jq call for optimal performance +# This approach scales much better with large datasets than per-line processing +jq -c ' +.frame as $frame | +if ($frame.observations | length) > 0 then + $frame.observations[] | + { + "frame": $frame.timestamp, + "timestamp": .timestamp, + "track_id": .track_id, + "object_type": (.class.type // "null"), + "bounding_box": .bounding_box + } +else + empty +end +' "$HELPER_FILES_DIR/$SAMPLE_FILE" From d2fd98c079552dfe5c62f64a5ff87cd395f33434 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Sun, 17 Aug 2025 16:35:22 +0200 Subject: [PATCH 08/42] README updates --- project-time-in-area-analytics/README.md | 14 +++++++------- .../config_process_track_duration.conf | 8 ++------ 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/project-time-in-area-analytics/README.md b/project-time-in-area-analytics/README.md index 69a486b..2788282 100644 --- a/project-time-in-area-analytics/README.md +++ b/project-time-in-area-analytics/README.md @@ -1,6 +1,6 @@ # Time-in-Area Analytics -This project demonstrates how to implement time-in-area analytics for Axis fisheye cameras using the [FixedIT Data Agent](https://fixedit.ai/products-data-agent/). While AXIS Object Analytics natively supports time-in-area detection for traditional cameras, fisheye cameras lack this capability. This solution bridges that gap by consuming real-time object detection metadata from fisheye cameras and implementing custom time-in-area logic using Telegraf's Starlark processor. The system uses object tracking IDs from [AXIS Scene Metadata](https://developer.axis.com/analytics/axis-scene-metadata/reference/concepts/) to track objects within a defined rectangular area, measures time in area, and triggers both warning (TODO) and alert notifications via MQTT when objects remain in the monitored zone beyond configured thresholds. +This project demonstrates how to implement time-in-area analytics for Axis fisheye cameras using the [FixedIT Data Agent](https://fixedit.ai/products-data-agent/). While AXIS Object Analytics natively supports time-in-area detection for traditional cameras, fisheye cameras lack this capability. This solution bridges that gap by consuming real-time object detection metadata from fisheye cameras and implementing custom time-in-area logic using Telegraf's Starlark processor. The system uses object tracking IDs from [AXIS Scene Metadata](https://developer.axis.com/analytics/axis-scene-metadata/reference/concepts/) to track objects within a defined rectangular area, measures time in area, and triggers both warning (TODO) and alert notifications via MQTT (TODO) when objects remain in the monitored zone beyond configured thresholds. ## How It Works @@ -83,13 +83,13 @@ flowchart TD ### AXIS OS Compatibility -- **Minimum AXIS OS version**: -- **Required tools**: +- **Minimum AXIS OS version**: TODO +- **Required tools**: TODO ### FixedIT Data Agent Compatibility - **Minimum Data Agent version**: 1.0 -- **Required features**: +- **Required features**: TODO ## Quick Setup @@ -126,7 +126,7 @@ Helper script that simulates camera metadata stream by reading `simple_tracks.js ## Future Enhancements -This example implements a minimal viable solution and can be easily extended: +This example should implement a minimal viable solution and can be easily extended: - **Warning Threshold**: Add a warning level before the main alert threshold - **Deactivation Messages**: Send alerts when objects leave the area after being alerted @@ -149,12 +149,12 @@ You can test the processing logic locally using Telegraf before deploying to you **Works on Host:** - Starlark processor logic testing with sample data -- MQTT output configuration validation +- MQTT output configuration validation (TODO) - Alert threshold configuration testing **Only works in the Axis Device:** -- Real object detection metadata consumption (camera-specific message broker) +- Real object detection metadata consumption (camera-specific message broker) - in host testing, you can use the `sample_data_feeder.sh` script to simulate the camera metadata stream using pre-recorded data in the `test_files/simple_tracks.jsonl` or `test_files/real_device_data.jsonl` files. ### Test Commands diff --git a/project-time-in-area-analytics/config_process_track_duration.conf b/project-time-in-area-analytics/config_process_track_duration.conf index 30610b2..d745fcb 100644 --- a/project-time-in-area-analytics/config_process_track_duration.conf +++ b/project-time-in-area-analytics/config_process_track_duration.conf @@ -7,15 +7,11 @@ # # Input: detection_frame metrics with track_id, timestamp, coordinates # Output: Same metrics with time_in_area_seconds field + optional debug metrics -# -# State Management: -# - Tracks first_seen_seconds and last_seen_seconds for each track_id -# - Automatically cleans up tracks not seen for 60+ seconds -# - Outputs debug messages when tracks are removed [[processors.starlark]] # Only process detection frames for duration calculation namepass = ["detection_frame"] - # Track duration calculator - adds dwell_time_seconds field and debug messages + # Run the apply function in the starlark script to process all + # detections and add the extra time_in_area_seconds field to them. script = "${HELPER_FILES_DIR}/track_duration_calculator.star" From 15f896e4cd1737b4ef714c60dadc483177d51937 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Sun, 17 Aug 2025 17:33:36 +0200 Subject: [PATCH 09/42] Fix install in cicd --- .../project-time-in-area-test-analytics.yml | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/.github/workflows/project-time-in-area-test-analytics.yml b/.github/workflows/project-time-in-area-test-analytics.yml index e76e0a6..f22eaf7 100644 --- a/.github/workflows/project-time-in-area-test-analytics.yml +++ b/.github/workflows/project-time-in-area-test-analytics.yml @@ -130,7 +130,7 @@ jobs: test-telegraf-pipeline: name: Test Telegraf Pipeline - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: Checkout code @@ -138,13 +138,20 @@ jobs: - name: Install Telegraf run: | - # Add InfluxDB repository - wget -qO- https://repos.influxdata.com/influxdata-archive_compat.key | sudo apt-key add - - echo "deb https://repos.influxdata.com/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/influxdb.list + # Install jq (needed for parsing JSON output) + sudo apt-get update + sudo apt-get install -y jq wget gnupg + + # Add InfluxDB repository using jammy (22.04) for compatibility with ubuntu-24 + wget -qO- https://repos.influxdata.com/influxdata-archive_compat.key | sudo gpg --dearmor -o /usr/share/keyrings/influxdata-archive-keyring.gpg + echo "deb [signed-by=/usr/share/keyrings/influxdata-archive-keyring.gpg] https://repos.influxdata.com/ubuntu jammy stable" | sudo tee /etc/apt/sources.list.d/influxdb.list # Install Telegraf sudo apt-get update - sudo apt-get install -y telegraf jq + sudo apt-get install -y telegraf + + # Verify installation + telegraf --version - name: Test Telegraf pipeline - No alarms (threshold 15s) run: | From e54c045ab140a18cad01c5ca098db32dd199464a Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Sun, 17 Aug 2025 17:37:23 +0200 Subject: [PATCH 10/42] Install missing types and fix failing linters --- .../project-time-in-area-test-analytics.yml | 2 +- .../test_scripts/record_real_data.py | 106 +++++++++--------- .../test_scripts/requirements.txt | 1 + .../test_scripts/track_heatmap_viewer.py | 6 + 4 files changed, 59 insertions(+), 56 deletions(-) diff --git a/.github/workflows/project-time-in-area-test-analytics.yml b/.github/workflows/project-time-in-area-test-analytics.yml index f22eaf7..03ef2c8 100644 --- a/.github/workflows/project-time-in-area-test-analytics.yml +++ b/.github/workflows/project-time-in-area-test-analytics.yml @@ -370,7 +370,7 @@ jobs: if (telegrafResult !== 'success') { comment += ` **Telegraf Pipeline Issues:** - - The time-in-area calculation or threshold filtering may not be working correctly + - The time-in-area calculation or threshold filtering may not be working correctly - Check the Starlark processor in \`track_duration_calculator.star\` and threshold filter configuration `; } diff --git a/project-time-in-area-analytics/test_scripts/record_real_data.py b/project-time-in-area-analytics/test_scripts/record_real_data.py index 59d6ff3..eba812e 100644 --- a/project-time-in-area-analytics/test_scripts/record_real_data.py +++ b/project-time-in-area-analytics/test_scripts/record_real_data.py @@ -11,13 +11,13 @@ import threading import time from pathlib import Path -from typing import Optional, Protocol, Iterator, Dict, Any +from typing import Any, Dict, Iterator, Optional, Protocol import click import paramiko -class CommandRunner(Protocol): +class CommandRunner(Protocol): # pylint: disable=too-few-public-methods """Protocol for running commands and returning output.""" def run_command(self, command: str, timeout_seconds: int) -> Iterator[str]: @@ -28,15 +28,12 @@ def run_command(self, command: str, timeout_seconds: int) -> Iterator[str]: timeout_seconds: Maximum time to wait for command completion """ - ... class SSHCommandRunner: """SSH implementation of CommandRunner.""" - def __init__( - self, host: str, username: str, password: Optional[str] = None - ): + def __init__(self, host: str, username: str, password: Optional[str] = None): """Initialize SSH connection parameters. Args: @@ -60,14 +57,10 @@ def connect(self): hostname=self.host, username=self.username, password=self.password, - timeout=10 + timeout=10, ) else: - self.client.connect( - hostname=self.host, - username=self.username, - timeout=10 - ) + self.client.connect(hostname=self.host, username=self.username, timeout=10) def run_command(self, command: str, timeout_seconds: int) -> Iterator[str]: """Run command via SSH and yield output lines with timeout. @@ -85,7 +78,7 @@ def run_command(self, command: str, timeout_seconds: int) -> Iterator[str]: if not self.client: raise RuntimeError("Not connected to device") - stdin, stdout, stderr = self.client.exec_command(command) + _, stdout, _ = self.client.exec_command(command) # Use threading for timeout instead of signals lines = [] @@ -108,15 +101,13 @@ def read_output(): # Wait for timeout or completion start_time = time.time() - while (time.time() - start_time < timeout_seconds - and not finished.is_set()): + while time.time() - start_time < timeout_seconds and not finished.is_set(): time.sleep(0.1) finished.set() # Signal thread to stop reader_thread.join(timeout=1) # Give thread time to finish - for line in lines: - yield line + yield from lines def close(self): """Close the SSH connection.""" @@ -171,7 +162,7 @@ def extract_json_from_line(self, line: str) -> Optional[Dict[str, Any]]: {'nested': {'data': [1, 2, 3]}} """ # Find the first '{' character to locate potential JSON - json_start = line.find('{') + json_start = line.find("{") if json_start == -1: # No JSON found in this line return None @@ -185,8 +176,9 @@ def extract_json_from_line(self, line: str) -> Optional[Dict[str, Any]]: # The extracted part isn't valid JSON return None - def record_data(self, topic: str, source: str, output_file: Path, - timeout_seconds: int) -> int: + def record_data( + self, topic: str, source: str, output_file: Path, timeout_seconds: int + ) -> int: """ Record data from message broker. @@ -202,7 +194,7 @@ def record_data(self, topic: str, source: str, output_file: Path, command = f'message-broker-cli consume "{topic}" "{source}"' line_count = 0 - with output_file.open('w') as f: + with output_file.open("w") as f: for line in self.runner.run_command(command, timeout_seconds): json_obj = self.extract_json_from_line(line) if json_obj is not None: @@ -210,7 +202,7 @@ def record_data(self, topic: str, source: str, output_file: Path, # separators=(',', ':') removes spaces after commas and # colons # for smaller file size and consistent JSONL format - f.write(json.dumps(json_obj, separators=(',', ':')) + '\n') + f.write(json.dumps(json_obj, separators=(",", ":")) + "\n") f.flush() # Ensure data is written immediately line_count += 1 @@ -218,29 +210,38 @@ def record_data(self, topic: str, source: str, output_file: Path, @click.command() -@click.option('--host', '-h', default='192.168.1.2', - help='Device IP address or hostname') -@click.option('--username', '-u', default='acap-fixeditdataagent', - help='SSH username') -@click.option('--password', '-p', default=None, - help='SSH password (if not provided, will try key auth first, ' - 'then prompt)') @click.option( - '--topic', - default='com.axis.analytics_scene_description.v0.beta', - help='Message broker topic to consume' + "--host", "-h", default="192.168.1.2", help="Device IP address or hostname" +) +@click.option("--username", "-u", default="acap-fixeditdataagent", help="SSH username") +@click.option( + "--password", + "-p", + default=None, + help="SSH password (if not provided, will try key auth first, " "then prompt)", +) +@click.option( + "--topic", + default="com.axis.analytics_scene_description.v0.beta", + help="Message broker topic to consume", ) -@click.option('--source', default='1', - help='Message broker source') +@click.option("--source", default="1", help="Message broker source") @click.option( - '--output-file', '-o', - default='test_files/real_device_data.jsonl', - help='Output file path' + "--output-file", + "-o", + default="test_files/real_device_data.jsonl", + help="Output file path", ) -@click.option('--duration', '-d', default=30, - help='Recording duration in seconds') -def main(host: str, username: str, password: Optional[str], topic: str, - source: str, output_file: str, duration: int): +@click.option("--duration", "-d", default=30, help="Recording duration in seconds") +def main( # pylint: disable=too-many-arguments,too-many-positional-arguments,too-many-statements + host: str, + username: str, + password: Optional[str], + topic: str, + source: str, + output_file: str, + duration: int, +): r""" Record real analytics scene description data from Axis device. @@ -273,9 +274,7 @@ def main(host: str, username: str, password: Optional[str], topic: str, - AXIS OS 12+: SSH as root is disabled, use FixedIT Data Agent user in dev mode """ - click.echo( - "Recording real analytics scene description data from device..." - ) + click.echo("Recording real analytics scene description data from device...") click.echo(f"Device: {username}@{host}") click.echo(f"Topic: {topic}") click.echo(f"Source: {source}") @@ -303,12 +302,12 @@ def main(host: str, username: str, password: Optional[str], topic: str, ssh_runner = SSHCommandRunner(host, username, password) ssh_runner.connect() click.echo("✅ Connected using password authentication") - except KeyboardInterrupt: + except KeyboardInterrupt as exc: click.echo("\n❌ Cancelled by user") - raise click.Abort() - except KeyboardInterrupt: + raise click.Abort() from exc + except KeyboardInterrupt as exc: click.echo("\n❌ Cancelled by user") - raise click.Abort() + raise click.Abort() from exc else: ssh_runner = SSHCommandRunner(host, username, password) ssh_runner.connect() @@ -323,8 +322,7 @@ def main(host: str, username: str, password: Optional[str], topic: str, if line_count > 0: click.echo( - f"✅ Successfully recorded {line_count} lines of real device " - f"data" + f"✅ Successfully recorded {line_count} lines of real device " f"data" ) click.echo(f"📁 Saved to: {output_file}") click.echo("") @@ -346,10 +344,8 @@ def main(host: str, username: str, password: Optional[str], topic: str, click.echo("") click.echo("🧪 To test with this real data, use:") click.echo(f'export SAMPLE_FILE="{output_file}"') - click.echo( - "Then run your telegraf test commands as documented in README.md" - ) + click.echo("Then run your telegraf test commands as documented in README.md") -if __name__ == '__main__': - main() +if __name__ == "__main__": + main() # pylint: disable=no-value-for-parameter diff --git a/project-time-in-area-analytics/test_scripts/requirements.txt b/project-time-in-area-analytics/test_scripts/requirements.txt index 488114d..2e85201 100644 --- a/project-time-in-area-analytics/test_scripts/requirements.txt +++ b/project-time-in-area-analytics/test_scripts/requirements.txt @@ -2,3 +2,4 @@ click==8.2.1 matplotlib==3.9.4 numpy==2.2.1 paramiko==3.5.0 +types-paramiko==4.0.0.20250809 diff --git a/project-time-in-area-analytics/test_scripts/track_heatmap_viewer.py b/project-time-in-area-analytics/test_scripts/track_heatmap_viewer.py index 38e89e5..0f7cad1 100755 --- a/project-time-in-area-analytics/test_scripts/track_heatmap_viewer.py +++ b/project-time-in-area-analytics/test_scripts/track_heatmap_viewer.py @@ -70,6 +70,9 @@ def track_ids(self) -> List[str]: """ Get all track IDs present in this frame, sorted alphabetically. + Returns: + List[str]: Sorted list of unique track IDs in this frame. + Examples: >>> bbox1 = BoundingBox(0.1, 0.2, 0.3, 0.4) >>> bbox2 = BoundingBox(0.2, 0.3, 0.4, 0.5) @@ -377,6 +380,9 @@ def _create_alarm_matrix( # pylint: disable=too-many-locals Returns: 2D numpy array: 1 where track exceeds threshold, 0 otherwise + Raises: + ValueError: If timestamp parsing fails or data is invalid + Examples: >>> # Create test data - track_001 exceeds 2-second threshold >>> bbox = BoundingBox(0.1, 0.2, 0.3, 0.4) From d73e102c5d18109a3a0c4055c69f0b5be7f95071 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Sun, 17 Aug 2025 19:07:58 +0200 Subject: [PATCH 11/42] Add new longer test sample --- .../project-time-in-area-test-analytics.yml | 134 ++++++++++++++---- project-time-in-area-analytics/README.md | 1 + .../test_files/simple_tracks.jsonl | 9 +- 3 files changed, 116 insertions(+), 28 deletions(-) diff --git a/.github/workflows/project-time-in-area-test-analytics.yml b/.github/workflows/project-time-in-area-test-analytics.yml index 03ef2c8..071bed4 100644 --- a/.github/workflows/project-time-in-area-test-analytics.yml +++ b/.github/workflows/project-time-in-area-test-analytics.yml @@ -31,14 +31,14 @@ jobs: cd project-time-in-area-analytics pip install -r test_scripts/requirements.txt - - name: Test visualization script - No alarms (threshold 15s) + - name: Test visualization script - No alarms (threshold 200s) run: | cd project-time-in-area-analytics - echo "Testing heatmap viewer with threshold: 15s (expecting no alarms)" + echo "Testing heatmap viewer with threshold: 200s (expecting no alarms)" # Run heatmap viewer with high threshold - HEATMAP_OUTPUT=$(python test_scripts/track_heatmap_viewer.py test_files/simple_tracks.jsonl --alarm-threshold 15 --no-ui 2>&1) + HEATMAP_OUTPUT=$(python test_scripts/track_heatmap_viewer.py test_files/simple_tracks.jsonl --alarm-threshold 200 --no-ui 2>&1) echo "Heatmap output: $HEATMAP_OUTPUT" # Expected: 0 alarms @@ -54,9 +54,9 @@ jobs: echo "Actual alarms: $ACTUAL_ALARMS" if [ "$ACTUAL_ALARMS" -eq "$EXPECTED_ALARMS" ]; then - echo "✅ PASS: Heatmap viewer correctly found $ACTUAL_ALARMS alarms for threshold 15s" + echo "✅ PASS: Heatmap viewer correctly found $ACTUAL_ALARMS alarms for threshold 200s" else - echo "❌ FAIL: Expected $EXPECTED_ALARMS alarms but found $ACTUAL_ALARMS for threshold 15s" + echo "❌ FAIL: Expected $EXPECTED_ALARMS alarms but found $ACTUAL_ALARMS for threshold 200s" exit 1 fi @@ -64,15 +64,15 @@ jobs: run: | cd project-time-in-area-analytics - echo "Testing heatmap viewer with threshold: 2s (expecting 3 alarms)" + echo "Testing heatmap viewer with threshold: 2s (expecting 4 alarms)" # Run heatmap viewer with moderate threshold HEATMAP_OUTPUT=$(python test_scripts/track_heatmap_viewer.py test_files/simple_tracks.jsonl --alarm-threshold 2 --no-ui 2>&1) echo "Heatmap output: $HEATMAP_OUTPUT" - # Expected: 3 alarms (track_001, track_002, track_003) - EXPECTED_ALARMS=3 - EXPECTED_TRACKS="track_001 track_002 track_003" + # Expected: 4 alarms (track_001, track_002, track_003, track_005) + EXPECTED_ALARMS=4 + EXPECTED_TRACKS="track_001 track_002 track_003 track_005" if echo "$HEATMAP_OUTPUT" | grep -q "No tracks exceeded alarm threshold"; then ACTUAL_ALARMS=0 @@ -98,15 +98,15 @@ jobs: run: | cd project-time-in-area-analytics - echo "Testing heatmap viewer with threshold: 0s (expecting 4 alarms)" + echo "Testing heatmap viewer with threshold: 0s (expecting 5 alarms)" # Run heatmap viewer with zero threshold HEATMAP_OUTPUT=$(python test_scripts/track_heatmap_viewer.py test_files/simple_tracks.jsonl --alarm-threshold 0 --no-ui 2>&1) echo "Heatmap output: $HEATMAP_OUTPUT" - # Expected: 4 alarms (all tracks: track_001, track_002, track_003, track_004) - EXPECTED_ALARMS=4 - EXPECTED_TRACKS="track_001 track_002 track_003 track_004" + # Expected: 5 alarms (all tracks: track_001, track_002, track_003, track_004, track_005) + EXPECTED_ALARMS=5 + EXPECTED_TRACKS="track_001 track_002 track_003 track_004 track_005" if echo "$HEATMAP_OUTPUT" | grep -q "No tracks exceeded alarm threshold"; then ACTUAL_ALARMS=0 @@ -128,6 +128,40 @@ jobs: exit 1 fi + - name: Test visualization script - Long duration track (threshold 120s) + run: | + cd project-time-in-area-analytics + + echo "Testing heatmap viewer with threshold: 120s (expecting 1 alarm - long track)" + + # Run heatmap viewer with 120s threshold + HEATMAP_OUTPUT=$(python test_scripts/track_heatmap_viewer.py test_files/simple_tracks.jsonl --alarm-threshold 120 --no-ui 2>&1) + echo "Heatmap output: $HEATMAP_OUTPUT" + + # Expected: 1 alarm (track_005 with 150s duration) + EXPECTED_ALARMS=1 + EXPECTED_TRACKS="track_005" + + if echo "$HEATMAP_OUTPUT" | grep -q "No tracks exceeded alarm threshold"; then + ACTUAL_ALARMS=0 + ACTUAL_TRACKS="" + else + ACTUAL_ALARMS=$(echo "$HEATMAP_OUTPUT" | grep -A 10 "Tracks with alarms" | grep -E "^\s+track_" | wc -l) + ACTUAL_TRACKS=$(echo "$HEATMAP_OUTPUT" | grep -A 10 "Tracks with alarms" | grep -E "^\s+track_" | sed 's/^\s*//' | sort | tr '\n' ' ' | sed 's/ $//') + fi + + echo "Expected alarms: $EXPECTED_ALARMS" + echo "Expected tracks: $EXPECTED_TRACKS" + echo "Actual alarms: $ACTUAL_ALARMS" + echo "Actual tracks: $ACTUAL_TRACKS" + + if [ "$ACTUAL_ALARMS" -eq "$EXPECTED_ALARMS" ] && [ "$ACTUAL_TRACKS" = "$EXPECTED_TRACKS" ]; then + echo "✅ PASS: Heatmap viewer correctly found $ACTUAL_ALARMS alarms with correct track IDs for threshold 120s" + else + echo "❌ FAIL: Expected $EXPECTED_ALARMS alarms ($EXPECTED_TRACKS) but found $ACTUAL_ALARMS alarms ($ACTUAL_TRACKS) for threshold 120s" + exit 1 + fi + test-telegraf-pipeline: name: Test Telegraf Pipeline runs-on: ubuntu-24.04 @@ -153,16 +187,16 @@ jobs: # Verify installation telegraf --version - - name: Test Telegraf pipeline - No alarms (threshold 15s) + - name: Test Telegraf pipeline - No alarms (threshold 200s) run: | cd project-time-in-area-analytics - echo "Testing Telegraf pipeline with threshold: 15s (expecting no alarms)" + echo "Testing Telegraf pipeline with threshold: 200s (expecting no alarms)" # Set up environment variables export HELPER_FILES_DIR="$(pwd)" export SAMPLE_FILE="test_files/simple_tracks.jsonl" - export ALERT_THRESHOLD_SECONDS="15" + export ALERT_THRESHOLD_SECONDS="200" # Run Telegraf pipeline TELEGRAF_OUTPUT=$(telegraf --config test_files/config_input_sample_data.conf \ @@ -187,9 +221,9 @@ jobs: echo "Actual alarm detections: $ACTUAL_ALARM_DETECTIONS" if [ "$ACTUAL_UNIQUE_TRACKS" -eq "$EXPECTED_UNIQUE_TRACKS" ] && [ "$ACTUAL_ALARM_DETECTIONS" -eq "$EXPECTED_ALARM_DETECTIONS" ]; then - echo "✅ PASS: Telegraf pipeline correctly found $ACTUAL_UNIQUE_TRACKS unique tracks and $ACTUAL_ALARM_DETECTIONS alarm detections for threshold 15s" + echo "✅ PASS: Telegraf pipeline correctly found $ACTUAL_UNIQUE_TRACKS unique tracks and $ACTUAL_ALARM_DETECTIONS alarm detections for threshold 200s" else - echo "❌ FAIL: Expected $EXPECTED_UNIQUE_TRACKS unique tracks and $EXPECTED_ALARM_DETECTIONS alarm detections, but found $ACTUAL_UNIQUE_TRACKS unique tracks and $ACTUAL_ALARM_DETECTIONS alarm detections for threshold 15s" + echo "❌ FAIL: Expected $EXPECTED_UNIQUE_TRACKS unique tracks and $EXPECTED_ALARM_DETECTIONS alarm detections, but found $ACTUAL_UNIQUE_TRACKS unique tracks and $ACTUAL_ALARM_DETECTIONS alarm detections for threshold 200s" exit 1 fi @@ -213,12 +247,12 @@ jobs: echo "Telegraf output: $TELEGRAF_OUTPUT" - # Expected: 3 unique tracks, 5 alarm detections + # Expected: 4 unique tracks, 10 alarm detections # Note: Once a track exceeds the threshold, ALL subsequent detections for that track # trigger alarms (i.e., get output by the threshold filter) - EXPECTED_UNIQUE_TRACKS=3 - EXPECTED_ALARM_DETECTIONS=5 - EXPECTED_TRACKS="track_001 track_002 track_003" + EXPECTED_UNIQUE_TRACKS=4 + EXPECTED_ALARM_DETECTIONS=10 + EXPECTED_TRACKS="track_001 track_002 track_003 track_005" # Extract unique track IDs and count alarm detections from detection_frame outputs ACTUAL_TRACKS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "detection_frame") | .fields.track_id' 2>/dev/null | sort -u | tr '\n' ' ' | sed 's/ $//') @@ -243,7 +277,7 @@ jobs: run: | cd project-time-in-area-analytics - echo "Testing Telegraf pipeline with threshold: 0s (expecting 4 alarms)" + echo "Testing Telegraf pipeline with threshold: 0s (expecting 5 alarms)" # Set up environment variables export HELPER_FILES_DIR="$(pwd)" @@ -259,12 +293,12 @@ jobs: echo "Telegraf output: $TELEGRAF_OUTPUT" - # Expected: 4 unique tracks, 12 alarm detections (all tracks: track_001, track_002, track_003, track_004) + # Expected: 5 unique tracks, 18 alarm detections (all tracks: track_001, track_002, track_003, track_004, track_005) # Note: Once a track exceeds the threshold, ALL subsequent detections for that track # trigger alarms (i.e., get output by the threshold filter) - EXPECTED_UNIQUE_TRACKS=4 - EXPECTED_ALARM_DETECTIONS=12 - EXPECTED_TRACKS="track_001 track_002 track_003 track_004" + EXPECTED_UNIQUE_TRACKS=5 + EXPECTED_ALARM_DETECTIONS=18 + EXPECTED_TRACKS="track_001 track_002 track_003 track_004 track_005" # Extract unique track IDs and count alarm detections from detection_frame outputs ACTUAL_TRACKS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "detection_frame") | .fields.track_id' 2>/dev/null | sort -u | tr '\n' ' ' | sed 's/ $//') @@ -285,6 +319,52 @@ jobs: exit 1 fi + - name: Test Telegraf pipeline - Long duration track (threshold 120s) + run: | + cd project-time-in-area-analytics + + echo "Testing Telegraf pipeline with threshold: 120s (expecting 1 alarm - long track)" + + # Set up environment variables + export HELPER_FILES_DIR="$(pwd)" + export SAMPLE_FILE="test_files/simple_tracks.jsonl" + export ALERT_THRESHOLD_SECONDS="120" + + # Run Telegraf pipeline + TELEGRAF_OUTPUT=$(telegraf --config test_files/config_input_sample_data.conf \ + --config config_process_track_duration.conf \ + --config config_process_threshold_filter.conf \ + --config test_files/config_output_stdout.conf \ + --once 2>/dev/null) + + echo "Telegraf output: $TELEGRAF_OUTPUT" + + # Expected: 1 unique track, 2 alarm detections (track_005 with 150s duration) + # Note: Once a track exceeds the threshold, ALL subsequent detections for that track + # trigger alarms (i.e., get output by the threshold filter) + EXPECTED_UNIQUE_TRACKS=1 + EXPECTED_ALARM_DETECTIONS=2 + EXPECTED_TRACKS="track_005" + + # Extract unique track IDs and count alarm detections from detection_frame outputs + ACTUAL_TRACKS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "detection_frame") | .fields.track_id' 2>/dev/null | sort -u | tr '\n' ' ' | sed 's/ $//') + ACTUAL_UNIQUE_TRACKS=$(echo "$ACTUAL_TRACKS" | wc -w) + ACTUAL_ALARM_DETECTIONS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "detection_frame") | .fields.track_id' 2>/dev/null | wc -l) + + echo "Expected unique tracks: $EXPECTED_UNIQUE_TRACKS" + echo "Expected alarm detections: $EXPECTED_ALARM_DETECTIONS" + echo "Expected tracks: $EXPECTED_TRACKS" + echo "Actual unique tracks: $ACTUAL_UNIQUE_TRACKS" + echo "Actual alarm detections: $ACTUAL_ALARM_DETECTIONS" + echo "Actual tracks: $ACTUAL_TRACKS" + + if [ "$ACTUAL_UNIQUE_TRACKS" -eq "$EXPECTED_UNIQUE_TRACKS" ] && [ "$ACTUAL_ALARM_DETECTIONS" -eq "$EXPECTED_ALARM_DETECTIONS" ] && [ "$ACTUAL_TRACKS" = "$EXPECTED_TRACKS" ]; then + echo "✅ PASS: Telegraf pipeline correctly found $ACTUAL_UNIQUE_TRACKS unique tracks and $ACTUAL_ALARM_DETECTIONS alarm detections with correct track IDs for threshold 120s" + else + echo "❌ FAIL: Expected $EXPECTED_UNIQUE_TRACKS unique tracks and $EXPECTED_ALARM_DETECTIONS alarm detections ($EXPECTED_TRACKS) but found $ACTUAL_UNIQUE_TRACKS unique tracks and $ACTUAL_ALARM_DETECTIONS alarm detections ($ACTUAL_TRACKS) for threshold 120s" + exit 1 + fi + summary: name: Test Summary runs-on: ubuntu-latest diff --git a/project-time-in-area-analytics/README.md b/project-time-in-area-analytics/README.md index 2788282..2f8879a 100644 --- a/project-time-in-area-analytics/README.md +++ b/project-time-in-area-analytics/README.md @@ -350,6 +350,7 @@ The tests use `test_files/simple_tracks.jsonl` which contains simplified track d - `track_002`: Continuous presence for 2.22s - `track_003`: Continuous presence for 2.22s - `track_004`: Single appearance (0s) +- `track_005`: Long duration track for 2.5 minutes (150s) ![Example data visualized](./.images/track-heatmap-simple.png) diff --git a/project-time-in-area-analytics/test_files/simple_tracks.jsonl b/project-time-in-area-analytics/test_files/simple_tracks.jsonl index e7f22fd..52e3715 100644 --- a/project-time-in-area-analytics/test_files/simple_tracks.jsonl +++ b/project-time-in-area-analytics/test_files/simple_tracks.jsonl @@ -8,4 +8,11 @@ {"frame": {"observations": [{"bounding_box": {"bottom": 0.77, "left": 0.27, "right": 0.37, "top": 0.52}, "class": {"type": "Vehicle"}, "timestamp": "2024-01-15T10:00:11.890123Z", "track_id": "track_003"}], "timestamp": "2024-01-15T10:00:11.890123Z"}} {"frame": {"observations": [{"bounding_box": {"bottom": 0.79, "left": 0.29, "right": 0.39, "top": 0.54}, "class": {"type": "Vehicle"}, "timestamp": "2024-01-15T10:00:12.456789Z", "track_id": "track_003"}, {"bounding_box": {"bottom": 0.68, "left": 0.28, "right": 0.38, "top": 0.48}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:12.456789Z", "track_id": "track_001"}], "timestamp": "2024-01-15T10:00:12.456789Z"}} {"frame": {"observations": [{"bounding_box": {"bottom": 0.80, "left": 0.35, "right": 0.45, "top": 0.60}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:13.012345Z", "track_id": "track_004"}], "timestamp": "2024-01-15T10:00:13.012345Z"}} -{"frame": {"observations": [], "operations": [], "timestamp": "2024-01-15T10:00:25.000000Z"}} \ No newline at end of file +{"frame": {"observations": [], "operations": [], "timestamp": "2024-01-15T10:00:25.000000Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.85, "left": 0.10, "right": 0.25, "top": 0.65}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:30.000000Z", "track_id": "track_005"}], "timestamp": "2024-01-15T10:00:30.000000Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.86, "left": 0.11, "right": 0.26, "top": 0.66}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:01:00.000000Z", "track_id": "track_005"}], "timestamp": "2024-01-15T10:01:00.000000Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.87, "left": 0.12, "right": 0.27, "top": 0.67}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:01:30.000000Z", "track_id": "track_005"}], "timestamp": "2024-01-15T10:01:30.000000Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.88, "left": 0.13, "right": 0.28, "top": 0.68}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:02:00.000000Z", "track_id": "track_005"}], "timestamp": "2024-01-15T10:02:00.000000Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.89, "left": 0.14, "right": 0.29, "top": 0.69}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:02:30.000000Z", "track_id": "track_005"}], "timestamp": "2024-01-15T10:02:30.000000Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.90, "left": 0.15, "right": 0.30, "top": 0.70}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:03:00.000000Z", "track_id": "track_005"}], "timestamp": "2024-01-15T10:03:00.000000Z"}} +{"frame": {"observations": [], "operations": [], "timestamp": "2024-01-15T10:03:30.000000Z"}} \ No newline at end of file From 89f5ff6529cddedfc190bc45b0a05d39b3c56fe9 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Sun, 17 Aug 2025 19:08:15 +0200 Subject: [PATCH 12/42] Fix float compare bug --- .../config_process_threshold_filter.conf | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/project-time-in-area-analytics/config_process_threshold_filter.conf b/project-time-in-area-analytics/config_process_threshold_filter.conf index 6175540..33b8d4e 100644 --- a/project-time-in-area-analytics/config_process_threshold_filter.conf +++ b/project-time-in-area-analytics/config_process_threshold_filter.conf @@ -18,8 +18,11 @@ def apply(metric): # Get time in area from the metric time_in_area = metric.fields.get("time_in_area_seconds", 0) + # Parse threshold as float to ensure proper comparison with float time values + threshold = float(${ALERT_THRESHOLD_SECONDS}) + # Only return metrics that exceed or equal the threshold - if time_in_area >= ${ALERT_THRESHOLD_SECONDS}: + if time_in_area >= threshold: return metric # Track doesn't exceed threshold - don't output From 9ce29e9d8cbc99ccb338ce1cc38da4d7f676e7b0 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Sun, 17 Aug 2025 19:09:12 +0200 Subject: [PATCH 13/42] Remove undefined behavior - Returning multiple metrics is not supported - Processing all lines at once caused lost lines.. --- .../test_files/sample_data_feeder.sh | 38 +++++++++-------- .../track_duration_calculator.star | 41 +++++++------------ 2 files changed, 35 insertions(+), 44 deletions(-) diff --git a/project-time-in-area-analytics/test_files/sample_data_feeder.sh b/project-time-in-area-analytics/test_files/sample_data_feeder.sh index ed016be..7e2895e 100755 --- a/project-time-in-area-analytics/test_files/sample_data_feeder.sh +++ b/project-time-in-area-analytics/test_files/sample_data_feeder.sh @@ -26,20 +26,24 @@ if ! command -v jq >/dev/null 2>&1; then exit 1 fi -# Process all frames at once with a single jq call for optimal performance -# This approach scales much better with large datasets than per-line processing -jq -c ' -.frame as $frame | -if ($frame.observations | length) > 0 then - $frame.observations[] | - { - "frame": $frame.timestamp, - "timestamp": .timestamp, - "track_id": .track_id, - "object_type": (.class.type // "null"), - "bounding_box": .bounding_box - } -else - empty -end -' "$HELPER_FILES_DIR/$SAMPLE_FILE" +# Process data line by line and output it as pure json. +while IFS= read -r line; do + # Skip empty lines + if [ -n "$line" ]; then + # Process this frame with jq + echo "$line" | jq -c ' + .frame as $frame | + if ($frame.observations | length) > 0 then + $frame.observations[] | + { + "frame": $frame.timestamp, + "timestamp": .timestamp, + "track_id": .track_id, + "object_type": (.class.type // "null"), + "bounding_box": .bounding_box + } + else + empty + end' + fi +done < "$HELPER_FILES_DIR/$SAMPLE_FILE" diff --git a/project-time-in-area-analytics/track_duration_calculator.star b/project-time-in-area-analytics/track_duration_calculator.star index 0b9973b..99db3db 100644 --- a/project-time-in-area-analytics/track_duration_calculator.star +++ b/project-time-in-area-analytics/track_duration_calculator.star @@ -67,13 +67,9 @@ def cleanup_stale_tracks(current_seconds, track_state, max_stale_seconds): current_seconds: Current timestamp in Unix seconds track_state: State dictionary for tracking objects max_stale_seconds: Maximum time since last seen before removing track - - Returns: - List of debug metrics for removed tracks """ # Find tracks to remove (can't modify dict while iterating) tracks_to_remove = [] - debug_metrics = [] for track_id, track_data in track_state.items(): last_seen_seconds = track_data["last_seen_seconds"] @@ -82,21 +78,21 @@ def cleanup_stale_tracks(current_seconds, track_state, max_stale_seconds): if time_since_seen > max_stale_seconds: tracks_to_remove.append(track_id) - # Create debug metric for this removal - debug_metric = Metric("track_cleanup_debug") - debug_metric.fields["track_id"] = track_id - debug_metric.fields["time_since_seen"] = time_since_seen - debug_metric.fields["max_stale_seconds"] = max_stale_seconds - debug_metric.fields["action"] = "removed_stale_track" - debug_metrics.append(debug_metric) - # Remove stale tracks for track_id in tracks_to_remove: track_state.pop(track_id) - return debug_metrics - def apply(metric): + """Calculate the time in area for each metric. + + This function will be called for each metric in the pipeline, + the function will keep a state of all the track IDs and their + first and last seen times. The function will calculate the time + in area for each track ID and add it to the metric. + + Returns: + The input metric but with the time in area added. + """ # Get track_id and timestamp from the metric track_id = metric.fields.get("track_id", "") timestamp = metric.fields.get("timestamp", "") @@ -112,8 +108,8 @@ def apply(metric): if "track_state" not in state: state["track_state"] = {} - # Clean up stale tracks (not seen for 60 seconds) and get debug metrics - debug_metrics = cleanup_stale_tracks(current_seconds, state["track_state"], 60) + # Clean up stale tracks (not seen for 60 seconds) + cleanup_stale_tracks(current_seconds, state["track_state"], 60) # Get the time in area for this track ID time_in_area = get_time_in_area_seconds(track_id, current_seconds, state["track_state"]) @@ -121,14 +117,5 @@ def apply(metric): # Add the time in area to the metric (always add it, filtering happens in next processor) metric.fields["time_in_area_seconds"] = time_in_area - # Prepare results list - results = [] - - # Add debug metrics first (if any) - results.extend(debug_metrics) - - # Always add the main metric with dwell time - results.append(metric) - - # Return list of metrics - return results + # Return the same metric with the time in area added + return metric From 10279043993236fa124915628b1e7cab589fba72 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Sun, 17 Aug 2025 19:34:03 +0200 Subject: [PATCH 14/42] Fix syntax error --- .github/workflows/project-time-in-area-test-analytics.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/project-time-in-area-test-analytics.yml b/.github/workflows/project-time-in-area-test-analytics.yml index 071bed4..24db470 100644 --- a/.github/workflows/project-time-in-area-test-analytics.yml +++ b/.github/workflows/project-time-in-area-test-analytics.yml @@ -411,7 +411,7 @@ jobs: All tests completed successfully: ✅ **Track Heatmap Viewer** - All alarm detection scenarios passed - ✅ **Telegraf Pipeline** - All time-in-area calculations verified + ✅ **Telegraf Pipeline** - All time-in-area calculations verified`; github.rest.issues.createComment({ issue_number: context.issue.number, From d62d42cf7b59685398a7c611ba9a0d5b2ccb3570 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Tue, 19 Aug 2025 17:17:09 +0200 Subject: [PATCH 15/42] README fixes --- project-time-in-area-analytics/README.md | 3 ++- project-time-in-area-analytics/test_scripts/README.md | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/project-time-in-area-analytics/README.md b/project-time-in-area-analytics/README.md index 2f8879a..4f80594 100644 --- a/project-time-in-area-analytics/README.md +++ b/project-time-in-area-analytics/README.md @@ -72,6 +72,7 @@ flowchart TD - [Data Behavior](#data-behavior) - [Data Transformation for Telegraf](#data-transformation-for-telegraf) - [Track Activity Visualization](#track-activity-visualization) +- [Recording Real Device Data](#recording-real-device-data) - [Automated Testing](#automated-testing) - [GitHub Workflow](#github-workflow) - [Test Data](#test-data) @@ -298,7 +299,7 @@ This transformation: - **Simplifies** object classification to just the type - **Skips** frames with no observations entirely -**Recording Real Device Data:** +## Recording Real Device Data You can record real analytics scene description data from your Axis camera for deterministic testing and analysis. This allows you to run the analytics pipeline on your host machine with reproducible results. diff --git a/project-time-in-area-analytics/test_scripts/README.md b/project-time-in-area-analytics/test_scripts/README.md index 12267f9..4068e4e 100644 --- a/project-time-in-area-analytics/test_scripts/README.md +++ b/project-time-in-area-analytics/test_scripts/README.md @@ -93,6 +93,10 @@ The script supports multiple authentication methods in this order: - **Data Analysis**: Use recorded data with visualization tools like `track_heatmap_viewer.py` - **Debugging**: Capture problematic scenarios for investigation +### Troubleshooting + +**Message Broker Connection Errors**: If you encounter errors like `❌ Command error: Failed to create data connection` when running the recording script, this typically indicates that the SSH user does not have sufficient privileges to subscribe to the message broker. This is a known limitation in **AXIS OS 12+** where SSH access as root is disabled and regular users may not have the necessary permissions to access the message broker service. See the [AXIS OS Compatibility](#axis-os-compatibility) section above for more details. + ## Track Heatmap Visualization The `track_heatmap_viewer.py` script creates heatmap visualizations showing track activity over time. This helps visualize when different track IDs are active across frames, making it easy to understand track lifecycles and identify patterns in object detection data. From f2209d3a08318763052a13cfe68145147df411c1 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Tue, 19 Aug 2025 17:17:36 +0200 Subject: [PATCH 16/42] Refactor and improve scripts - General refactor to simplify - Show unclassified tracks in red (+ update simple data) - Better error handling on data collection script - Add real camera data reader and align the conf file - Add system test for the time in area calc --- .../project-time-in-area-test-analytics.yml | 123 +++- .../.images/track-heatmap-120s.png | Bin 108491 -> 251073 bytes .../.images/track-heatmap-simple.png | Bin 41849 -> 51848 bytes project-time-in-area-analytics/README.md | 56 +- .../axis_scene_detection_consumer.sh | 58 ++ .../config_input_scene_detections.conf | 44 ++ .../test_files/config_input_sample_data.conf | 27 - .../test_files/simple_tracks.jsonl | 10 +- .../test_scripts/README.md | 2 +- .../test_scripts/record_real_data.py | 33 +- .../test_scripts/track_heatmap_viewer.py | 532 ++++++++++++++---- 11 files changed, 704 insertions(+), 181 deletions(-) create mode 100755 project-time-in-area-analytics/axis_scene_detection_consumer.sh create mode 100644 project-time-in-area-analytics/config_input_scene_detections.conf delete mode 100644 project-time-in-area-analytics/test_files/config_input_sample_data.conf diff --git a/.github/workflows/project-time-in-area-test-analytics.yml b/.github/workflows/project-time-in-area-test-analytics.yml index 24db470..3367a49 100644 --- a/.github/workflows/project-time-in-area-test-analytics.yml +++ b/.github/workflows/project-time-in-area-test-analytics.yml @@ -180,13 +180,120 @@ jobs: wget -qO- https://repos.influxdata.com/influxdata-archive_compat.key | sudo gpg --dearmor -o /usr/share/keyrings/influxdata-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/influxdata-archive-keyring.gpg] https://repos.influxdata.com/ubuntu jammy stable" | sudo tee /etc/apt/sources.list.d/influxdb.list - # Install Telegraf + # Install Telegraf and bc (for floating point math) sudo apt-get update - sudo apt-get install -y telegraf + sudo apt-get install -y telegraf bc # Verify installation telegraf --version + - name: Test Telegraf pipeline - Time-in-area calculation only + run: | + cd project-time-in-area-analytics + + echo "Testing Telegraf pipeline time-in-area calculation" + + # Set up environment variables + export HELPER_FILES_DIR="$(pwd)" + export CONSUMER_SCRIPT="test_files/sample_data_feeder.sh" + export SAMPLE_FILE="test_files/simple_tracks.jsonl" + + # Run Telegraf pipeline with ONLY time-in-area calculation (no threshold filtering) + TELEGRAF_OUTPUT=$(telegraf --config config_input_scene_detections.conf \ + --config config_process_track_duration.conf \ + --config test_files/config_output_stdout.conf \ + --once 2>/dev/null) + + echo "Telegraf output: $TELEGRAF_OUTPUT" + + # Check that time_in_area_seconds fields are present + echo "Checking time_in_area_seconds field values..." + + # Verify all detections have time_in_area_seconds field + MISSING_FIELD_COUNT=$(echo "$TELEGRAF_OUTPUT" | \ + jq -r 'select(.name == "detection_frame" and (.fields.time_in_area_seconds == null or .fields.time_in_area_seconds == "")) | .fields.track_id' 2>/dev/null | wc -l) + + if [ "$MISSING_FIELD_COUNT" -gt 0 ]; then + echo "❌ FAIL: Found $MISSING_FIELD_COUNT detections without time_in_area_seconds field" + exit 1 + fi + + # Check specific time_in_area_seconds values against hard-coded expectations + echo "Verifying time_in_area_seconds values against expected calculations..." + + # Hard-coded expected values for key detections from simple_tracks.jsonl + # Format: track_id:timestamp:expected_time_in_area_seconds + declare -A EXPECTED_VALUES=( + # track_001: starts at 10:00:01, increases over time + ["track_001:2024-01-15T10:00:01.123456Z"]="0.0" + ["track_001:2024-01-15T10:00:02.789012Z"]="1.7" + ["track_001:2024-01-15T10:00:03.345678Z"]="2.2" + ["track_001:2024-01-15T10:00:04.901234Z"]="3.8" + + # track_002: starts at 10:00:03, increases over time + ["track_002:2024-01-15T10:00:03.345678Z"]="0.0" + ["track_002:2024-01-15T10:00:04.901234Z"]="1.6" + ["track_002:2024-01-15T10:00:05.567890Z"]="2.2" + + # track_003: starts at 10:00:10, increases over time + ["track_003:2024-01-15T10:00:10.234567Z"]="0.0" + ["track_003:2024-01-15T10:00:11.890123Z"]="1.7" + ["track_003:2024-01-15T10:00:12.456789Z"]="2.2" + + # track_005: starts at 10:00:30, increases every 30s + ["track_005:2024-01-15T10:00:30.000000Z"]="0.0" + ["track_005:2024-01-15T10:01:00.000000Z"]="30.0" + ["track_005:2024-01-15T10:01:30.000000Z"]="60.0" + ["track_005:2024-01-15T10:02:00.000000Z"]="90.0" + ["track_005:2024-01-15T10:02:30.000000Z"]="120.0" + ["track_005:2024-01-15T10:03:00.000000Z"]="150.0" + ) + + # Count mismatches + MISMATCH_COUNT=0 + for key in "${!EXPECTED_VALUES[@]}"; do + IFS=':' read -r track_id timestamp <<< "$key" + expected_time="${EXPECTED_VALUES[$key]}" + + # Find corresponding actual value + actual_time=$(echo "$TELEGRAF_OUTPUT" | \ + jq -r "select(.name == \"detection_frame\" and .fields.track_id == \"$track_id\" and .fields.timestamp == \"$timestamp\") | .fields.time_in_area_seconds" 2>/dev/null) + + if [ -n "$actual_time" ] && [ "$actual_time" != "null" ]; then + # Simple string comparison for expected values (within tolerance) + # For 0.0, expect exactly 0 + if [ "$expected_time" = "0.0" ] || [ "$expected_time" = "0" ]; then + if [ "$actual_time" != "0" ] && [ "$(echo "$actual_time > 0.1" | bc -l)" -eq 1 ]; then + echo " Mismatch: $track_id at $timestamp" + echo " Expected: $expected_time, Actual: $actual_time" + MISMATCH_COUNT=$((MISMATCH_COUNT + 1)) + fi + # For other values, check if they're in reasonable range + else + # Convert to integers for comparison (multiply by 10 to handle 1 decimal) + # Use rounding to handle floating point precision issues + expected_int=$(echo "$expected_time * 10 + 0.5" | bc -l | cut -d. -f1) + actual_int=$(echo "$actual_time * 10 + 0.5" | bc -l | cut -d. -f1) + + if [ "$expected_int" != "$actual_int" ]; then + echo " Mismatch: $track_id at $timestamp" + echo " Expected: $expected_time (~$expected_int), Actual: $actual_time (~$actual_int)" + MISMATCH_COUNT=$((MISMATCH_COUNT + 1)) + fi + fi + else + echo " Missing: $track_id at $timestamp (expected: $expected_time)" + MISMATCH_COUNT=$((MISMATCH_COUNT + 1)) + fi + done + + if [ "$MISMATCH_COUNT" -gt 0 ]; then + echo "❌ FAIL: Found $MISMATCH_COUNT time_in_area_seconds value mismatches" + exit 1 + fi + + echo "✅ PASS: All time_in_area_seconds values match expected calculations" + - name: Test Telegraf pipeline - No alarms (threshold 200s) run: | cd project-time-in-area-analytics @@ -195,11 +302,12 @@ jobs: # Set up environment variables export HELPER_FILES_DIR="$(pwd)" + export CONSUMER_SCRIPT="test_files/sample_data_feeder.sh" export SAMPLE_FILE="test_files/simple_tracks.jsonl" export ALERT_THRESHOLD_SECONDS="200" # Run Telegraf pipeline - TELEGRAF_OUTPUT=$(telegraf --config test_files/config_input_sample_data.conf \ + TELEGRAF_OUTPUT=$(telegraf --config config_input_scene_detections.conf \ --config config_process_track_duration.conf \ --config config_process_threshold_filter.conf \ --config test_files/config_output_stdout.conf \ @@ -235,11 +343,12 @@ jobs: # Set up environment variables export HELPER_FILES_DIR="$(pwd)" + export CONSUMER_SCRIPT="test_files/sample_data_feeder.sh" export SAMPLE_FILE="test_files/simple_tracks.jsonl" export ALERT_THRESHOLD_SECONDS="2" # Run Telegraf pipeline - TELEGRAF_OUTPUT=$(telegraf --config test_files/config_input_sample_data.conf \ + TELEGRAF_OUTPUT=$(telegraf --config config_input_scene_detections.conf \ --config config_process_track_duration.conf \ --config config_process_threshold_filter.conf \ --config test_files/config_output_stdout.conf \ @@ -281,11 +390,12 @@ jobs: # Set up environment variables export HELPER_FILES_DIR="$(pwd)" + export CONSUMER_SCRIPT="test_files/sample_data_feeder.sh" export SAMPLE_FILE="test_files/simple_tracks.jsonl" export ALERT_THRESHOLD_SECONDS="0" # Run Telegraf pipeline - TELEGRAF_OUTPUT=$(telegraf --config test_files/config_input_sample_data.conf \ + TELEGRAF_OUTPUT=$(telegraf --config config_input_scene_detections.conf \ --config config_process_track_duration.conf \ --config config_process_threshold_filter.conf \ --config test_files/config_output_stdout.conf \ @@ -327,11 +437,12 @@ jobs: # Set up environment variables export HELPER_FILES_DIR="$(pwd)" + export CONSUMER_SCRIPT="test_files/sample_data_feeder.sh" export SAMPLE_FILE="test_files/simple_tracks.jsonl" export ALERT_THRESHOLD_SECONDS="120" # Run Telegraf pipeline - TELEGRAF_OUTPUT=$(telegraf --config test_files/config_input_sample_data.conf \ + TELEGRAF_OUTPUT=$(telegraf --config config_input_scene_detections.conf \ --config config_process_track_duration.conf \ --config config_process_threshold_filter.conf \ --config test_files/config_output_stdout.conf \ diff --git a/project-time-in-area-analytics/.images/track-heatmap-120s.png b/project-time-in-area-analytics/.images/track-heatmap-120s.png index 275c00f692b2c9c0d7b11ab1b5d424b2e7248193..3da1238d904c01b6f9f2c662194107da5b2bc2df 100644 GIT binary patch literal 251073 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≪5brao?#bykQS&V;Y4`dvf@ux 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 M{pS0YzOf|bADcVAJpcdz literal 108491 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�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 Lm>wQ%z3hJggb;w5 diff --git a/project-time-in-area-analytics/.images/track-heatmap-simple.png b/project-time-in-area-analytics/.images/track-heatmap-simple.png index ec6b8f8c162b9f32708c1c9131b27e880f1fc346..1e495d75627ccff2915119e0d400baab2a3b1415 100644 GIT binary patch literal 51848 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 diff --git a/project-time-in-area-analytics/README.md b/project-time-in-area-analytics/README.md index 4f80594..5f7afa8 100644 --- a/project-time-in-area-analytics/README.md +++ b/project-time-in-area-analytics/README.md @@ -104,6 +104,17 @@ Enable the `Debug` option in the FixedIT Data Agent for detailed logs. Debug fil This project uses several configuration files that work together to create a time-in-area analytics pipeline: +### config_input_scene_detections.conf and axis_scene_detection_consumer.sh + +Configuration and script pair that work together to consume real-time object detection data from the camera's analytics scene description stream. The configuration file (`config_input_scene_detections.conf`) uses the consumer script (`axis_scene_detection_consumer.sh`) to connect directly to the camera's internal message broker and transform the raw analytics data into individual detection messages. + +Can also be used for reproducible testing on host systems by setting `CONSUMER_SCRIPT="test_files/sample_data_feeder.sh"` to use a file reader that simulates the camera's detection data output. This allows you to test the processing pipeline using pre-recorded sample data without needing live camera hardware. + +**Environment Variables:** +- `HELPER_FILES_DIR`: Directory containing project files (required) +- `CONSUMER_SCRIPT`: Path to consumer script (defaults to `axis_scene_detection_consumer.sh`) +- `SAMPLE_FILE`: Path to sample data file (required when using `sample_data_feeder.sh`) + ### config_process_track_duration.conf and track_duration_calculator.star Calculates time in area for each detected object using the external Starlark script `track_duration_calculator.star`. This processor: @@ -123,7 +134,7 @@ Outputs processed metrics to stdout in JSON format for testing and debugging. ### test_files/sample_data_feeder.sh -Helper script that simulates camera metadata stream by reading `simple_tracks.jsonl` line by line. +Helper script that simulates camera metadata stream by reading sample JSON files line by line. This script is used for host testing to simulate the output of the live camera's message broker without requiring actual camera hardware. ## Future Enhancements @@ -166,17 +177,42 @@ Test the time in area calculator without threshold filtering to see all detectio ```bash # Set up test environment export HELPER_FILES_DIR="$(pwd)" +export CONSUMER_SCRIPT="test_files/sample_data_feeder.sh" export SAMPLE_FILE="test_files/simple_tracks.jsonl" # Test time in area calculation only (shows all detections + debug messages) -telegraf --config test_files/config_input_sample_data.conf \ +telegraf --config config_input_scene_detections.conf \ --config config_process_track_duration.conf \ --config test_files/config_output_stdout.conf \ --once ``` +**How it works:** By setting `CONSUMER_SCRIPT="test_files/sample_data_feeder.sh"`, we override the default live camera script with a file reader that simulates the camera's message broker output by reading from the file specified in `SAMPLE_FILE`. This allows us to test the processing pipeline on the host using pre-recorded sample data instead of connecting to the live camera infrastructure. + **Expected Output:** -All detections with `time_in_area_seconds` field plus debug messages when stale tracks are cleaned up. +All detections with `time_in_area_seconds` field. + +Example output: +```json +{ + "fields": { + "bounding_box_bottom": 0.62, + "bounding_box_left": 0.22, + "bounding_box_right": 0.32, + "bounding_box_top": 0.42, + "frame": "2024-01-15T10:00:02.789012Z", + "object_type": "Human", + "timestamp": "2024-01-15T10:00:02.789012Z", + "track_id": "track_001", + "time_in_area_seconds": 1.67 + }, + "name": "detection_frame", + "tags": {"host": "test-host"}, + "timestamp": 1755677033 +} +``` + +The `time_in_area_seconds` field is added by the time-in-area processor, showing how long this object has been tracked in the monitored area. #### Test Complete Alert Pipeline @@ -185,19 +221,22 @@ Test the complete alert generation pipeline with threshold filtering: ```bash # Set up test environment export HELPER_FILES_DIR="$(pwd)" +export CONSUMER_SCRIPT="test_files/sample_data_feeder.sh" export SAMPLE_FILE="test_files/simple_tracks.jsonl" export ALERT_THRESHOLD_SECONDS="2" # Alert threshold in seconds # Test time in area calculation + threshold filtering -telegraf --config test_files/config_input_sample_data.conf \ +telegraf --config config_input_scene_detections.conf \ --config config_process_track_duration.conf \ --config config_process_threshold_filter.conf \ --config test_files/config_output_stdout.conf \ --once ``` +**How it works:** Same as above - we use the file reader script to simulate camera data on the host by reading from the file specified in `SAMPLE_FILE`, allowing us to test the complete pipeline including threshold filtering without needing live camera hardware. + **Expected Output:** -Only detections with time in area (`time_in_area_seconds`) > `ALERT_THRESHOLD_SECONDS` plus debug messages for track cleanup. +Only detections with time in area (`time_in_area_seconds`) > `ALERT_THRESHOLD_SECONDS`. #### Test with Real Device Data @@ -206,16 +245,17 @@ You can also test with real analytics scene description data recorded from an Ax ```bash # Set up test environment with real device data export HELPER_FILES_DIR="$(pwd)" +export CONSUMER_SCRIPT="test_files/sample_data_feeder.sh" export SAMPLE_FILE="test_files/real_device_data.jsonl" # Test time in area calculation with real data -telegraf --config test_files/config_input_sample_data.conf \ +telegraf --config config_input_scene_detections.conf \ --config config_process_track_duration.conf \ --config test_files/config_output_stdout.conf \ --once ``` -**Note:** The `real_device_data.jsonl` file contains actual analytics scene description data recorded from an Axis device. This provides more realistic testing with real track IDs, timestamps, and object detection patterns. +**How it works:** We set `CONSUMER_SCRIPT="test_files/sample_data_feeder.sh"` to use a file reader that simulates the camera's message broker output. This allows us to test on the host using pre-recorded real device data instead of connecting to the live camera infrastructure. The `real_device_data.jsonl` file contains actual analytics scene description data recorded from an Axis device, providing realistic testing with real track IDs, timestamps, and object detection patterns. ## Analytics Data Structure @@ -320,7 +360,7 @@ python test_scripts/track_heatmap_viewer.py test_files/simple_tracks.jsonl For installation, usage details, and examples, see the [test_scripts README](test_scripts/README.md). ![Track Heatmap Example](.images/track-heatmap-120s.png) -_Example heatmap showing track activity over time with labeled components_ +_Example heatmap showing track activity over time with labeled components (10s alarm threshold)_ ## Automated Testing diff --git a/project-time-in-area-analytics/axis_scene_detection_consumer.sh b/project-time-in-area-analytics/axis_scene_detection_consumer.sh new file mode 100755 index 0000000..03be95b --- /dev/null +++ b/project-time-in-area-analytics/axis_scene_detection_consumer.sh @@ -0,0 +1,58 @@ +#!/bin/sh + +# Axis Camera Metadata Consumer Script +# +# This script consumes analytics scene description data from an Axis camera's +# internal message broker and outputs JSON for Telegraf processing. +# +# IMPORTANT: This script only works when deployed to the camera itself. +# It cannot be tested on a host system because it depends on camera-specific +# commands and internal message broker infrastructure. +# +# Key Features: +# - Consumes analytics scene description data from camera's message broker +# - Unpacks frame events to individual detection messages +# - Filters output to extract only JSON data with detections +# - Outputs structured data for MQTT transmission +# - Camera-specific implementation (requires deployment) +# +# Technical Details: +# - Uses message-broker-cli (camera-specific command) +# - Consumes topic: com.axis.analytics_scene_description.v0.beta +# - Transforms frame-based format to individual detection messages +# - Uses jq to parse and restructure JSON data +# - Outputs one detection per line for Telegraf processing + +# Analytics scene description topic (camera-specific) +TOPIC="com.axis.analytics_scene_description.v0.beta" +SOURCE="1" + +# Check if jq is available on the camera +if ! command -v jq >/dev/null 2>&1; then + echo "ERROR: jq is required but not available on this camera" >&2 + exit 1 +fi + +# Run the metadata broker, filter JSON, and transform to individual detections +# Example transformations: +# 1. sed removes prefix: "INFO: {json}" -> "{json}" +# 2. jq unpacks: +# stdin: {"frame":{"observations":[{"track_id":"123"},{"track_id":"456"}]}} +# stdout: {"frame":"2024-01-15T10:00:01Z","track_id":"123"} +# stdout: {"frame":"2024-01-15T10:00:01Z","track_id":"456"} +message-broker-cli consume "$TOPIC" "$SOURCE" | \ +sed -n 's/^[^{]*//p' | \ +jq -c ' +.frame as $frame | +if ($frame.observations | length) > 0 then + $frame.observations[] | + { + "frame": $frame.timestamp, + "timestamp": .timestamp, + "track_id": .track_id, + "object_type": (.class.type // "null"), + "bounding_box": .bounding_box + } +else + empty +end' \ No newline at end of file diff --git a/project-time-in-area-analytics/config_input_scene_detections.conf b/project-time-in-area-analytics/config_input_scene_detections.conf new file mode 100644 index 0000000..8736cde --- /dev/null +++ b/project-time-in-area-analytics/config_input_scene_detections.conf @@ -0,0 +1,44 @@ +# Metadata Input Configuration for Analytics Scene Description +# +# This configuration uses Telegraf's execd input plugin to continuously +# consume analytics metadata from either the camera's internal message broker +# or a sample data file for testing. +# +# Key Features: +# - Runs the metadata consumer script continuously (not on intervals) +# - Processes JSON messages from the camera's analytics stream +# - Can be overridden to use mock data for testing +# - Handles real-time scene description data +# +# Environment Variables: +# - HELPER_FILES_DIR: Directory containing project files (required) +# - CONSUMER_SCRIPT: Path to consumer script (defaults to axis_metadata_consumer.sh) +# - SAMPLE_FILE: Path to sample data file (required when using sample_data_feeder.sh) +# +# Technical Details: +# - execd plugin runs the command continuously and reads stdout stream +# - Expects one JSON message per line from the script +# - Parses each line as a separate JSON object +# - No signal handling (script runs until Telegraf stops) + +[[inputs.execd]] + # Command to execute - uses CONSUMER_SCRIPT if set, otherwise defaults to live camera script + # Default: axis_metadata_consumer.sh (live camera) + # Override: Set CONSUMER_SCRIPT to use different script (e.g., test_files/sample_data_feeder.sh) + command = [ + "${HELPER_FILES_DIR}/${CONSUMER_SCRIPT:-axis_scene_detection_consumer.sh}" + ] + + # No signal handling - let the script run continuously + # The script will keep running and outputting JSON until Telegraf stops + signal = "none" + + # Parse each line of output as JSON format + # Each line from the script should contain one complete JSON object + data_format = "json" + + # Override the metric name for clarity in MQTT topics + name_override = "detection_frame" + + # String fields that should be preserved as strings during JSON parsing + json_string_fields = ["timestamp", "track_id", "object_type", "frame"] diff --git a/project-time-in-area-analytics/test_files/config_input_sample_data.conf b/project-time-in-area-analytics/test_files/config_input_sample_data.conf deleted file mode 100644 index 89560e7..0000000 --- a/project-time-in-area-analytics/test_files/config_input_sample_data.conf +++ /dev/null @@ -1,27 +0,0 @@ -# Sample Detection Data Input Configuration for Testing -# -# This configuration uses Telegraf's execd input plugin to simulate camera -# metadata stream for testing the time-in-area analytics pipeline. -# -# Required Environment Variables: -# - HELPER_FILES_DIR: Directory containing project files -# - SAMPLE_FILE: Path to sample data file relative to HELPER_FILES_DIR -# -# Key Features: -# - Reads sample detection data from local JSON file -# - Provides identical data structure to real camera metadata -# - Enables testing of processor logic independently -# - Allows development and testing without camera hardware - -[[inputs.execd]] - # Command to execute - outputs JSON lines from sample file - command = ["${HELPER_FILES_DIR}/test_files/sample_data_feeder.sh"] - - # Parse each line as JSON - data_format = "json" - - # Override metric name for clarity - name_override = "detection_frame" - - # String fields that should be preserved as strings during JSON parsing - json_string_fields = ["timestamp", "track_id", "object_type"] diff --git a/project-time-in-area-analytics/test_files/simple_tracks.jsonl b/project-time-in-area-analytics/test_files/simple_tracks.jsonl index 52e3715..9419ef7 100644 --- a/project-time-in-area-analytics/test_files/simple_tracks.jsonl +++ b/project-time-in-area-analytics/test_files/simple_tracks.jsonl @@ -1,10 +1,10 @@ -{"frame": {"observations": [{"bounding_box": {"bottom": 0.6, "left": 0.2, "right": 0.3, "top": 0.4}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:01.123456Z", "track_id": "track_001"}], "timestamp": "2024-01-15T10:00:01.123456Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.6, "left": 0.2, "right": 0.3, "top": 0.4}, "class": {"type": "Unknown"}, "timestamp": "2024-01-15T10:00:01.123456Z", "track_id": "track_001"}], "timestamp": "2024-01-15T10:00:01.123456Z"}} {"frame": {"observations": [{"bounding_box": {"bottom": 0.62, "left": 0.22, "right": 0.32, "top": 0.42}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:02.789012Z", "track_id": "track_001"}], "timestamp": "2024-01-15T10:00:02.789012Z"}} -{"frame": {"observations": [{"bounding_box": {"bottom": 0.64, "left": 0.24, "right": 0.34, "top": 0.44}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:03.345678Z", "track_id": "track_001"}, {"bounding_box": {"bottom": 0.56, "left": 0.12, "right": 0.18, "top": 0.36}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:03.345678Z", "track_id": "track_002"}], "timestamp": "2024-01-15T10:00:03.345678Z"}} -{"frame": {"observations": [{"bounding_box": {"bottom": 0.66, "left": 0.26, "right": 0.36, "top": 0.46}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:04.901234Z", "track_id": "track_001"}, {"bounding_box": {"bottom": 0.58, "left": 0.14, "right": 0.20, "top": 0.38}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:04.901234Z", "track_id": "track_002"}], "timestamp": "2024-01-15T10:00:04.901234Z"}} -{"frame": {"observations": [{"bounding_box": {"bottom": 0.60, "left": 0.16, "right": 0.22, "top": 0.40}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:05.567890Z", "track_id": "track_002"}], "timestamp": "2024-01-15T10:00:05.567890Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.64, "left": 0.24, "right": 0.34, "top": 0.44}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:03.345678Z", "track_id": "track_001"}, {"bounding_box": {"bottom": 0.56, "left": 0.12, "right": 0.18, "top": 0.36}, "class": {"type": "Unknown"}, "timestamp": "2024-01-15T10:00:03.345678Z", "track_id": "track_002"}], "timestamp": "2024-01-15T10:00:03.345678Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.66, "left": 0.26, "right": 0.36, "top": 0.46}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:04.901234Z", "track_id": "track_001"}, {"bounding_box": {"bottom": 0.58, "left": 0.14, "right": 0.20, "top": 0.38}, "class": {"type": "Unknown"}, "timestamp": "2024-01-15T10:00:04.901234Z", "track_id": "track_002"}], "timestamp": "2024-01-15T10:00:04.901234Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.60, "left": 0.16, "right": 0.22, "top": 0.40}, "class": {"type": "Unknown"}, "timestamp": "2024-01-15T10:00:05.567890Z", "track_id": "track_002"}], "timestamp": "2024-01-15T10:00:05.567890Z"}} {"frame": {"observations": [], "operations": [{"id": "track_001", "type": "DeleteOperation"}], "timestamp": "2024-01-15T10:00:06.000000Z"}} -{"frame": {"observations": [{"bounding_box": {"bottom": 0.75, "left": 0.25, "right": 0.35, "top": 0.50}, "class": {"type": "Vehicle"}, "timestamp": "2024-01-15T10:00:10.234567Z", "track_id": "track_003"}], "timestamp": "2024-01-15T10:00:10.234567Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.75, "left": 0.25, "right": 0.35, "top": 0.50}, "class": {"type": "Unknown"}, "timestamp": "2024-01-15T10:00:10.234567Z", "track_id": "track_003"}], "timestamp": "2024-01-15T10:00:10.234567Z"}} {"frame": {"observations": [{"bounding_box": {"bottom": 0.77, "left": 0.27, "right": 0.37, "top": 0.52}, "class": {"type": "Vehicle"}, "timestamp": "2024-01-15T10:00:11.890123Z", "track_id": "track_003"}], "timestamp": "2024-01-15T10:00:11.890123Z"}} {"frame": {"observations": [{"bounding_box": {"bottom": 0.79, "left": 0.29, "right": 0.39, "top": 0.54}, "class": {"type": "Vehicle"}, "timestamp": "2024-01-15T10:00:12.456789Z", "track_id": "track_003"}, {"bounding_box": {"bottom": 0.68, "left": 0.28, "right": 0.38, "top": 0.48}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:12.456789Z", "track_id": "track_001"}], "timestamp": "2024-01-15T10:00:12.456789Z"}} {"frame": {"observations": [{"bounding_box": {"bottom": 0.80, "left": 0.35, "right": 0.45, "top": 0.60}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:13.012345Z", "track_id": "track_004"}], "timestamp": "2024-01-15T10:00:13.012345Z"}} diff --git a/project-time-in-area-analytics/test_scripts/README.md b/project-time-in-area-analytics/test_scripts/README.md index 4068e4e..5b31a21 100644 --- a/project-time-in-area-analytics/test_scripts/README.md +++ b/project-time-in-area-analytics/test_scripts/README.md @@ -57,7 +57,7 @@ python record_real_data.py \ ### Parameters -- `--host, -h`: Device IP address or hostname (default: 192.168.1.2) +- `--host, -h`: Device IP address or hostname (required) - `--username, -u`: SSH username (default: acap-fixeditdataagent) - `--password, -p`: SSH password (optional, will prompt if needed) - `--duration, -d`: Recording duration in seconds (default: 30) diff --git a/project-time-in-area-analytics/test_scripts/record_real_data.py b/project-time-in-area-analytics/test_scripts/record_real_data.py index eba812e..bc73e2e 100644 --- a/project-time-in-area-analytics/test_scripts/record_real_data.py +++ b/project-time-in-area-analytics/test_scripts/record_real_data.py @@ -78,7 +78,8 @@ def run_command(self, command: str, timeout_seconds: int) -> Iterator[str]: if not self.client: raise RuntimeError("Not connected to device") - _, stdout, _ = self.client.exec_command(command) + # Execute the command and capture both stdout and stderr + _, stdout, stderr = self.client.exec_command(command) # Use threading for timeout instead of signals lines = [] @@ -95,17 +96,31 @@ def read_output(): finally: finished.set() + def read_errors(): + try: + for line in stderr: + if finished.is_set(): + break + if line.strip(): # Only log non-empty error lines + print(f"\033[31m❌ Command error: {line.strip()}\033[0m") + except (paramiko.SSHException, OSError, EOFError): + pass + finally: + finished.set() + reader_thread = threading.Thread(target=read_output) - reader_thread.daemon = True + error_thread = threading.Thread(target=read_errors) reader_thread.start() + error_thread.start() - # Wait for timeout or completion + # Wait for the timeout or completion start_time = time.time() while time.time() - start_time < timeout_seconds and not finished.is_set(): time.sleep(0.1) - finished.set() # Signal thread to stop - reader_thread.join(timeout=1) # Give thread time to finish + finished.set() # Signal threads to stop + reader_thread.join(timeout=1) + error_thread.join(timeout=1) yield from lines @@ -210,15 +225,13 @@ def record_data( @click.command() -@click.option( - "--host", "-h", default="192.168.1.2", help="Device IP address or hostname" -) +@click.option("--host", "-h", required=True, help="Device IP address or hostname") @click.option("--username", "-u", default="acap-fixeditdataagent", help="SSH username") @click.option( "--password", "-p", default=None, - help="SSH password (if not provided, will try key auth first, " "then prompt)", + help="SSH password (if not provided, will try key auth first, then prompt)", ) @click.option( "--topic", @@ -322,7 +335,7 @@ def main( # pylint: disable=too-many-arguments,too-many-positional-arguments,to if line_count > 0: click.echo( - f"✅ Successfully recorded {line_count} lines of real device " f"data" + f"✅ Successfully recorded {line_count} lines of real device data" ) click.echo(f"📁 Saved to: {output_file}") click.echo("") diff --git a/project-time-in-area-analytics/test_scripts/track_heatmap_viewer.py b/project-time-in-area-analytics/test_scripts/track_heatmap_viewer.py index 0f7cad1..421e025 100755 --- a/project-time-in-area-analytics/test_scripts/track_heatmap_viewer.py +++ b/project-time-in-area-analytics/test_scripts/track_heatmap_viewer.py @@ -1,8 +1,10 @@ #!/usr/bin/env python3 +# pylint: disable=too-many-lines """ Track Heatmap Viewer. -This script creates a heatmap visualization showing when different track IDs are active over time. +This script creates a heatmap visualization showing when different track IDs are +active over time. The visualization displays: - X-axis: Time (timestamps of frames with observations) - Y-axis: Track IDs @@ -10,7 +12,8 @@ - Gray cells: Track is not present in that frame Note: Only frames with observations are shown. Gaps in time are not represented. -This helps visualize track lifecycles and identify patterns in object detection data. +This helps visualize track lifecycles and identify patterns in object detection +data. """ import json @@ -18,7 +21,7 @@ from dataclasses import dataclass from datetime import datetime from pathlib import Path -from typing import Dict, List, Optional, Set, Tuple, Union +from typing import Dict, List, Optional, Set, Union import click import matplotlib.pyplot as plt @@ -26,7 +29,8 @@ # Color constants for heatmap visualization COLOR_ABSENT = "#CCCCCC" # Gray - track is absent -COLOR_PRESENT = "#4CAF50" # Green - track is present +COLOR_PRESENT = "#4CAF50" # Green - track is present (classified) +COLOR_UNCLASSIFIED = "#000000" # Black - track is present but unclassified COLOR_ALARM = "#F44336" # Red - track exceeds alarm threshold @@ -66,12 +70,12 @@ class Frame: detections: List[Detection] @property - def track_ids(self) -> List[str]: + def track_ids(self) -> Set[str]: """ - Get all track IDs present in this frame, sorted alphabetically. + Get all unique track IDs present in this frame. Returns: - List[str]: Sorted list of unique track IDs in this frame. + Set[str]: Set of unique track IDs in this frame. Examples: >>> bbox1 = BoundingBox(0.1, 0.2, 0.3, 0.4) @@ -83,10 +87,46 @@ def track_ids(self) -> List[str]: ... "track_002", "2024-01-15T10:00:01Z", bbox2, ObjectClass("Vehicle") ... ) >>> frame = Frame(1, "2024-01-15T10:00:01Z", [detection1, detection2]) - >>> frame.track_ids + >>> sorted(frame.track_ids) ['track_001', 'track_002'] """ - return sorted({detection.track_id for detection in self.detections}) + return {detection.track_id for detection in self.detections} + + @property + def class_names(self) -> Dict[str, str]: + """ + Get mapping of track IDs to class names for this frame. + + Returns: + Dict[str, str]: Mapping from track_id to class name. Keys are ordered + to match `track_ids` for deterministic representation. + + Examples: + >>> bbox1 = BoundingBox(0.1, 0.2, 0.3, 0.4) + >>> bbox2 = BoundingBox(0.2, 0.3, 0.4, 0.5) + >>> detection1 = Detection( + ... "track_001", "2024-01-15T10:00:01Z", bbox1, ObjectClass("Human") + ... ) + >>> detection2 = Detection( + ... "track_002", "2024-01-15T10:00:02Z", bbox2, ObjectClass("Vehicle") + ... ) + >>> frame = Frame(1, "2024-01-15T10:00:01Z", [detection1, detection2]) + >>> frame.class_names + {'track_001': 'Human', 'track_002': 'Vehicle'} + """ + seen: Dict[str, str] = {} + for detection in self.detections: + track_id = detection.track_id + class_type = detection.class_info.type + + # Only update if we don't have this track_id yet, or if the new + # class_type is not "Unknown" + if track_id not in seen or ( + class_type != "Unknown" and seen[track_id] == "Unknown" + ): + seen[track_id] = class_type + + return {track_id: seen[track_id] for track_id in sorted(seen.keys())} @dataclass @@ -94,7 +134,79 @@ class TrackData: """Container for parsed track data from JSONL file.""" frames: List[Frame] - all_track_ids: Set[str] + + @property + def all_track_ids(self) -> Set[str]: + """ + Get all unique track IDs found across all frames. + + Returns: + Set of all unique track IDs. + + Examples: + >>> # Create test data - 2 tracks + >>> bbox = BoundingBox(0.1, 0.2, 0.3, 0.4) + >>> human_class = ObjectClass("Human") + >>> vehicle_class = ObjectClass("Vehicle") + >>> + >>> # Frame 1: track_001 (Human) + >>> det1 = Detection("track_001", "2024-01-01T00:00:01Z", bbox, human_class) + >>> frame1 = Frame(1, "2024-01-01T00:00:01Z", [det1]) + >>> + >>> # Frame 2: track_002 (Vehicle) + >>> det2 = Detection("track_002", "2024-01-01T00:00:02Z", bbox, vehicle_class) + >>> frame2 = Frame(2, "2024-01-01T00:00:02Z", [det2]) + >>> + >>> frames = [frame1, frame2] + >>> track_data = TrackData(frames=frames) + >>> sorted(track_data.all_track_ids) + ['track_001', 'track_002'] + """ + all_ids = set() + for frame in self.frames: + all_ids.update(frame.track_ids) + return all_ids + + @property + def track_class_map(self) -> Dict[str, str]: + """ + Get mapping of all track IDs to their class types. + + Returns: + Dict mapping track_id to class type for all tracks found in frames. + + Examples: + >>> # Create test data - 2 tracks with different classes + >>> bbox = BoundingBox(0.1, 0.2, 0.3, 0.4) + >>> human_class = ObjectClass("Human") + >>> vehicle_class = ObjectClass("Vehicle") + >>> + >>> # Frame 1: track_001 (Human) + >>> det1 = Detection("track_001", "2024-01-01T00:00:01Z", bbox, human_class) + >>> frame1 = Frame(1, "2024-01-01T00:00:01Z", [det1]) + >>> + >>> # Frame 2: track_002 (Vehicle) + >>> det2 = Detection("track_002", "2024-01-01T00:00:02Z", bbox, vehicle_class) + >>> frame2 = Frame(2, "2024-01-01T00:00:02Z", [det2]) + >>> + >>> frames = [frame1, frame2] + >>> track_data = TrackData(frames=frames) + >>> track_data.track_class_map + {'track_001': 'Human', 'track_002': 'Vehicle'} + """ + track_class_map: Dict[str, str] = {} + + # Collect class information from all frames, prioritizing non-"Unknown" values + for frame in self.frames: + for track_id, class_name in frame.class_names.items(): + # Only update if we don't have this track_id yet, or if the new + # class_name is not "Unknown" + if track_id not in track_class_map or ( + class_name != "Unknown" and track_class_map[track_id] == "Unknown" + ): + track_class_map[track_id] = class_name + + return track_class_map def _parse_observation_to_detection(obs: Dict) -> Detection: @@ -164,7 +276,7 @@ def _parse_observation_to_detection(obs: Dict) -> Detection: ) -def _parse_frame_data(frame_data: Dict, line_num: int) -> Tuple[Frame, Set[str]]: +def _parse_frame_data(frame_data: Dict, line_num: int) -> Frame: """ Parse a single frame data dictionary into a Frame object. @@ -173,7 +285,7 @@ def _parse_frame_data(frame_data: Dict, line_num: int) -> Tuple[Frame, Set[str]] line_num: Line number to use as frame number Returns: - Tuple of (Frame object, set of track IDs found in this frame) + Frame object Raises: ValueError: If required frame fields are missing @@ -189,13 +301,11 @@ def _parse_frame_data(frame_data: Dict, line_num: int) -> Tuple[Frame, Set[str]] # Parse observations into Detection objects detections = [] - frame_track_ids = set() for obs in observations: if "track_id" in obs: detection = _parse_observation_to_detection(obs) detections.append(detection) - frame_track_ids.add(obs["track_id"]) # Create Frame object frame = Frame( @@ -204,10 +314,10 @@ def _parse_frame_data(frame_data: Dict, line_num: int) -> Tuple[Frame, Set[str]] detections=detections, ) - return frame, frame_track_ids + return frame -def _parse_jsonl_line(line: str, line_num: int) -> Tuple[Frame, Set[str]]: +def _parse_jsonl_line(line: str, line_num: int) -> Frame: """ Parse a single line from a JSONL file into a Frame object. @@ -233,15 +343,13 @@ def _parse_jsonl_line(line: str, line_num: int) -> Tuple[Frame, Set[str]]: ... }] ... } ... }''' - >>> frame, track_ids = _parse_jsonl_line(line, 1) + >>> frame = _parse_jsonl_line(line, 1) >>> frame.frame_number 1 >>> frame.timestamp '2024-01-15T10:00:01Z' >>> len(frame.detections) 1 - >>> track_ids - {'track_001'} """ try: data = json.loads(line) @@ -258,18 +366,19 @@ def _parse_jsonl_line(line: str, line_num: int) -> Tuple[Frame, Set[str]]: f'Expected format: {{"frame": {{...}}}} but got keys: {list(data.keys())}' ) - return _parse_frame_data(data["frame"], line_num) + frame = _parse_frame_data(data["frame"], line_num) + return frame def parse_jsonl_file(file_path: Path) -> TrackData: """ - Parse JSONL file and extract frame data and all unique track IDs. + Parse JSONL file and extract frame data. Args: file_path: Path to the JSONL file Returns: - TrackData containing frames and all unique track IDs + TrackData containing all frames Raises: FileNotFoundError: If the input file doesn't exist @@ -277,7 +386,6 @@ def parse_jsonl_file(file_path: Path) -> TrackData: ValueError: If JSON is invalid or missing expected 'frame' key """ frames = [] - all_track_ids = set() try: with open(file_path, "r", encoding="utf-8") as f: @@ -287,9 +395,8 @@ def parse_jsonl_file(file_path: Path) -> TrackData: continue try: - frame, frame_track_ids = _parse_jsonl_line(line, line_num) + frame = _parse_jsonl_line(line, line_num) frames.append(frame) - all_track_ids.update(frame_track_ids) except ValueError as e: raise ValueError(f"Error parsing line {line_num}: {e}") from e @@ -299,38 +406,71 @@ def parse_jsonl_file(file_path: Path) -> TrackData: except OSError as e: raise OSError(f"Error reading file {file_path}: {e}") from e - return TrackData(frames=frames, all_track_ids=all_track_ids) + return TrackData(frames=frames) + + +def _combine_heatmap_and_alarm_matrices( + heatmap_matrix: np.ndarray, alarm_matrix: np.ndarray +) -> np.ndarray: + """ + Combine heatmap and alarm matrices, ensuring alarms override classification status. + + Args: + heatmap_matrix: Matrix with values 0=absent, 1=unclassified, 2=classified + alarm_matrix: Matrix with values 0=no alarm, 1=alarm + + Returns: + Combined matrix with values 0=absent, 1=unclassified, 2=classified, 3=alarm + + Examples: + >>> # Test data: 2 tracks, 3 frames + >>> # track1: unclassified, unclassified, classified + >>> # track2: absent, unclassified, unclassified + >>> heatmap = np.array([[1, 1, 2], [0, 1, 1]]) + >>> # track1: no alarm, no alarm, alarm + >>> # track2: no alarm, no alarm, alarm + >>> alarm = np.array([[0, 0, 1], [0, 0, 1]]) + >>> combined = _combine_heatmap_and_alarm_matrices(heatmap, alarm) + >>> combined.tolist() + [[1, 1, 3], [0, 1, 3]] + """ + combined_matrix = heatmap_matrix.copy() + # Any track with an alarm gets value 3 (red), regardless of classification + combined_matrix[alarm_matrix > 0] = 3 + return combined_matrix def _create_heatmap_matrix( frames: List[Frame], sorted_track_ids: List[str] ) -> np.ndarray: """ - Create the heatmap matrix from frame data. + Create the heatmap matrix from frame data, distinguishing classified vs unclassified tracks. Args: frames: List of Frame objects - sorted_track_ids: Sorted list of track IDs + sorted_track_ids: Sorted list of track IDs. The order determines the row positions + in the returned matrix - track_ids[0] maps to row 0, track_ids[1] to row 1, etc. + This ensures consistent visual ordering in the heatmap. Returns: - 2D numpy array representing track presence over time + 2D numpy array: 0=absent, 1=unclassified, 2=classified. Rows correspond to + track IDs in the same order as sorted_track_ids. Examples: >>> # Create test data - 3 frames, 2 tracks >>> bbox = BoundingBox(0.1, 0.2, 0.3, 0.4) - >>> obj_class = ObjectClass("Human") >>> - >>> # Frame 1: only track_001 - >>> det1 = Detection("track_001", "2024-01-01T00:00:01Z", bbox, obj_class) + >>> # Frame 1: only track_001 (unclassified) + >>> det1 = Detection("track_001", "2024-01-01T00:00:01Z", bbox, ObjectClass("Unknown")) >>> frame1 = Frame(1, "2024-01-01T00:00:01Z", [det1]) >>> - >>> # Frame 2: both tracks - >>> det2a = Detection("track_001", "2024-01-01T00:00:02Z", bbox, obj_class) - >>> det2b = Detection("track_002", "2024-01-01T00:00:02Z", bbox, obj_class) + >>> # Frame 2: both tracks (track_001 now classified, track_002 unclassified) + >>> det2a = Detection("track_001", "2024-01-01T00:00:02Z", bbox, ObjectClass("Human")) + >>> det2b = Detection("track_002", "2024-01-01T00:00:02Z", bbox, ObjectClass("Unknown")) >>> frame2 = Frame(2, "2024-01-01T00:00:02Z", [det2a, det2b]) >>> - >>> # Frame 3: only track_002 - >>> det3 = Detection("track_002", "2024-01-01T00:00:03Z", bbox, obj_class) + >>> # Frame 3: only track_002 (still unclassified) + >>> det3 = Detection("track_002", "2024-01-01T00:00:03Z", bbox, ObjectClass("Unknown")) >>> frame3 = Frame(3, "2024-01-01T00:00:03Z", [det3]) >>> >>> frames = [frame1, frame2, frame3] @@ -339,7 +479,7 @@ def _create_heatmap_matrix( >>> matrix.shape (2, 3) >>> matrix.tolist() - [[1.0, 1.0, 0.0], [0.0, 1.0, 1.0]] + [[1.0, 2.0, 0.0], [0.0, 1.0, 1.0]] """ num_tracks = len(sorted_track_ids) num_frames = len(frames) @@ -349,7 +489,12 @@ def _create_heatmap_matrix( frame_track_ids = set(frame.track_ids) for track_idx, track_id in enumerate(sorted_track_ids): if track_id in frame_track_ids: - heatmap_matrix[track_idx, frame_idx] = 1 + # Check if track has class info in this specific frame + class_type = frame.class_names.get(track_id, "Unknown") + if class_type != "Unknown": + heatmap_matrix[track_idx, frame_idx] = 2 # Classified + else: + heatmap_matrix[track_idx, frame_idx] = 1 # Unclassified return heatmap_matrix @@ -374,11 +519,15 @@ def _create_alarm_matrix( # pylint: disable=too-many-locals Args: frames: List of Frame objects with timestamps and detections - sorted_track_ids: Sorted list of track IDs for consistent matrix ordering + sorted_track_ids: Sorted list of track IDs for consistent matrix ordering. The order + determines the row positions in the returned matrix - track_ids[0] maps to row 0, + track_ids[1] to row 1, etc. This ensures the alarm matrix rows align with the + heatmap matrix rows for proper combination. alarm_threshold: Time threshold in seconds for alarm conditions Returns: - 2D numpy array: 1 where track exceeds threshold, 0 otherwise + 2D numpy array: 1 where track exceeds threshold, 0 otherwise. Rows correspond to + track IDs in the same order as sorted_track_ids, ensuring alignment with the heatmap matrix. Raises: ValueError: If timestamp parsing fails or data is invalid @@ -471,7 +620,85 @@ def _create_alarm_matrix( # pylint: disable=too-many-locals return alarm_matrix -def _setup_alarm_heatmap_plot( +def _create_heatmap_imshow( + ax: plt.Axes, combined_matrix: np.ndarray, show_alarm_colors: bool +) -> tuple[plt.matplotlib.image.AxesImage, str, list, list]: + """ + Create imshow plot with appropriate colormap configuration and return title. + + This function handles different color schemes: + 1. Alarm colors (4 discrete values): 0=absent, 1=unclassified, 2=classified, 3=alarm + 2. Basic colors (3 discrete values): 0=absent, 1=unclassified, 2=classified + + Both use BoundaryNorm for consistent discrete color boundaries, ensuring exact + value-to-color mapping. + + Args: + ax: Matplotlib axes to plot on + combined_matrix: 2D numpy array with track presence/alarm data + show_alarm_colors: Whether to include alarm colors (4-color scheme) or basic colors + (3-color scheme) + + Returns: + Tuple of (matplotlib image object from imshow, title string, tick positions, tick labels) + + Examples: + >>> import matplotlib.pyplot as plt + >>> fig, ax = plt.subplots() + >>> matrix = np.array([[0, 1], [2, 0]]) + >>> im, title, ticks, labels = _create_heatmap_imshow(ax, matrix, False) + >>> im is not None + True + >>> "Classified" in title + True + >>> len(ticks) == 3 + True + + >>> im, title, ticks, labels = _create_heatmap_imshow(ax, matrix, True) + >>> "Alarm" in title + True + >>> len(ticks) == 4 + True + """ + if show_alarm_colors: + # 4-class case: 0=absent, 1=unclassified, 2=classified, 3=alarm + colors = [COLOR_ABSENT, COLOR_UNCLASSIFIED, COLOR_PRESENT, COLOR_ALARM] + title = ( + "Track Activity Heatmap\n" + "(Gray = Absent, Black = Unclassified, Green = Classified, Red = Alarm)" + ) + bounds = [0, 1, 2, 3, 4] + num_colors = 4 + tick_positions = [0.5, 1.5, 2.5, 3.5] + tick_labels = ["Absent", "Unclassified", "Classified", "Alarm"] + else: + # 3-class case: 0=absent, 1=unclassified, 2=classified + colors = [COLOR_ABSENT, COLOR_UNCLASSIFIED, COLOR_PRESENT] + title = ( + "Track Activity Heatmap\n" + "(Gray = Absent, Black = Unclassified, Green = Classified)" + ) + bounds = [0, 1, 2, 3] + num_colors = 3 + tick_positions = [0.5, 1.5, 2.5] + tick_labels = ["Absent", "Unclassified", "Classified"] + + # Create colormap and imshow + cmap = plt.matplotlib.colors.ListedColormap(colors, N=num_colors) + norm = plt.matplotlib.colors.BoundaryNorm(bounds, cmap.N) + + im = ax.imshow( + combined_matrix, + cmap=cmap, + aspect="auto", + interpolation="nearest", + norm=norm, + ) + + return im, title, tick_positions, tick_labels + + +def _setup_heatmap_plot( heatmap_matrix: np.ndarray, num_tracks: int, num_frames: int, @@ -487,53 +714,40 @@ def _setup_alarm_heatmap_plot( alarm_matrix: Optional 2D numpy array with alarm data. If provided, uses 3-color scheme. Returns: - Tuple of (axes, image) from matplotlib + Tuple of (axes, image, tick positions, tick labels) from matplotlib """ - _, ax = plt.subplots(figsize=(max(12, num_frames * 0.1), max(6, num_tracks * 0.3))) + height = max(8, num_tracks * 0.4) + width = max(12, num_frames * 0.1) + _, ax = plt.subplots(figsize=(width, height)) - # Create combined matrix: 0=absent, 1=present, 2=alarm (if alarm_matrix provided) + # Create combined matrix: 0=absent, 1=present&unclassified, 2=present&classified, 3=alarm + # (if alarm_matrix provided) if alarm_matrix is not None: - combined_matrix = heatmap_matrix + alarm_matrix + combined_matrix = _combine_heatmap_and_alarm_matrices( + heatmap_matrix, alarm_matrix + ) show_alarm_colors = True else: combined_matrix = heatmap_matrix show_alarm_colors = False - if show_alarm_colors: - # Three-color colormap: gray, green, red - colors = [COLOR_ABSENT, COLOR_PRESENT, COLOR_ALARM] - title = "Track Activity Heatmap\n(Gray = Absent, Green = Present, Red = Alarm)" - vmax = 2 - else: - # Two-color colormap: gray, green - colors = [COLOR_ABSENT, COLOR_PRESENT] - title = "Track Activity Heatmap\n(Green = Track Present, Gray = Track Absent)" - vmax = 1 - - cmap = plt.matplotlib.colors.ListedColormap(colors) - - im = ax.imshow( - combined_matrix, - cmap=cmap, - aspect="auto", - interpolation="nearest", - vmin=0, - vmax=vmax, + # Create the imshow plot with appropriate colormap settings and get title + tick info + im, title, tick_positions, tick_labels = _create_heatmap_imshow( + ax, combined_matrix, show_alarm_colors ) ax.set_xlabel("Time (Frames with Observations)") ax.set_ylabel("Track ID") ax.set_title(title) - return ax, im + return ax, im, tick_positions, tick_labels @dataclass class HeatmapData: # pylint: disable=too-many-instance-attributes """Container for processed heatmap data and statistics.""" - frames: List[Frame] - sorted_track_ids: List[str] + track_data: TrackData heatmap_matrix: np.ndarray alarm_matrix: Optional[np.ndarray] alarm_tracks: Set[str] @@ -545,8 +759,7 @@ class HeatmapData: # pylint: disable=too-many-instance-attributes def process_heatmap_data( - frames: List[Frame], - all_track_ids: Set[str], + track_data: TrackData, alarm_threshold: float = float("inf"), ) -> Optional[HeatmapData]: """ @@ -558,41 +771,49 @@ def process_heatmap_data( 3. Statistics: Activity percentages and alarm counts Args: - frames: List of Frame objects with timestamps and detections - all_track_ids: Set of all unique track IDs found in the data + track_data: TrackData object containing frames and track information alarm_threshold: Time threshold in seconds for alarm calculation (default: inf = no alarms) Returns: HeatmapData object containing processed matrices and statistics, or None if no data """ - if not frames: + if not track_data.frames: return None - if not all_track_ids: + if not track_data.all_track_ids: return None - sorted_track_ids = sorted(list(all_track_ids)) + sorted_track_ids = sorted(track_data.all_track_ids) num_tracks = len(sorted_track_ids) - num_frames = len(frames) + num_frames = len(track_data.frames) - heatmap_matrix = _create_heatmap_matrix(frames, sorted_track_ids) + heatmap_matrix = _create_heatmap_matrix(track_data.frames, sorted_track_ids) # Only create alarm matrix if user requested alarm calculation alarm_matrix = None alarm_tracks = set() if alarm_threshold != float("inf"): - alarm_matrix = _create_alarm_matrix(frames, sorted_track_ids, alarm_threshold) + alarm_matrix = _create_alarm_matrix( + track_data.frames, sorted_track_ids, alarm_threshold + ) # Find tracks that have at least one alarm for track_idx, track_id in enumerate(sorted_track_ids): if np.any(alarm_matrix[track_idx, :] > 0): alarm_tracks.add(track_id) - # Print alarm tracks to stdout for Telegraf comparison + # Print alarm tracks to stdout for Telegraf comparison with class info and observation count if alarm_tracks: print(f"\nTracks with alarms (>= {alarm_threshold}s):") for track_id in sorted(alarm_tracks): + class_type = track_data.track_class_map.get(track_id, "Unknown") + # Count alarm occurrences for this track + track_idx = sorted_track_ids.index(track_id) + alarm_count = int(np.sum(alarm_matrix[track_idx, :] > 0)) + # Print track ID on its own line print(f" {track_id}") + # Print additional info on next line + print(f" Class: {class_type}, Alarms: {alarm_count}") else: print(f"\nNo tracks exceeded alarm threshold of {alarm_threshold}s") @@ -603,8 +824,7 @@ def process_heatmap_data( ) return HeatmapData( - frames=frames, - sorted_track_ids=sorted_track_ids, + track_data=track_data, heatmap_matrix=heatmap_matrix, alarm_matrix=alarm_matrix, alarm_tracks=alarm_tracks, @@ -616,42 +836,110 @@ def process_heatmap_data( ) -def render_heatmap(heatmap_data: HeatmapData) -> None: +def _format_track_labels_for_yaxis( + track_ids: List[str], track_class_map: Dict[str, str] +) -> List[str]: + """ + Format track IDs with shortened class names for y-axis labels. + + Args: + track_ids: List of track IDs to format + track_class_map: Dictionary mapping track IDs to class names + + Returns: + List of formatted track labels in "track_id (class)" format + + Examples: + >>> track_ids = ["track_001", "track_002", "track_003"] + >>> class_map = {"track_001": "Human", "track_002": "Vehicle", "track_003": "Unknown"} + >>> _format_track_labels_for_yaxis(track_ids, class_map) + ['track_001 (Huma.)', 'track_002 (Vehi.)', 'track_003 (Unkn.)'] + + >>> _format_track_labels_for_yaxis(["track_001"], {"track_001": "Cat"}) + ['track_001 (Cat)'] + + >>> _format_track_labels_for_yaxis(["track_001"], {}) + ['track_001 (Unkn.)'] + """ + y_labels = [] + for track_id in track_ids: + class_type = track_class_map.get(track_id, "Unknown") + if len(class_type) > 4: + class_short = class_type[:4] + "." + else: + class_short = class_type + y_labels.append(f"{track_id} ({class_short})") + return y_labels + + +def _format_timestamps_for_xaxis(frames: List[Frame], x_ticks: range) -> List[str]: + """ + Format timestamps from frames to show just time (HH:MM:SS) for x-axis labels. + + Args: + frames: List of Frame objects with timestamp data + x_ticks: Range of frame indices to format + + Returns: + List of formatted time strings in HH:MM:SS format + + Examples: + >>> from datetime import datetime + >>> frames = [ + ... Frame(1, "2024-01-01T10:30:00.123Z", []), + ... Frame(2, "2024-01-01T10:31:00.456Z", []), + ... Frame(3, "2024-01-01T10:32:00.789Z", []) + ... ] + >>> _format_timestamps_for_xaxis(frames, range(0, 3)) + ['10:30:00', '10:31:00', '10:32:00'] + + >>> _format_timestamps_for_xaxis(frames, range(0, 3, 2)) + ['10:30:00', '10:32:00'] + + >>> _format_timestamps_for_xaxis(frames, range(1, 2)) + ['10:31:00'] + """ + x_labels = [] + for i in x_ticks: + timestamp_str = frames[i].timestamp + # Parse ISO timestamp and format as HH:MM:SS + dt = datetime.fromisoformat(timestamp_str.replace("Z", "+00:00")) + x_labels.append(dt.strftime("%H:%M:%S")) + return x_labels + + +def render_heatmap( + heatmap_data: HeatmapData, +) -> None: """ Render the heatmap visualization using matplotlib. Args: heatmap_data: Processed heatmap data and statistics """ - # Set up the plot - if heatmap_data.alarm_matrix is not None: - ax, im = _setup_alarm_heatmap_plot( - heatmap_data.heatmap_matrix, - heatmap_data.num_tracks, - heatmap_data.num_frames, - heatmap_data.alarm_matrix, - ) - else: - ax, im = _setup_alarm_heatmap_plot( - heatmap_data.heatmap_matrix, - heatmap_data.num_tracks, - heatmap_data.num_frames, - ) + # Set up heatmap image the plot + ax, im, tick_positions, tick_labels = _setup_heatmap_plot( + heatmap_data.heatmap_matrix, + heatmap_data.num_tracks, + heatmap_data.num_frames, + heatmap_data.alarm_matrix, + ) - # Set y-axis labels (track IDs) + # Set y-axis labels (track IDs with class information) ax.set_yticks(range(heatmap_data.num_tracks)) - ax.set_yticklabels(heatmap_data.sorted_track_ids) + sorted_track_ids = sorted(heatmap_data.track_data.all_track_ids) + y_labels = _format_track_labels_for_yaxis( + sorted_track_ids, heatmap_data.track_data.track_class_map + ) + ax.set_yticklabels(y_labels) + + ax.tick_params(axis="y", labelsize=9) # Smaller font size for better fit + plt.setp(ax.get_yticklabels(), ha="right") # Right-align labels # Set x-axis labels (timestamps) step = max(1, heatmap_data.num_frames // 20) # Show ~20 labels max x_ticks = range(0, heatmap_data.num_frames, step) - # Format timestamps to show just time (HH:MM:SS) - x_labels = [] - for i in x_ticks: - timestamp_str = heatmap_data.frames[i].timestamp - # Parse ISO timestamp and format as HH:MM:SS - dt = datetime.fromisoformat(timestamp_str.replace("Z", "+00:00")) - x_labels.append(dt.strftime("%H:%M:%S")) + x_labels = _format_timestamps_for_xaxis(heatmap_data.track_data.frames, x_ticks) ax.set_xticks(x_ticks) ax.set_xticklabels(x_labels, rotation=45) @@ -660,26 +948,20 @@ def render_heatmap(heatmap_data: HeatmapData) -> None: ax.set_yticks(np.arange(-0.5, heatmap_data.num_tracks, 1), minor=True) ax.grid(which="minor", color="white", linestyle="-", linewidth=0.5) - # Add colorbar legend + # Add colorbar legend using tick information from setup function cbar = plt.colorbar(im, ax=ax, shrink=0.6) - if heatmap_data.alarm_threshold != float("inf"): - cbar.set_ticks([0.33, 1.0, 1.67]) - cbar.set_ticklabels(["Absent", "Present", "Alarm"]) - else: - cbar.set_ticks([0.25, 0.75]) - cbar.set_ticklabels(["Absent", "Present"]) + cbar.set_ticks(tick_positions) + cbar.set_ticklabels(tick_labels) # Render statistics text overlay - alarm_count = len(heatmap_data.alarm_tracks) - alarm_stats = ( - f" | Alarms: {alarm_count}" - if heatmap_data.alarm_threshold != float("inf") - else "" - ) - stats_text = ( f"Tracks: {heatmap_data.num_tracks} | Frames: {heatmap_data.num_frames} | " - f"Activity: {heatmap_data.activity_percentage:.1f}%{alarm_stats}" + f"Activity: {heatmap_data.activity_percentage:.1f}%" + + ( + f" | Alarms: {len(heatmap_data.alarm_tracks)}" + if heatmap_data.alarm_threshold != float("inf") + else "" + ) ) ax.text( 0.02, @@ -691,7 +973,8 @@ def render_heatmap(heatmap_data: HeatmapData) -> None: fontsize=10, ) - plt.tight_layout() + # Adjust layout to ensure Y-axis labels are fully visible with more padding + plt.subplots_adjust(left=0.15, right=0.85, top=0.92, bottom=0.15) plt.show() @@ -708,7 +991,8 @@ def render_heatmap(heatmap_data: HeatmapData) -> None: "-a", type=float, default=float("inf"), - help="Time threshold in seconds for alarm visualization (tracks exceeding this show in red).", + help="Time threshold in seconds for alarm visualization " + "(tracks exceeding this show in red).", ) @click.option( "--no-ui", @@ -763,7 +1047,7 @@ def main(input_file: str, verbose: bool, alarm_threshold: float, no_ui: bool): click.echo(f" Track IDs: {', '.join(sorted(all_track_ids))}") # Process the heatmap data - heatmap_data = process_heatmap_data(frames, all_track_ids, alarm_threshold) + heatmap_data = process_heatmap_data(track_data, alarm_threshold) if heatmap_data is None: click.echo("No data available for visualization.") From a8383241e75bbc2033d21fbc882ab550210e07ab Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Wed, 20 Aug 2025 12:20:17 +0200 Subject: [PATCH 17/42] README updates --- .../.images/camera-detections-config.png | Bin 0 -> 169632 bytes .../.images/camera-detections.png | Bin 0 -> 373574 bytes project-time-in-area-analytics/README.md | 53 ++++++++++++++++-- 3 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 project-time-in-area-analytics/.images/camera-detections-config.png create mode 100644 project-time-in-area-analytics/.images/camera-detections.png diff --git a/project-time-in-area-analytics/.images/camera-detections-config.png b/project-time-in-area-analytics/.images/camera-detections-config.png new file mode 100644 index 0000000000000000000000000000000000000000..fc2d15a62400d84fc342d844047c84c417a13552 GIT binary patch literal 169632 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⪻DYzA{U{Qn0+&siz_DBq4wB?08ZIccf9d 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 literal 0 HcmV?d00001 diff --git a/project-time-in-area-analytics/.images/camera-detections.png b/project-time-in-area-analytics/.images/camera-detections.png new file mode 100644 index 0000000000000000000000000000000000000000..357880f350ef8d9746983b25931d1588f524751b GIT binary patch literal 373574 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
Gsh4xbWxVJgmOmLVZ;=)PyM;`Pz8=a@$=^z; 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%0DC?r{Aup2z2gS$ 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 `Metadata visualization` page and verify that there are actual detections. + +#### Verbose Logging + Enable the `Debug` option in the FixedIT Data Agent for detailed logs. Debug files will appear in the `Uploaded helper files` section (refresh page to see updates). **Note**: Don't leave debug enabled long-term as it creates large log files. +#### Gradual Testing + +You can test the logic gradually in the camera by adding more and more complexity: + +1. **Basic Detection**: Upload `config_input_scene_detections.conf`, `axis_scene_detection_consumer.sh` and `config_output_stdout.conf` to see if the camera is sending out detection messages + + ![Camera Detections Configuration](.images/camera-detections-config.png) + _Configuration files uploaded to the camera_ + + ![Camera Detections Log](.images/camera-detections.png) + _Log messages showing detection data from the camera_ + +2. **Time Calculation**: Upload `config_process_track_duration.conf` and `track_duration_calculator.star` to see if the time in area is calculated correctly +3. **Threshold Filtering**: Upload `config_process_threshold_filter.conf` to see if the threshold filter is working correctly + +#### Common Error Messages + +- **Unresolved variable error**: If you see an error like this: + + ``` + [2025-08-20 11:43:40] 2025-08-20T09:43:40Z E! [telegraf] Error running agent: could not initialize processor processors.starlark: :6:23: unexpected input character '$' + ``` + + It usually means an environment variable (like `ALERT_THRESHOLD_SECONDS`) is not set correctly as an `Extra Env` variable. + ## Configuration Files This project uses several configuration files that work together to create a time-in-area analytics pipeline: @@ -111,6 +150,7 @@ Configuration and script pair that work together to consume real-time object det Can also be used for reproducible testing on host systems by setting `CONSUMER_SCRIPT="test_files/sample_data_feeder.sh"` to use a file reader that simulates the camera's detection data output. This allows you to test the processing pipeline using pre-recorded sample data without needing live camera hardware. **Environment Variables:** + - `HELPER_FILES_DIR`: Directory containing project files (required) - `CONSUMER_SCRIPT`: Path to consumer script (defaults to `axis_scene_detection_consumer.sh`) - `SAMPLE_FILE`: Path to sample data file (required when using `sample_data_feeder.sh`) @@ -193,6 +233,7 @@ telegraf --config config_input_scene_detections.conf \ All detections with `time_in_area_seconds` field. Example output: + ```json { "fields": { @@ -207,7 +248,7 @@ Example output: "time_in_area_seconds": 1.67 }, "name": "detection_frame", - "tags": {"host": "test-host"}, + "tags": { "host": "test-host" }, "timestamp": 1755677033 } ``` From 60d8d2092700971285c36a6a513857e8011c69d1 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Fri, 22 Aug 2025 19:51:03 +0200 Subject: [PATCH 18/42] WIP: Working overlay --- .gitignore | 4 +- project-time-in-area-analytics/README.md | 59 +++++ .../config_output_overlay.conf | 60 +++++ .../config_process_overlay_transform.conf | 67 +++++ .../overlay_manager.sh | 243 ++++++++++++++++++ .../test_files/config_input_overlay_test.conf | 20 ++ 6 files changed, 452 insertions(+), 1 deletion(-) create mode 100644 project-time-in-area-analytics/config_output_overlay.conf create mode 100644 project-time-in-area-analytics/config_process_overlay_transform.conf create mode 100755 project-time-in-area-analytics/overlay_manager.sh create mode 100644 project-time-in-area-analytics/test_files/config_input_overlay_test.conf diff --git a/.gitignore b/.gitignore index ca153d5..3561170 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ env.* vars.* .env* -*.debug \ No newline at end of file +*.debug +*.log +__pycache__ diff --git a/project-time-in-area-analytics/README.md b/project-time-in-area-analytics/README.md index 3a62fc3..02754b0 100644 --- a/project-time-in-area-analytics/README.md +++ b/project-time-in-area-analytics/README.md @@ -73,6 +73,7 @@ flowchart TD - [Test Time in Area Calculation Only](#test-time-in-area-calculation-only) - [Test Complete Alert Pipeline](#test-complete-alert-pipeline) - [Test with Real Device Data](#test-with-real-device-data) + - [Test Overlay Functionality Only](#test-overlay-functionality-only) - [Analytics Data Structure](#analytics-data-structure) - [Data Format](#data-format) - [Data Behavior](#data-behavior) @@ -172,6 +173,20 @@ Filters detection frames based on the configured alert threshold. Only detection Outputs processed metrics to stdout in JSON format for testing and debugging. +### config_process_overlay_transform.conf + +Transforms analytics data into the format expected by the overlay manager (e.g. center coordinates in -1 ... 1 range and box size). + +### config_output_overlay.conf and overlay_manager.sh + +Displays text overlays on the video. This configuration: + +- Uses Telegraf's exec output plugin to trigger the `overlay_manager.sh` script +- Shows overlay text at the center of detected objects using the VAPIX overlay API +- Displays time in area, object class, and size information +- Positions overlays using pre-calculated coordinates from the Starlark processor +- Automatically removes overlays after 1 second for clean video display + ### test_files/sample_data_feeder.sh Helper script that simulates camera metadata stream by reading sample JSON files line by line. This script is used for host testing to simulate the output of the live camera's message broker without requiring actual camera hardware. @@ -207,6 +222,7 @@ You can test the processing logic locally using Telegraf before deploying to you **Only works in the Axis Device:** - Real object detection metadata consumption (camera-specific message broker) - in host testing, you can use the `sample_data_feeder.sh` script to simulate the camera metadata stream using pre-recorded data in the `test_files/simple_tracks.jsonl` or `test_files/real_device_data.jsonl` files. +- The VAPIX overlay API requires direct access to the Axis device and cannot be tested on host systems. ### Test Commands @@ -298,12 +314,51 @@ telegraf --config config_input_scene_detections.conf \ **How it works:** We set `CONSUMER_SCRIPT="test_files/sample_data_feeder.sh"` to use a file reader that simulates the camera's message broker output. This allows us to test on the host using pre-recorded real device data instead of connecting to the live camera infrastructure. The `real_device_data.jsonl` file contains actual analytics scene description data recorded from an Axis device, providing realistic testing with real track IDs, timestamps, and object detection patterns. +#### Test Overlay Functionality Only + +Test just the overlay functionality with a single detection from a static file. To run this, you need to have access to an Axis device which will show the overlay on the video. + +```bash +# Set up camera info +export VAPIX_USERNAME="your-username" +export VAPIX_PASSWORD="your-password" +export VAPIX_IP="your-device-ip" + +# Set up test environment for overlay testing only +export HELPER_FILES_DIR="$(pwd)" +export SAMPLE_FILE="test_files/single_overlay_test.jsonl" +export TELEGRAF_DEBUG="true" + +# Test overlay functionality with single detection +telegraf --config test_files/config_input_overlay_test.conf --config config_process_overlay_transform.conf --config config_output_overlay.conf --once +``` + +**How it works:** +1. `config_input_overlay_test.conf` reads a single detection from `single_overlay_test.jsonl` +2. `config_process_overlay_transform.conf` transforms coordinates and standardizes fields +3. `config_output_overlay.conf` receives the transformed data and executes the overlay manager +4. Creates an overlay on the video showing the object information +5. Removes the overlay after 1 second + +**Expected Result:** A red text overlay will appear on the video showing: +``` +← ID: overlay_test_001 +Class: Human +Time: 45.2sec +Size: 1.00% +``` + +The overlay text will appear at 25% from the left of the video and vertically centered. + ## Analytics Data Structure The analytics scene description data follows a specific format and behavior: ### Data Format +The analytics data goes through three formats: + +#### Raw Analytics Data (from camera) Each line contains a JSON object with this structure: ```json @@ -380,6 +435,10 @@ This transformation: - **Simplifies** object classification to just the type - **Skips** frames with no observations entirely +### Data Transformation for Overlay + +The overlay manager transforms coordinates from the analytics system (0.0 to 1.0) to the VAPIX API system (-1.0 to 1.0) and formats the object data for display. Note that the coordinate for the text indicates the top-left corner of the text box. + ## Recording Real Device Data You can record real analytics scene description data from your Axis camera for deterministic testing and analysis. This allows you to run the analytics pipeline on your host machine with reproducible results. diff --git a/project-time-in-area-analytics/config_output_overlay.conf b/project-time-in-area-analytics/config_output_overlay.conf new file mode 100644 index 0000000..5df1945 --- /dev/null +++ b/project-time-in-area-analytics/config_output_overlay.conf @@ -0,0 +1,60 @@ +# Axis Overlay Output Configuration +# +# This configuration uses Telegraf's exec output plugin to trigger the +# overlay_manager.sh script whenever objects exceed the time-in-area threshold. +# +# Key Features: +# - Executes shell script for each overlay event +# - Immediate execution with no batching for real-time response +# - JSON data format for structured communication with script +# - Timeout protection for API call sequences +# - Exec plugin runs external commands with metric data as stdin +# - Script receives JSON with overlay information including coordinates, class, and time +# +# Environment Variables Required: +# - HELPER_FILES_DIR: Directory containing overlay_manager.sh script (set automatically by the FixedIt Data Agent) +# - VAPIX_USERNAME: Axis device username +# - VAPIX_PASSWORD: Axis device password +# - VAPIX_IP: IP address of the Axis device, should be 127.0.0.1 when running in the FixedIT Data Agent on an Axis device. + +[[outputs.exec]] + # Filter to process only overlay metrics from the Starlark processor + # This ensures the script only runs when overlay data is ready + namepass = ["overlay_metric"] + + # Shell script command to execute for each overlay event + # The script receives JSON data via stdin and controls the overlay display + # HELPER_FILES_DIR should point to the directory containing the script, + # which is set automatically by the FixedIt Data Agent to the directory where + # helper files are uploaded. + command = ["${HELPER_FILES_DIR}/overlay_manager.sh"] + + # Data format sent to the script via stdin + # JSON format provides structured data that the script can parse easily + # Format: {"fields":{"track_id":"123","time_in_area_seconds":45.2,"class":"Human",...},"name":"detection_frame",...} + data_format = "json" + + # Disable batch format to send individual metrics to the script. + # When false: sends single metric JSON object per execution. + # When true: would send array of metrics (not needed for this use case). + use_batch_format = false + + # Immediate execution settings for real-time response. + # These settings minimize delay between threshold detection and overlay display. + + # Process one metric at a time for immediate response. + # This ensures each overlay event triggers script execution immediately. + # Higher values would batch multiple changes (undesirable for visual feedback). + metric_batch_size = 1 + + # Minimal buffer size. 2*metric_batch_size is the minimum value allowed in the + # configuration according to the documentation. + metric_buffer_limit = 2 + + # Script execution timeout to prevent hanging. + # The script makes VAPIX API calls to manage overlays. + # 15 seconds allows sufficient time for network round trips and error handling. + # Increase if experiencing timeout issues on slow networks. + # Setting this makes the application more robust since it can recover from + # a hanging script. + timeout = "15s" diff --git a/project-time-in-area-analytics/config_process_overlay_transform.conf b/project-time-in-area-analytics/config_process_overlay_transform.conf new file mode 100644 index 0000000..da97984 --- /dev/null +++ b/project-time-in-area-analytics/config_process_overlay_transform.conf @@ -0,0 +1,67 @@ +# Overlay Data Transformation Processor +# +# This processor transforms analytics detection data into the format expected +# by the overlay_manager.sh script, including coordinate transformation and +# field formatting. + +[[processors.starlark]] + # Source code for the transformation logic + source = ''' +def apply(metric): + # Only process detection frames + if metric.name != "detection_frame": + return metric + + # Extract bounding box coordinates (flat format from device) + if ("bounding_box_left" in metric.fields and + "bounding_box_right" in metric.fields and + "bounding_box_top" in metric.fields and + "bounding_box_bottom" in metric.fields): + + left = metric.fields["bounding_box_left"] + right = metric.fields["bounding_box_right"] + top = metric.fields["bounding_box_top"] + bottom = metric.fields["bounding_box_bottom"] + + # Calculate center coordinates in analytics system (0.0 to 1.0) + center_x = (left + right) / 2.0 + center_y = (top + bottom) / 2.0 + + # Transform to VAPIX API coordinate system (-1.0 to 1.0) + # Formula: vapix_coord = (analytics_coord - 0.5) * 2 + vapix_x = (center_x - 0.5) * 2.0 + vapix_y = (center_y - 0.5) * 2.0 + + # Calculate object size (width * height) + width = right - left + height = bottom - top + size = width * height + + # Create new overlay metric with transformed data + overlay_metric = Metric("overlay_metric") + + # Set transformed coordinates and size + overlay_metric.fields["center_x"] = vapix_x + overlay_metric.fields["center_y"] = vapix_y + overlay_metric.fields["size"] = size + + # Ensure required fields exist with proper names + if "object_type" in metric.fields: + overlay_metric.fields["object_type"] = metric.fields["object_type"] + + if "track_id" in metric.fields: + overlay_metric.fields["track_id"] = metric.fields["track_id"] + + if "time_in_area_seconds" in metric.fields: + overlay_metric.fields["time_in_area_seconds"] = metric.fields["time_in_area_seconds"] + + # Add timestamp for overlay positioning + if "timestamp" in metric.fields: + overlay_metric.fields["timestamp"] = metric.fields["timestamp"] + + # Return both original and new overlay metric + return [metric, overlay_metric] + + # If no bounding box, drop the metric (can't create overlay without position) + return [] +''' diff --git a/project-time-in-area-analytics/overlay_manager.sh b/project-time-in-area-analytics/overlay_manager.sh new file mode 100755 index 0000000..2f0dec0 --- /dev/null +++ b/project-time-in-area-analytics/overlay_manager.sh @@ -0,0 +1,243 @@ +#!/bin/sh + +# Axis Overlay Manager Script +# +# This script manages text overlays on Axis cameras based on time-in-area analytics. +# It receives detection metrics from Telegraf and displays overlay text showing +# object information when objects exceed the configured threshold. +# +# Key Features: +# - Receives detection metrics via JSON from Telegraf exec output plugin +# - Manages overlays for objects that exceed time-in-area threshold +# - Shows only one object at a time (most recent detection) +# - Displays time in area, object class, and size information +# - Positions overlay at the center of the detected object +# - Provides comprehensive error handling and validation +# +# Environment Variables Required: +# - VAPIX_USERNAME: Device username +# - VAPIX_PASSWORD: Device password +# - VAPIX_IP: IP address of the Axis device (defaults to 127.0.0.1 for localhost) +# - TELEGRAF_DEBUG: Enable debug logging when set to "true" +# - HELPER_FILES_DIR: Directory for debug log files +# +# Error Codes: +# - 10: Missing required environment variables +# - 11: Empty input received from stdin +# - 12: Invalid JSON input or missing required fields +# - 13: VAPIX API call failed +# - 14: Overlay management error + +# Set default VAPIX_IP to localhost if not specified +VAPIX_IP="${VAPIX_IP:-127.0.0.1}" + +# Validate required environment variables for VAPIX API access +if [ -z "$VAPIX_USERNAME" ] || [ -z "$VAPIX_PASSWORD" ]; then + printf "Error: VAPIX_USERNAME and VAPIX_PASSWORD must be set\n" >&2 + exit 10 +fi + +# Debug mode - use TELEGRAF_DEBUG environment variable +DEBUG="${TELEGRAF_DEBUG:-false}" + +# Function to log debug messages to a file +debug_log_file() { + if [ "$DEBUG" = "true" ]; then + echo "DEBUG: $1" >> "${HELPER_FILES_DIR}/overlay_manager.debug" 2>/dev/null || true + fi +} + +debug_log_file "Starting overlay_manager.sh script" +debug_log_file "Environment variables - VAPIX_USERNAME: $VAPIX_USERNAME, VAPIX_IP: $VAPIX_IP, DEBUG: $DEBUG" + +# Read JSON input from Telegraf via stdin +# Expected format: {"fields":{"track_id":"123","time_in_area_seconds":45.2,"class":"Human",...},"name":"detection_frame",...} +json_input=$(cat) + +debug_log_file "Received JSON input: $json_input" + +# Validate that we received input data +if [ -z "$json_input" ]; then + debug_log_file "ERROR: Empty input received from Telegraf" + printf "Error: Empty input received from Telegraf\n" >&2 + exit 11 +fi + +# Extract required fields from JSON using jq +track_id=$(echo "$json_input" | jq -r '.fields.track_id // empty') +time_in_area=$(echo "$json_input" | jq -r '.fields.time_in_area_seconds // empty') +object_class=$(echo "$json_input" | jq -r '.fields.object_type // empty') + +# Extract pre-calculated coordinates from Starlark processor +center_x=$(echo "$json_input" | jq -r '.fields.center_x // empty') +center_y=$(echo "$json_input" | jq -r '.fields.center_y // empty') +size=$(echo "$json_input" | jq -r '.fields.size // empty') + +debug_log_file "Extracted fields - track_id: $track_id, time_in_area: $time_in_area, class: $object_class" + +# Validate required fields +if [ -z "$track_id" ] || [ "$track_id" = "null" ] || \ + [ -z "$time_in_area" ] || [ "$time_in_area" = "null" ] || \ + [ -z "$object_class" ] || [ "$object_class" = "null" ]; then + debug_log_file "ERROR: Missing required fields in JSON input" + printf "Error: Missing required fields in JSON input\n" >&2 + printf "Required: track_id, time_in_area_seconds, class\n" >&2 + printf "Received: track_id='%s', time_in_area='%s', class='%s'\n" "$track_id" "$time_in_area" "$object_class" >&2 + exit 12 +fi + +# Use pre-calculated coordinates from Starlark processor +if [ -n "$center_x" ] && [ "$center_x" != "null" ] && \ + [ -n "$center_y" ] && [ "$center_y" != "null" ] && \ + [ -n "$size" ] && [ "$size" != "null" ]; then + + debug_log_file "Using pre-calculated coordinates - center: ($center_x, $center_y), size: $size" +else + # Fallback to center of screen if no coordinates provided + # Center of screen in VAPIX coordinates is (0.0, 0.0) + center_x="0.0" + center_y="0.0" + size="0.01" + debug_log_file "No coordinates provided, using center coordinates - center_x: $center_x, center_y: $center_y" +fi + +# Format time in area for display +# Use bc for floating point comparison +if [ "$(echo "$time_in_area > 60" | bc -l 2>/dev/null || echo "0")" -eq 1 ]; then + time_display=$(echo "scale=1; $time_in_area / 60" | bc -l 2>/dev/null || echo "$time_in_area") + time_unit="min" +else + time_display=$(echo "scale=0; $time_in_area" | bc -l 2>/dev/null || echo "$time_in_area") + time_unit="sec" +fi + +# Format size for display (convert to percentage) +size_percent=$(echo "scale=1; $size * 100" | bc -l 2>/dev/null || echo "1.0") + +# Create overlay text with arrow pointing to the object +# Each piece of information on its own line for better readability +overlay_text="← ID: $track_id +Class: $object_class +Time: ${time_display}${time_unit} +Size: ${size_percent}%" + +debug_log_file "Overlay text: $overlay_text" + +# Function to control overlays via VAPIX API +control_overlay() { + action=$1 # Action to perform (addText, setText, remove) + overlay_id=$2 # Overlay ID (for setText and remove) + text=$3 # Text content (for addText and setText) + x=$4 # X coordinate + y=$5 # Y coordinate + + debug_log_file "Making VAPIX API call - Action: $action, ID: $overlay_id, Text: $text, Pos: ($x, $y)" + + case $action in + "addText") + # Add new text overlay + # Escape the text properly for JSON and preserve newlines + escaped_text=$(echo "$text" | sed 's/"/\\"/g' | sed 's/$/\\n/' | tr -d '\n') + + # Create the JSON payload + json_payload="{\"apiVersion\":\"1.8\",\"method\":\"addText\",\"context\":\"overlay_${track_id}\",\"params\":{\"camera\":1,\"text\":\"$escaped_text\",\"textColor\":\"red\",\"fontSize\":32,\"position\":[$x,$y]}}" + + debug_log_file "Sending JSON payload: $json_payload" + + api_response=$(curl --silent --fail --digest --user "${VAPIX_USERNAME}:${VAPIX_PASSWORD}" \ + "http://${VAPIX_IP}/axis-cgi/dynamicoverlay/dynamicoverlay.cgi" \ + -X POST \ + -H "Content-Type: application/json" \ + -d "$json_payload" 2>&1) + ;; + "setText") + # Update existing text overlay + api_response=$(curl --silent --fail --digest --user "${VAPIX_USERNAME}:${VAPIX_PASSWORD}" \ + "http://${VAPIX_IP}/axis-cgi/dynamicoverlay/dynamicoverlay.cgi" \ + -X POST \ + -H "Content-Type: application/json" \ + -d "{ + \"apiVersion\": \"1.8\", + \"method\": \"setText\", + \"context\": \"overlay_update_${track_id}\", + \"params\": { + \"identity\": $overlay_id, + \"text\": \"$text\", + \"customPosition\": { + \"x\": $x, + \"y\": $y + } + } + }" 2>&1) + ;; + "remove") + # Remove overlay + api_response=$(curl --silent --fail --digest --user "${VAPIX_USERNAME}:${VAPIX_PASSWORD}" \ + "http://${VAPIX_IP}/axis-cgi/dynamicoverlay/dynamicoverlay.cgi" \ + -X POST \ + -H "Content-Type: application/json" \ + -d "{ + \"apiVersion\": \"1.8\", + \"method\": \"remove\", + \"context\": \"overlay_remove_${track_id}\", + \"params\": { + \"identity\": $overlay_id + } + }" 2>&1) + ;; + esac + + api_exit=$? + debug_log_file "API call exit code: $api_exit" + debug_log_file "API response: $api_response" + + if [ $api_exit -ne 0 ]; then + debug_log_file "ERROR: VAPIX API call failed - Action: $action (exit code: $api_exit)" + printf "Failed to %s overlay\n" "$action" >&2 + return 1 + fi + + # Check if response contains an error + if echo "$api_response" | grep -q '"error"'; then + debug_log_file "ERROR: VAPIX API returned error - Action: $action" + debug_log_file "ERROR: Response: $api_response" + printf "Failed to %s overlay\n" "$action" >&2 + return 1 + else + debug_log_file "VAPIX API call successful - Action: $action" + return 0 + fi +} + +# Add new overlay for current detection +debug_log_file "Adding new overlay for track: $track_id" +if control_overlay "addText" "" "$overlay_text" "$center_x" "$center_y"; then + # Extract the overlay identity from the response + overlay_identity=$(echo "$api_response" | jq -r '.data.identity // empty' 2>/dev/null) + + if [ -n "$overlay_identity" ] && [ "$overlay_identity" != "null" ]; then + debug_log_file "Overlay added successfully for track: $track_id with identity: $overlay_identity" + printf "Overlay added for track %s at position (%.3f, %.3f)\n" "$track_id" "$center_x" "$center_y" + + # Schedule automatic removal after 1 second + ( + sleep 1 + debug_log_file "Auto-removing overlay for track: $track_id (ID: $overlay_identity)" + control_overlay "remove" "$overlay_identity" "" 0 0 + if [ $? -eq 0 ]; then + debug_log_file "Auto-removal successful for track: $track_id (ID: $overlay_identity)" + else + debug_log_file "Auto-removal failed for track: $track_id (ID: $overlay_identity)" + fi + ) & + else + debug_log_file "Overlay added but could not extract identity from response" + printf "Overlay added for track %s at position (%.3f, %.3f)\n" "$track_id" "$center_x" "$center_y" + fi +else + debug_log_file "ERROR: Failed to add overlay for track: $track_id" + printf "Failed to add overlay for track %s\n" "$track_id" >&2 + exit 14 +fi + +debug_log_file "Script completed successfully for track: $track_id" diff --git a/project-time-in-area-analytics/test_files/config_input_overlay_test.conf b/project-time-in-area-analytics/test_files/config_input_overlay_test.conf new file mode 100644 index 0000000..4706747 --- /dev/null +++ b/project-time-in-area-analytics/test_files/config_input_overlay_test.conf @@ -0,0 +1,20 @@ +# Test Configuration for Overlay Input Only +# +# This configuration provides test data input for the overlay system. +# It reads from a static file and outputs to the same overlay configuration +# used in production, ensuring test and production use identical logic. + +[agent] + interval = "1s" + flush_interval = "1s" + +# Input: Single detection from test file +[[inputs.file]] + files = ["${HELPER_FILES_DIR}/${SAMPLE_FILE}"] + data_format = "json" + name_override = "detection_frame" + # String fields that should be preserved as strings during JSON parsing + json_string_fields = ["timestamp", "track_id", "object_type", "frame"] + +# Output: Use the same overlay configuration as production +# This ensures test and production use identical overlay logic From 677efb85bf3cfe5e91b7d6e67e699166051385da Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Mon, 13 Oct 2025 18:43:44 +0200 Subject: [PATCH 19/42] Fixes for overlay --- .coderabbit.yaml | 16 + project-time-in-area-analytics/README.md | 191 +++++--- .../config_process_rate_limit.conf | 29 ++ .../overlay_manager.sh | 438 +++++++++++------- 4 files changed, 462 insertions(+), 212 deletions(-) create mode 100644 project-time-in-area-analytics/config_process_rate_limit.conf diff --git a/.coderabbit.yaml b/.coderabbit.yaml index 551742e..c9d8efc 100644 --- a/.coderabbit.yaml +++ b/.coderabbit.yaml @@ -71,10 +71,26 @@ reviews: AXIS OS 9.80), it should be avoided unless the AXIS OS limitations are explicitly mentioned. If not using `local`, it can be good to use a function specific prefix for the variable names to avoid conflicts with other variables. + Clearly document in the head of the file which environment variables they expect and if they are optional or required. + It's normally good to use `set -eu` for stricter error handling, but `-o pipefail` is not supported in the Axis devices' shell. + + When an error occurs in a helper script that is used with the exec or execd plugin of + Telegraf, then the script should at minimum log an descriptive error message to stderr + and exit with a non-zero error code. The exit code should be unique enough to identify + the problem type and the error codes should be documented in the top of the script. + When errors are logged to stderr, Telegraf will only show the first line that was logged + followed by three dots. Therefore, a longer line might make more sense than multiple + shorter lines. The error logs should not end with a newline. + + It is also good if the script respects the `TELEGRAF_DEBUG` variable, and if this is set + to "true", then the script should log debug messages to a file in the `HELPER_FILES_DIR` + with the .debug suffix. This log can be more verbose and make use of multiple lines. + When TELEGRAF_DEBUG is not set, logging to file should not be enabled since it can fill + the flash storage or wear out the storage chip. - path: "**/*.md" instructions: >- Documentation files should clearly communicate the dual audience: (1) server-side diff --git a/project-time-in-area-analytics/README.md b/project-time-in-area-analytics/README.md index 02754b0..ae33d82 100644 --- a/project-time-in-area-analytics/README.md +++ b/project-time-in-area-analytics/README.md @@ -8,39 +8,65 @@ The system consumes real-time object detection data from Axis fisheye cameras an ```mermaid flowchart TD - A["📹 Analytics Scene Description"] --> B["Filter by Area & Type (TODO)"] - X["Configuration variables"] --> B + A["📹 config_input_scene_detections.conf:
Consume analytics scene description from the camera using the inputs.execd plugin and axis_scene_detection_consumer.sh"] --> B["Filter by area & type (TODO)"] + X0["Configuration variables: HELPER_FILES_DIR"] --> A + X1["Configuration variables: TODO"] --> B B --> C1 - X --> C1 - subgraph TimeLogic ["Time-in-area Logic Details"] + subgraph TimeLogic ["config_process_track_duration.conf:
Time-in-area Logic Details"] C1{"First time seeing
this object ID?"} C1 -->|Yes| C2["Save first timestamp
object_id → now()"] --> C4 C1 -->|No| C3["Get saved timestamp"] C3 --> C4["Calculate time diff
now() - first_timestamp"] C4 --> C5["Append time in area
to metric"] - C2 --> CX["Persistent state"] + C2 --> CX["💾 Persistent state"] CX --> C3 end - C5 --> D["Filter for
time in area > ALERT_THRESHOLD_SECONDS"] - X --> D - - D --> E["🚨 MQTT Output
Alert messages"] - - style A fill:#e3f2fd - style B fill:#fff3e0 - style C1 fill:#e8f5e8 - style C2 fill:#fff8e1 - style C3 fill:#e8f5e8 - style C4 fill:#e8f5e8 - style C5 fill:#e8f5e8 - style CX fill:#fff8e1 - style D fill:#fff3e0 - style E fill:#ffebee + C5 --> D["config_process_threshold_filter.conf:
Filter for
time in area > ALERT_THRESHOLD_SECONDS"] + X2["Configuration variables: ALERT_THRESHOLD_SECONDS"] --> D + + D --> E["🚨 MQTT Output
Alert messages (TODO)"] + X3["Configuration variables: TODO"] --> E + + D --> E1["config_process_rate_limit.conf:
Rate limit to 1 message per second
using Starlark state"] + E1 --> F["config_process_overlay_transform.conf:
Recalculate coordinates for overlay visualization"] + F --> G["📺 config_output_overlay.conf:
Overlay Manager with the outputs.exec plugin and overlay_manager.sh"] + X4["Configuration variables:
VAPIX_USERNAME
VAPIX_PASSWORD
HELPER_FILES_DIR
VAPIX_IP
TELEGRAF_DEBUG
FONT_SIZE"] --> G + G --> H["📺 VAPIX Overlay API"] + + style A fill:#e8f5e9,stroke:#43a047 + style B fill:#f3e5f5,stroke:#8e24aa + style TimeLogic fill:#f3e5f5,stroke:#8e24aa + style C1 fill:#ffffff,stroke:#673ab7 + style C2 fill:#ffffff,stroke:#673ab7 + style C3 fill:#ffffff,stroke:#673ab7 + style C4 fill:#ffffff,stroke:#673ab7 + style C5 fill:#ffffff,stroke:#673ab7 + style CX fill:#fff3e0,stroke:#fb8c00 + style D fill:#f3e5f5,stroke:#8e24aa + style E fill:#ffebee,stroke:#e53935 + style E1 fill:#f3e5f5,stroke:#8e24aa + style F fill:#f3e5f5,stroke:#8e24aa + style G fill:#ffebee,stroke:#e53935 + style H fill:#ffebee,stroke:#e53935 + style X0 fill:#f5f5f5,stroke:#9e9e9e + style X1 fill:#f5f5f5,stroke:#9e9e9e + style X2 fill:#f5f5f5,stroke:#9e9e9e + style X3 fill:#f5f5f5,stroke:#9e9e9e + style X4 fill:#f5f5f5,stroke:#9e9e9e ``` +Color scheme: + +- Light green: Input nodes / data ingestion +- Purple: Processing nodes / data processing and logic +- Orange: Storage nodes / persistent data +- Red: Output nodes / notifications +- Light gray: Configuration data +- White: Logical operations + ## Why Choose This Approach? **No C/C++ development required!** This project demonstrates how to implement advanced analytics that would typically require custom ACAP development using the [FixedIT Data Agent](https://fixedit.ai/products-data-agent/) instead. Rather than writing complex embedded C++ code for fisheye camera analytics, system integrators and IT professionals can implement sophisticated time-in-area logic using familiar configuration files and simple scripting. The solution leverages existing object detection capabilities from AXIS Object Analytics and adds the missing time-in-area functionality through data processing pipelines, making it accessible to teams without embedded development expertise. @@ -58,11 +84,15 @@ flowchart TD - [Make sure AXIS Object Analytics is enabled](#make-sure-axis-object-analytics-is-enabled) - [Verbose Logging](#verbose-logging) - [Gradual Testing](#gradual-testing) - - [Common Error Messages](#common-error-messages) + - [Unresolved variable errors](#unresolved-variable-errors) + - ["Text area is too big!" in overlay](#text-area-is-too-big-in-overlay) - [Configuration Files](#configuration-files) - [config_input_scene_detections.conf and axis_scene_detection_consumer.sh](#config_input_scene_detectionsconf-and-axis_scene_detection_consumersh) - [config_process_track_duration.conf and track_duration_calculator.star](#config_process_track_durationconf-and-track_duration_calculatorstar) - [config_process_threshold_filter.conf](#config_process_threshold_filterconf) + - [config_process_rate_limit.conf](#config_process_rate_limitconf) + - [config_process_overlay_transform.conf](#config_process_overlay_transformconf) + - [config_output_overlay.conf and overlay_manager.sh](#config_output_overlayconf-and-overlay_managersh) - [test_files/config_output_stdout.conf](#test_filesconfig_output_stdoutconf) - [test_files/sample_data_feeder.sh](#test_filessample_data_feedersh) - [Future Enhancements](#future-enhancements) @@ -71,13 +101,14 @@ flowchart TD - [Host Testing Limitations](#host-testing-limitations) - [Test Commands](#test-commands) - [Test Time in Area Calculation Only](#test-time-in-area-calculation-only) - - [Test Complete Alert Pipeline](#test-complete-alert-pipeline) + - [Test Alert Pipeline](#test-alert-pipeline) + - [Test Alert Pipeline with Rate Limit](#test-alert-pipeline-with-rate-limit) - [Test with Real Device Data](#test-with-real-device-data) - [Test Overlay Functionality Only](#test-overlay-functionality-only) - [Analytics Data Structure](#analytics-data-structure) - - [Data Format](#data-format) - - [Data Behavior](#data-behavior) - - [Data Transformation for Telegraf](#data-transformation-for-telegraf) + - [Raw Analytics Data (from camera)](#raw-analytics-data-from-camera) + - [Data Transformed for Telegraf](#data-transformed-for-telegraf) + - [Data Transformed for Overlay](#data-transformed-for-overlay) - [Recording Real Device Data](#recording-real-device-data) - [Track Activity Visualization](#track-activity-visualization) - [Automated Testing](#automated-testing) @@ -103,6 +134,21 @@ flowchart TD ### TODO +Create a combined file by running: + +```bash +cat config_input_scene_detections.conf \ + config_process_track_duration.conf \ + config_process_threshold_filter.conf \ + config_process_rate_limit.conf \ + config_process_overlay_transform.conf \ + config_output_overlay.conf > combined.conf +``` + +Then upload `combined.conf` as a config file and `overlay_manager.sh`, `axis_scene_detection_consumer.sh` and `track_duration_calculator.star` as helper files. + +Set `Extra Env` to `ALERT_THRESHOLD_SECONDS=30` and set valid credentials in the parameters `Vapix username` and `Vapix password`. + ### Troubleshooting #### Make sure AXIS Object Analytics is enabled @@ -129,16 +175,22 @@ You can test the logic gradually in the camera by adding more and more complexit 2. **Time Calculation**: Upload `config_process_track_duration.conf` and `track_duration_calculator.star` to see if the time in area is calculated correctly 3. **Threshold Filtering**: Upload `config_process_threshold_filter.conf` to see if the threshold filter is working correctly +4. **Rate Limiting**: Upload `config_process_rate_limit.conf` to protect the overlay API from being overloaded +5. **Overlay Display**: Finally, upload `config_process_overlay_transform.conf` and `config_output_overlay.conf` to draw the overlays on the live video + +#### Unresolved variable errors -#### Common Error Messages +If you see an error like this: + +``` +[2025-08-20 11:43:40] 2025-08-20T09:43:40Z E! [telegraf] Error running agent: could not initialize processor processors.starlark: :6:23: unexpected input character '$' +``` -- **Unresolved variable error**: If you see an error like this: +It usually means an environment variable (like `ALERT_THRESHOLD_SECONDS`) is not set correctly as an `Extra Env` variable. - ``` - [2025-08-20 11:43:40] 2025-08-20T09:43:40Z E! [telegraf] Error running agent: could not initialize processor processors.starlark: :6:23: unexpected input character '$' - ``` +#### "Text area is too big!" in overlay - It usually means an environment variable (like `ALERT_THRESHOLD_SECONDS`) is not set correctly as an `Extra Env` variable. +If the only text you see in the overlay is "Text area is too big!", it means that too much text is being rendered or that the text size is too big. Try reducing the font size by setting `FONT_SIZE=32` in the `Extra Env` variable. ## Configuration Files @@ -169,9 +221,14 @@ Calculates time in area for each detected object using the external Starlark scr Filters detection frames based on the configured alert threshold. Only detections where time in area (`time_in_area_seconds`) exceeds `ALERT_THRESHOLD_SECONDS` are passed through to the output stage. -### test_files/config_output_stdout.conf +### config_process_rate_limit.conf -Outputs processed metrics to stdout in JSON format for testing and debugging. +Rate limits messages to protect the overlay API from being overloaded. This processor: + +- Uses system time (not message timestamps) to enforce rate limiting +- Only allows one message per second to pass through +- Drops messages that arrive too soon after the last one +- Maintains state using Starlark to track the last update time ### config_process_overlay_transform.conf @@ -187,6 +244,10 @@ Displays text overlays on the video. This configuration: - Positions overlays using pre-calculated coordinates from the Starlark processor - Automatically removes overlays after 1 second for clean video display +### test_files/config_output_stdout.conf + +Outputs processed metrics to stdout in JSON format for testing and debugging. + ### test_files/sample_data_feeder.sh Helper script that simulates camera metadata stream by reading sample JSON files line by line. This script is used for host testing to simulate the output of the live camera's message broker without requiring actual camera hardware. @@ -271,9 +332,9 @@ Example output: The `time_in_area_seconds` field is added by the time-in-area processor, showing how long this object has been tracked in the monitored area. -#### Test Complete Alert Pipeline +#### Test Alert Pipeline -Test the complete alert generation pipeline with threshold filtering: +Test the alert generation pipeline with threshold filtering: ```bash # Set up test environment @@ -295,6 +356,31 @@ telegraf --config config_input_scene_detections.conf \ **Expected Output:** Only detections with time in area (`time_in_area_seconds`) > `ALERT_THRESHOLD_SECONDS`. +#### Test Alert Pipeline with Rate Limit + +Test the complete pipeline including threshold filtering and rate limiting for overlay protection: + +```bash +# Set up test environment +export HELPER_FILES_DIR="$(pwd)" +export CONSUMER_SCRIPT="test_files/sample_data_feeder.sh" +export SAMPLE_FILE="test_files/simple_tracks.jsonl" +export ALERT_THRESHOLD_SECONDS="2" # Alert threshold in seconds + +# Test complete pipeline with rate limiting +telegraf --config config_input_scene_detections.conf \ + --config config_process_track_duration.conf \ + --config config_process_threshold_filter.conf \ + --config config_process_rate_limit.conf \ + --config test_files/config_output_stdout.conf \ + --once +``` + +**How it works:** Same as the alert pipeline test, but adds the rate limiting processor that ensures no more than one message per second is passed through to protect the overlay API from being overloaded. + +**Expected Output:** +Only the first message with a `time_in_area_seconds` > `ALERT_THRESHOLD_SECONDS` is passed through, the other are suppressed. + #### Test with Real Device Data You can also test with real analytics scene description data recorded from an Axis device: @@ -330,10 +416,14 @@ export SAMPLE_FILE="test_files/single_overlay_test.jsonl" export TELEGRAF_DEBUG="true" # Test overlay functionality with single detection -telegraf --config test_files/config_input_overlay_test.conf --config config_process_overlay_transform.conf --config config_output_overlay.conf --once +telegraf --config test_files/config_input_overlay_test.conf \ + --config config_process_overlay_transform.conf \ + --config config_output_overlay.conf \ + --once ``` **How it works:** + 1. `config_input_overlay_test.conf` reads a single detection from `single_overlay_test.jsonl` 2. `config_process_overlay_transform.conf` transforms coordinates and standardizes fields 3. `config_output_overlay.conf` receives the transformed data and executes the overlay manager @@ -341,24 +431,22 @@ telegraf --config test_files/config_input_overlay_test.conf --config config_proc 5. Removes the overlay after 1 second **Expected Result:** A red text overlay will appear on the video showing: + ``` -← ID: overlay_test_001 -Class: Human -Time: 45.2sec -Size: 1.00% +← ID: b1718a5c-0... + Type: Human + Time in area: 00:00:52 + Last seen at: 2025-10-13 16:36:55 UTC ``` -The overlay text will appear at 25% from the left of the video and vertically centered. +The overlay text will point at 55% from the left of the video and 76% from the top to the bottom of the video. ## Analytics Data Structure -The analytics scene description data follows a specific format and behavior: - -### Data Format - The analytics data goes through three formats: -#### Raw Analytics Data (from camera) +### Raw Analytics Data (from camera) + Each line contains a JSON object with this structure: ```json @@ -383,15 +471,12 @@ Each line contains a JSON object with this structure: } ``` -### Data Behavior - - **Sparse Output**: Frames are primarily output when objects are detected, with occasional empty frames - **Time Gaps**: Periods with no activity result in no output (creating gaps in timestamps) - **Occasional Empty Frames**: Sporadically output with `"observations": []`, usually for cleanup operations or periodic heartbeats -- **Operations Array**: May contain delete operations when tracks disappear - **Optional Classification**: The `class` field may be missing from observations, especially for short-lived tracks where classification hasn't completed yet -### Data Transformation for Telegraf +### Data Transformed for Telegraf The raw analytics data needs transformation for Telegraf's JSON parser because metrics must be flat - the contained list of detections would cause strange concatenations if parsed directly. Both the `sample_data_feeder.sh` script and the real `axis_metadata_consumer.sh` running on the camera perform this transformation. @@ -435,9 +520,11 @@ This transformation: - **Simplifies** object classification to just the type - **Skips** frames with no observations entirely -### Data Transformation for Overlay +### Data Transformed for Overlay + +The `config_process_overlay_transform.conf` processor transforms coordinates from the analytics system (0.0 to 1.0) to the VAPIX API system (-1.0 to 1.0). This processor also recalculates the coordinates from top, bottom left and right to center coordinates and object size. -The overlay manager transforms coordinates from the analytics system (0.0 to 1.0) to the VAPIX API system (-1.0 to 1.0) and formats the object data for display. Note that the coordinate for the text indicates the top-left corner of the text box. +Note that when we draw the overlay text in `overlay_manager.sh`, the coordinate for the text indicates the top-left corner of the text box. This is also where we place the arrow pointing to the object center. ## Recording Real Device Data diff --git a/project-time-in-area-analytics/config_process_rate_limit.conf b/project-time-in-area-analytics/config_process_rate_limit.conf new file mode 100644 index 0000000..e5c4913 --- /dev/null +++ b/project-time-in-area-analytics/config_process_rate_limit.conf @@ -0,0 +1,29 @@ +# Rate limit messages to 1 per second to protect the overlay API +[[processors.starlark]] + source = ''' +load("time.star", "time") + +state = {} + +def apply(metric): + # Only process detection_frame metrics + if metric.name != "detection_frame": + return None + + # Get the current state or initialize if not exists. + # We use system time, not the message timestamp, since we + # want to only let one message per second hit the overlay API. + last_update = state.get("last_update") or 0 + current_time = time.now().unix + + # Calculate time since last update in seconds + time_since_last = current_time - last_update + + # If less than 1 second has passed, drop the message + if time_since_last < 1.0: + return None + + # Update the last update time + state["last_update"] = current_time + return metric +''' diff --git a/project-time-in-area-analytics/overlay_manager.sh b/project-time-in-area-analytics/overlay_manager.sh index 2f0dec0..1b98ec5 100755 --- a/project-time-in-area-analytics/overlay_manager.sh +++ b/project-time-in-area-analytics/overlay_manager.sh @@ -10,30 +10,36 @@ # - Receives detection metrics via JSON from Telegraf exec output plugin # - Manages overlays for objects that exceed time-in-area threshold # - Shows only one object at a time (most recent detection) -# - Displays time in area, object class, and size information +# - Displays object ID, time in area and object type # - Positions overlay at the center of the detected object # - Provides comprehensive error handling and validation # -# Environment Variables Required: -# - VAPIX_USERNAME: Device username -# - VAPIX_PASSWORD: Device password +# Environment Variables: +# - VAPIX_USERNAME: Device username (required) +# - VAPIX_PASSWORD: Device password (required) +# - HELPER_FILES_DIR: Directory for debug log files (required) # - VAPIX_IP: IP address of the Axis device (defaults to 127.0.0.1 for localhost) -# - TELEGRAF_DEBUG: Enable debug logging when set to "true" -# - HELPER_FILES_DIR: Directory for debug log files +# - TELEGRAF_DEBUG: Enable debug logging when set to "true" (defaults to false) +# - FONT_SIZE: Font size for the overlay text (defaults to 32) # # Error Codes: # - 10: Missing required environment variables # - 11: Empty input received from stdin # - 12: Invalid JSON input or missing required fields -# - 13: VAPIX API call failed -# - 14: Overlay management error +# - 13: Overlay API call failed # Set default VAPIX_IP to localhost if not specified VAPIX_IP="${VAPIX_IP:-127.0.0.1}" +# Set a font size +FONT_SIZE="${FONT_SIZE:-45}" + +# Fixed context name for all overlays to ensure only one is active +OVERLAY_CONTEXT="time_in_area_overlay" + # Validate required environment variables for VAPIX API access if [ -z "$VAPIX_USERNAME" ] || [ -z "$VAPIX_PASSWORD" ]; then - printf "Error: VAPIX_USERNAME and VAPIX_PASSWORD must be set\n" >&2 + printf "VAPIX_USERNAME and VAPIX_PASSWORD must be set" >&2 exit 10 fi @@ -47,11 +53,228 @@ debug_log_file() { fi } +# Helper function to add a new overlay +add_overlay() { + text=$1 # Text content + x=$2 # X coordinate + y=$3 # Y coordinate + + debug_log_file "Adding new overlay - Text: $text, Pos: ($x, $y)" + json_payload=$(jq -n \ + --arg text "$text" \ + --arg context "$OVERLAY_CONTEXT" \ + --arg font_size "$FONT_SIZE" \ + --arg x "$x" \ + --arg y "$y" \ + '{ + apiVersion: "1.8", + method: "addText", + context: $context, + params: { + camera: 1, + text: $text, + textColor: "red", + textBGColor: "white", + textOLColor: "black", + fontSize: ($font_size|tonumber), + position: [($x|tonumber),($y|tonumber)] + } + }') + + debug_log_file "Sending JSON payload: $json_payload" + api_response=$(curl --silent --fail --digest --user "${VAPIX_USERNAME}:${VAPIX_PASSWORD}" \ + "http://${VAPIX_IP}/axis-cgi/dynamicoverlay/dynamicoverlay.cgi" \ + -X POST \ + -H "Content-Type: application/json" \ + -d "$json_payload" 2>&1) + + api_exit=$? + debug_log_file "API call exit code: $api_exit" + debug_log_file "API response: $api_response" + + if [ $api_exit -ne 0 ] || echo "$api_response" | grep -q '"error"'; then + debug_log_file "ERROR: Failed to create overlay" + return 1 + fi + + # Extract and log the overlay identity from the response + overlay_identity=$(echo "$api_response" | jq -r '.data.identity // empty' 2>/dev/null) + if [ -n "$overlay_identity" ] && [ "$overlay_identity" != "null" ]; then + debug_log_file "Overlay added successfully with identity: $overlay_identity" + else + debug_log_file "Overlay added but could not extract identity" + fi + + return 0 +} + +# Helper function to update an existing overlay +update_overlay() { + text=$1 # Text content + x=$2 # X coordinate + y=$3 # Y coordinate + + debug_log_file "Updating overlay - Text: $text, Pos: ($x, $y)" + json_payload=$(jq -n \ + --arg text "$text" \ + --arg context "$OVERLAY_CONTEXT" \ + --arg x "$x" \ + --arg y "$y" \ + '{ + apiVersion: "1.8", + method: "setText", + context: $context, + params: { + identity: 1, + text: $text, + position: [($x|tonumber),($y|tonumber)] + } + }') + + debug_log_file "Sending JSON payload: $json_payload" + api_response=$(curl --silent --fail --digest --user "${VAPIX_USERNAME}:${VAPIX_PASSWORD}" \ + "http://${VAPIX_IP}/axis-cgi/dynamicoverlay/dynamicoverlay.cgi" \ + -X POST \ + -H "Content-Type: application/json" \ + -d "$json_payload" 2>&1) + + api_exit=$? + debug_log_file "API call exit code: $api_exit" + debug_log_file "API response: $api_response" + + if [ $api_exit -ne 0 ] || echo "$api_response" | grep -q '"error"'; then + # Note that this might be intentional since the caller might try + # to update an overlay and only create a new one if it doesn't exist. + debug_log_file "INFO: Failed to update overlay" + return 1 + fi + + debug_log_file "Successfully updated overlay" + return 0 +} + +# Helper function to delete an overlay +delete_overlay() { + debug_log_file "Deleting overlay" + + json_payload=$(jq -n \ + --arg context "$OVERLAY_CONTEXT" \ + '{ + apiVersion: "1.8", + method: "remove", + context: $context, + params: { + identity: 1 + } + }') + + debug_log_file "Sending JSON payload: $json_payload" + api_response=$(curl --silent --fail --digest --user "${VAPIX_USERNAME}:${VAPIX_PASSWORD}" \ + "http://${VAPIX_IP}/axis-cgi/dynamicoverlay/dynamicoverlay.cgi" \ + -X POST \ + -H "Content-Type: application/json" \ + -d "$json_payload" 2>&1) + + api_exit=$? + debug_log_file "API call exit code: $api_exit" + debug_log_file "API response: $api_response" + + if [ $api_exit -ne 0 ] || echo "$api_response" | grep -q '"error"'; then + debug_log_file "ERROR: Failed to delete overlay" + return 1 + fi + + debug_log_file "Successfully deleted overlay" + return 0 +} + +# Helper function to update or create overlay +update_or_create_overlay() { + text=$1 # Text content + x=$2 # X coordinate + y=$3 # Y coordinate + + debug_log_file "Attempting to update or create overlay - Text: $text, Pos: ($x, $y)" + if update_overlay "$text" "$x" "$y"; then + return 0 + fi + + debug_log_file "Update failed, creating new overlay" + add_overlay "$text" "$x" "$y" +} + +# Function to control overlays via VAPIX API +control_overlay() { + action=$1 # Action to perform (add, update, update_or_add, delete) + text=$2 # Text content (for add and update) + x=$3 # X coordinate + y=$4 # Y coordinate + + debug_log_file "Making VAPIX API call - Action: $action, Text: $text, Pos: ($x, $y)" + case $action in + "add") + add_overlay "$text" "$x" "$y" + return $? + ;; + "update") + update_overlay "$text" "$x" "$y" + return $? + ;; + "update_or_add") + update_or_create_overlay "$text" "$x" "$y" + return $? + ;; + "delete") + delete_overlay + return $? + ;; + *) + debug_log_file "ERROR: Unknown action: $action" + return 1 + ;; + esac + + api_exit=$? + debug_log_file "API call exit code: $api_exit" + debug_log_file "API response: $api_response" + + if [ $api_exit -ne 0 ]; then + debug_log_file "ERROR: VAPIX API call failed - Action: $action (exit code: $api_exit)" + printf "Failed to %s overlay" "$action" >&2 + return 1 + fi + + # Check if response contains an error + if echo "$api_response" | grep -q '"error"'; then + debug_log_file "ERROR: VAPIX API returned error - Action: $action" + debug_log_file "ERROR: Response: $api_response" + printf "Failed to %s overlay" "$action" >&2 + return 1 + else + debug_log_file "VAPIX API call successful - Action: $action" + return 0 + fi +} + debug_log_file "Starting overlay_manager.sh script" debug_log_file "Environment variables - VAPIX_USERNAME: $VAPIX_USERNAME, VAPIX_IP: $VAPIX_IP, DEBUG: $DEBUG" # Read JSON input from Telegraf via stdin -# Expected format: {"fields":{"track_id":"123","time_in_area_seconds":45.2,"class":"Human",...},"name":"detection_frame",...} +# Expected format: +# { +# "fields":{ +# "center_x":0.22100000000000009, +# "center_y":0.5509999999999999, +# "object_type":"Face", +# "size":0.04262232000000001, +# "time_in_area_seconds":211.09837293624878, +# "timestamp":"2025-10-13T14:47:13.252519Z", +# "track_id":"2923e6a2-920f-40a7-a7a8-f856b1a136cc" +# }, +# "name":"overlay_metric", +# "tags":{}, +# "timestamp":1760366877 +# } json_input=$(cat) debug_log_file "Received JSON input: $json_input" @@ -59,185 +282,80 @@ debug_log_file "Received JSON input: $json_input" # Validate that we received input data if [ -z "$json_input" ]; then debug_log_file "ERROR: Empty input received from Telegraf" - printf "Error: Empty input received from Telegraf\n" >&2 + printf "Empty input received from Telegraf" >&2 exit 11 fi # Extract required fields from JSON using jq track_id=$(echo "$json_input" | jq -r '.fields.track_id // empty') time_in_area=$(echo "$json_input" | jq -r '.fields.time_in_area_seconds // empty') -object_class=$(echo "$json_input" | jq -r '.fields.object_type // empty') +object_type=$(echo "$json_input" | jq -r '.fields.object_type // empty') +timestamp=$(echo "$json_input" | jq -r '.timestamp // empty') # Extract pre-calculated coordinates from Starlark processor center_x=$(echo "$json_input" | jq -r '.fields.center_x // empty') center_y=$(echo "$json_input" | jq -r '.fields.center_y // empty') -size=$(echo "$json_input" | jq -r '.fields.size // empty') -debug_log_file "Extracted fields - track_id: $track_id, time_in_area: $time_in_area, class: $object_class" +debug_log_file "Extracted fields - track_id: $track_id, time_in_area_seconds: $object_type, object_type: $object_type" -# Validate required fields +# Validate required fields. We allow object_type to be empty (null) since +# this happens before the video object detection has been able to classify +# the object. if [ -z "$track_id" ] || [ "$track_id" = "null" ] || \ [ -z "$time_in_area" ] || [ "$time_in_area" = "null" ] || \ - [ -z "$object_class" ] || [ "$object_class" = "null" ]; then - debug_log_file "ERROR: Missing required fields in JSON input" - printf "Error: Missing required fields in JSON input\n" >&2 - printf "Required: track_id, time_in_area_seconds, class\n" >&2 - printf "Received: track_id='%s', time_in_area='%s', class='%s'\n" "$track_id" "$time_in_area" "$object_class" >&2 + [ -z "$object_type" ] || [ -z "$timestamp" ] || [ "$timestamp" = "null" ]; then + debug_log_file "ERROR: Missing required track info fields in JSON input" + printf "Missing required track info fields in JSON input. "\ + "Required: track_id, time_in_area_seconds, timestamp. "\ + "Received: track_id='%s', time_in_area_seconds='%s', timestamp='%s'" \ + "$track_id" "$time_in_area" "$object_type" "$timestamp" >&2 exit 12 fi -# Use pre-calculated coordinates from Starlark processor -if [ -n "$center_x" ] && [ "$center_x" != "null" ] && \ - [ -n "$center_y" ] && [ "$center_y" != "null" ] && \ - [ -n "$size" ] && [ "$size" != "null" ]; then - - debug_log_file "Using pre-calculated coordinates - center: ($center_x, $center_y), size: $size" -else - # Fallback to center of screen if no coordinates provided - # Center of screen in VAPIX coordinates is (0.0, 0.0) - center_x="0.0" - center_y="0.0" - size="0.01" - debug_log_file "No coordinates provided, using center coordinates - center_x: $center_x, center_y: $center_y" +# Use pre-calculated coordinates +if [ -z "$center_x" ] || [ "$center_x" = "null" ] || \ + [ -z "$center_y" ] || [ "$center_y" = "null" ]; then + debug_log_file "ERROR: Missing required coordinate fields in JSON input" + printf "Missing required coordinate fields in JSON input. "\ + "Required: center_x, center_y. "\ + "Received: center_x='%s', center_y='%s'" \ + "$center_x" "$center_y" >&2 + exit 12 fi -# Format time in area for display -# Use bc for floating point comparison -if [ "$(echo "$time_in_area > 60" | bc -l 2>/dev/null || echo "0")" -eq 1 ]; then - time_display=$(echo "scale=1; $time_in_area / 60" | bc -l 2>/dev/null || echo "$time_in_area") - time_unit="min" +# Get first 10 chars of track_id and add dots if it's longer than 13 chars. +# This makes the overlay text look better if the IDs are very long. +if [ ${#track_id} -gt 13 ]; then + short_track_id="$(echo "$track_id" | cut -c1-10)..." else - time_display=$(echo "scale=0; $time_in_area" | bc -l 2>/dev/null || echo "$time_in_area") - time_unit="sec" + short_track_id=$track_id fi -# Format size for display (convert to percentage) -size_percent=$(echo "scale=1; $size * 100" | bc -l 2>/dev/null || echo "1.0") +# Convert the time in fractions of seconds to more readable format +time_in_area_whole_seconds=$(printf "%.0f" "$time_in_area") +time_in_area_readable=$(date -u -d "@$time_in_area_whole_seconds" +%H:%M:%S) + +# Convert the detection timestamp (epoch time with no fractions) to +# a more readable format +timestamp_readable=$(date -u -d "@$timestamp" "+%Y-%m-%d %H:%M:%S") # Create overlay text with arrow pointing to the object # Each piece of information on its own line for better readability -overlay_text="← ID: $track_id -Class: $object_class -Time: ${time_display}${time_unit} -Size: ${size_percent}%" +overlay_text="← ID: $short_track_id + Type: $object_type + Time in area: $time_in_area_readable + Last seen at: $timestamp_readable UTC" debug_log_file "Overlay text: $overlay_text" -# Function to control overlays via VAPIX API -control_overlay() { - action=$1 # Action to perform (addText, setText, remove) - overlay_id=$2 # Overlay ID (for setText and remove) - text=$3 # Text content (for addText and setText) - x=$4 # X coordinate - y=$5 # Y coordinate - - debug_log_file "Making VAPIX API call - Action: $action, ID: $overlay_id, Text: $text, Pos: ($x, $y)" - - case $action in - "addText") - # Add new text overlay - # Escape the text properly for JSON and preserve newlines - escaped_text=$(echo "$text" | sed 's/"/\\"/g' | sed 's/$/\\n/' | tr -d '\n') - - # Create the JSON payload - json_payload="{\"apiVersion\":\"1.8\",\"method\":\"addText\",\"context\":\"overlay_${track_id}\",\"params\":{\"camera\":1,\"text\":\"$escaped_text\",\"textColor\":\"red\",\"fontSize\":32,\"position\":[$x,$y]}}" - - debug_log_file "Sending JSON payload: $json_payload" - - api_response=$(curl --silent --fail --digest --user "${VAPIX_USERNAME}:${VAPIX_PASSWORD}" \ - "http://${VAPIX_IP}/axis-cgi/dynamicoverlay/dynamicoverlay.cgi" \ - -X POST \ - -H "Content-Type: application/json" \ - -d "$json_payload" 2>&1) - ;; - "setText") - # Update existing text overlay - api_response=$(curl --silent --fail --digest --user "${VAPIX_USERNAME}:${VAPIX_PASSWORD}" \ - "http://${VAPIX_IP}/axis-cgi/dynamicoverlay/dynamicoverlay.cgi" \ - -X POST \ - -H "Content-Type: application/json" \ - -d "{ - \"apiVersion\": \"1.8\", - \"method\": \"setText\", - \"context\": \"overlay_update_${track_id}\", - \"params\": { - \"identity\": $overlay_id, - \"text\": \"$text\", - \"customPosition\": { - \"x\": $x, - \"y\": $y - } - } - }" 2>&1) - ;; - "remove") - # Remove overlay - api_response=$(curl --silent --fail --digest --user "${VAPIX_USERNAME}:${VAPIX_PASSWORD}" \ - "http://${VAPIX_IP}/axis-cgi/dynamicoverlay/dynamicoverlay.cgi" \ - -X POST \ - -H "Content-Type: application/json" \ - -d "{ - \"apiVersion\": \"1.8\", - \"method\": \"remove\", - \"context\": \"overlay_remove_${track_id}\", - \"params\": { - \"identity\": $overlay_id - } - }" 2>&1) - ;; - esac - - api_exit=$? - debug_log_file "API call exit code: $api_exit" - debug_log_file "API response: $api_response" - - if [ $api_exit -ne 0 ]; then - debug_log_file "ERROR: VAPIX API call failed - Action: $action (exit code: $api_exit)" - printf "Failed to %s overlay\n" "$action" >&2 - return 1 - fi - - # Check if response contains an error - if echo "$api_response" | grep -q '"error"'; then - debug_log_file "ERROR: VAPIX API returned error - Action: $action" - debug_log_file "ERROR: Response: $api_response" - printf "Failed to %s overlay\n" "$action" >&2 - return 1 - else - debug_log_file "VAPIX API call successful - Action: $action" - return 0 - fi -} - -# Add new overlay for current detection -debug_log_file "Adding new overlay for track: $track_id" -if control_overlay "addText" "" "$overlay_text" "$center_x" "$center_y"; then - # Extract the overlay identity from the response - overlay_identity=$(echo "$api_response" | jq -r '.data.identity // empty' 2>/dev/null) - - if [ -n "$overlay_identity" ] && [ "$overlay_identity" != "null" ]; then - debug_log_file "Overlay added successfully for track: $track_id with identity: $overlay_identity" - printf "Overlay added for track %s at position (%.3f, %.3f)\n" "$track_id" "$center_x" "$center_y" - - # Schedule automatic removal after 1 second - ( - sleep 1 - debug_log_file "Auto-removing overlay for track: $track_id (ID: $overlay_identity)" - control_overlay "remove" "$overlay_identity" "" 0 0 - if [ $? -eq 0 ]; then - debug_log_file "Auto-removal successful for track: $track_id (ID: $overlay_identity)" - else - debug_log_file "Auto-removal failed for track: $track_id (ID: $overlay_identity)" - fi - ) & - else - debug_log_file "Overlay added but could not extract identity from response" - printf "Overlay added for track %s at position (%.3f, %.3f)\n" "$track_id" "$center_x" "$center_y" - fi +# Update or create overlay for current detection +debug_log_file "Updating/creating overlay for track: $track_id" +if control_overlay "update_or_add" "$overlay_text" "$center_x" "$center_y"; then + debug_log_file "Overlay updated/created successfully for track: $track_id" else - debug_log_file "ERROR: Failed to add overlay for track: $track_id" - printf "Failed to add overlay for track %s\n" "$track_id" >&2 - exit 14 + debug_log_file "ERROR: Failed to update/create overlay for track: $track_id" + printf "Failed to update/create overlay for track %s" "$track_id" >&2 + exit 13 fi debug_log_file "Script completed successfully for track: $track_id" From 119cee07b922ec38b45f96508236ae61fe2d925f Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Mon, 13 Oct 2025 19:45:36 +0200 Subject: [PATCH 20/42] Rename metrics for clarity --- project-time-in-area-analytics/README.md | 62 +++++++++++++------ .../config_output_overlay.conf | 2 +- .../config_process_overlay_transform.conf | 47 +++++--------- .../config_process_rate_limit.conf | 10 ++- .../config_process_threshold_filter.conf | 5 +- .../overlay_manager.sh | 2 +- 6 files changed, 72 insertions(+), 56 deletions(-) diff --git a/project-time-in-area-analytics/README.md b/project-time-in-area-analytics/README.md index ae33d82..e5d53b9 100644 --- a/project-time-in-area-analytics/README.md +++ b/project-time-in-area-analytics/README.md @@ -8,10 +8,10 @@ The system consumes real-time object detection data from Axis fisheye cameras an ```mermaid flowchart TD - A["📹 config_input_scene_detections.conf:
Consume analytics scene description from the camera using the inputs.execd plugin and axis_scene_detection_consumer.sh"] --> B["Filter by area & type (TODO)"] + A["📹 config_input_scene_detections.conf:
Consume analytics scene description from the camera using the inputs.execd plugin and axis_scene_detection_consumer.sh"] -->|detection_frame| B["Filter by area & type (TODO)"] X0["Configuration variables: HELPER_FILES_DIR"] --> A X1["Configuration variables: TODO"] --> B - B --> C1 + B -->|detection_frame| C1 subgraph TimeLogic ["config_process_track_duration.conf:
Time-in-area Logic Details"] C1{"First time seeing
this object ID?"} @@ -24,15 +24,15 @@ flowchart TD CX --> C3 end - C5 --> D["config_process_threshold_filter.conf:
Filter for
time in area > ALERT_THRESHOLD_SECONDS"] + C5 -->|detection_frame| D["config_process_threshold_filter.conf:
Filter for
time in area > ALERT_THRESHOLD_SECONDS"] X2["Configuration variables: ALERT_THRESHOLD_SECONDS"] --> D - D --> E["🚨 MQTT Output
Alert messages (TODO)"] + D -->|alerting_frame| E["🚨 MQTT Output
Alert messages (TODO)"] X3["Configuration variables: TODO"] --> E - D --> E1["config_process_rate_limit.conf:
Rate limit to 1 message per second
using Starlark state"] - E1 --> F["config_process_overlay_transform.conf:
Recalculate coordinates for overlay visualization"] - F --> G["📺 config_output_overlay.conf:
Overlay Manager with the outputs.exec plugin and overlay_manager.sh"] + D -->|alerting_frame| E1["config_process_rate_limit.conf:
Rate limit to 1 message per second
using Starlark state"] + E1 -->|rate_limited_alert_frame| F["config_process_overlay_transform.conf:
Recalculate coordinates for overlay visualization"] + F -->|overlay_frame| G["📺 config_output_overlay.conf:
Overlay Manager with the outputs.exec plugin and overlay_manager.sh"] X4["Configuration variables:
VAPIX_USERNAME
VAPIX_PASSWORD
HELPER_FILES_DIR
VAPIX_IP
TELEGRAF_DEBUG
FONT_SIZE"] --> G G --> H["📺 VAPIX Overlay API"] @@ -498,31 +498,53 @@ The raw analytics data needs transformation for Telegraf's JSON parser because m ```json { - "frame": "2024-01-15T10:00:01Z", - "timestamp": "2024-01-15T10:00:01Z", - "track_id": "track_001", - "object_type": "Human", - "bounding_box": {"bottom": 0.6, "left": 0.2, "right": 0.3, "top": 0.4} + "name": "detection_frame", + "fields": { + "frame": "2024-01-15T10:00:01Z", + "timestamp": "2024-01-15T10:00:01Z", + "track_id": "track_001", + "object_type": "Human", + "bounding_box_bottom": 0.6, + "bounding_box_left": 0.2, + "bounding_box_right": 0.3, + "bounding_box_top": 0.4 + } } { - "frame": "2024-01-15T10:00:01Z", - "timestamp": "2024-01-15T10:00:01Z", - "track_id": "track_002", - "object_type": "Human", - "bounding_box": {"bottom": 0.58, "left": 0.14, "right": 0.20, "top": 0.38} + "name": "detection_frame", + "fields": { + "frame": "2024-01-15T10:00:01Z", + "timestamp": "2024-01-15T10:00:01Z", + "track_id": "track_002", + "object_type": "Human", + "bounding_box_bottom": 0.58, + "bounding_box_left": 0.14, + "bounding_box_right": 0.20, + "bounding_box_top": 0.38 + } } ``` This transformation: -- **Flattens** nested observations into individual messages -- **Preserves** object bounding box coordinates +- **Splits** nested observations into individual messages +- **Flattens** nested objects automatically (Telegraf's JSON parser adds the parent field name as prefix, e.g., `bounding_box_left`) - **Simplifies** object classification to just the type - **Skips** frames with no observations entirely +- **Adds** metric name and fields structure for Telegraf +- **Preserves** string fields like timestamps and IDs ### Data Transformed for Overlay -The `config_process_overlay_transform.conf` processor transforms coordinates from the analytics system (0.0 to 1.0) to the VAPIX API system (-1.0 to 1.0). This processor also recalculates the coordinates from top, bottom left and right to center coordinates and object size. +The `config_process_overlay_transform.conf` processor transforms the `detection_frame` into an `overlay_frame` intended to be more suitable for use with the VAPIX overlay API: + +1. **Coordinate Transformation**: + - Input: `bounding_box_left`, `bounding_box_right`, `bounding_box_top`, `bounding_box_bottom` (range 0.0 to 1.0) + - Output: `center_x`, `center_y` (range -1.0 to 1.0) + +2. **Field Preservation**: + - Copies `object_type`, `track_id`, `time_in_area_seconds`, and `timestamp` + - These fields are used for overlay text content Note that when we draw the overlay text in `overlay_manager.sh`, the coordinate for the text indicates the top-left corner of the text box. This is also where we place the arrow pointing to the object center. diff --git a/project-time-in-area-analytics/config_output_overlay.conf b/project-time-in-area-analytics/config_output_overlay.conf index 5df1945..914e022 100644 --- a/project-time-in-area-analytics/config_output_overlay.conf +++ b/project-time-in-area-analytics/config_output_overlay.conf @@ -20,7 +20,7 @@ [[outputs.exec]] # Filter to process only overlay metrics from the Starlark processor # This ensures the script only runs when overlay data is ready - namepass = ["overlay_metric"] + namepass = ["overlay_frame"] # Shell script command to execute for each overlay event # The script receives JSON data via stdin and controls the overlay display diff --git a/project-time-in-area-analytics/config_process_overlay_transform.conf b/project-time-in-area-analytics/config_process_overlay_transform.conf index da97984..91b388e 100644 --- a/project-time-in-area-analytics/config_process_overlay_transform.conf +++ b/project-time-in-area-analytics/config_process_overlay_transform.conf @@ -8,9 +8,9 @@ # Source code for the transformation logic source = ''' def apply(metric): - # Only process detection frames - if metric.name != "detection_frame": - return metric + # Only process rate-limited metrics + if metric.name != "rate_limited_alert_frame": + return None # Extract bounding box coordinates (flat format from device) if ("bounding_box_left" in metric.fields and @@ -32,36 +32,23 @@ def apply(metric): vapix_x = (center_x - 0.5) * 2.0 vapix_y = (center_y - 0.5) * 2.0 - # Calculate object size (width * height) - width = right - left - height = bottom - top - size = width * height + # Create new overlay metric by copying the original + overlay_frame = deepcopy(metric) + overlay_frame.name = "overlay_frame" - # Create new overlay metric with transformed data - overlay_metric = Metric("overlay_metric") + # Set transformed coordinates + overlay_frame.fields["center_x"] = vapix_x + overlay_frame.fields["center_y"] = vapix_y - # Set transformed coordinates and size - overlay_metric.fields["center_x"] = vapix_x - overlay_metric.fields["center_y"] = vapix_y - overlay_metric.fields["size"] = size + # Remove original bounding box fields since we now have center coordinates + overlay_frame.fields.pop("bounding_box_left", None) + overlay_frame.fields.pop("bounding_box_right", None) + overlay_frame.fields.pop("bounding_box_top", None) + overlay_frame.fields.pop("bounding_box_bottom", None) - # Ensure required fields exist with proper names - if "object_type" in metric.fields: - overlay_metric.fields["object_type"] = metric.fields["object_type"] - - if "track_id" in metric.fields: - overlay_metric.fields["track_id"] = metric.fields["track_id"] - - if "time_in_area_seconds" in metric.fields: - overlay_metric.fields["time_in_area_seconds"] = metric.fields["time_in_area_seconds"] - - # Add timestamp for overlay positioning - if "timestamp" in metric.fields: - overlay_metric.fields["timestamp"] = metric.fields["timestamp"] - - # Return both original and new overlay metric - return [metric, overlay_metric] + # Return the overlay metric + return overlay_frame # If no bounding box, drop the metric (can't create overlay without position) - return [] + return None ''' diff --git a/project-time-in-area-analytics/config_process_rate_limit.conf b/project-time-in-area-analytics/config_process_rate_limit.conf index e5c4913..9d9bbba 100644 --- a/project-time-in-area-analytics/config_process_rate_limit.conf +++ b/project-time-in-area-analytics/config_process_rate_limit.conf @@ -6,8 +6,8 @@ load("time.star", "time") state = {} def apply(metric): - # Only process detection_frame metrics - if metric.name != "detection_frame": + # Only process alerting_frame metrics + if metric.name != "alerting_frame": return None # Get the current state or initialize if not exists. @@ -25,5 +25,9 @@ def apply(metric): # Update the last update time state["last_update"] = current_time - return metric + + # Create a new metric with the rate-limited name + rate_limited_metric = deepcopy(metric) + rate_limited_metric.name = "rate_limited_alert_frame" + return rate_limited_metric ''' diff --git a/project-time-in-area-analytics/config_process_threshold_filter.conf b/project-time-in-area-analytics/config_process_threshold_filter.conf index 33b8d4e..fc37271 100644 --- a/project-time-in-area-analytics/config_process_threshold_filter.conf +++ b/project-time-in-area-analytics/config_process_threshold_filter.conf @@ -23,7 +23,10 @@ def apply(metric): # Only return metrics that exceed or equal the threshold if time_in_area >= threshold: - return metric + # Create a new metric with the alerting name + alerting_metric = deepcopy(metric) + alerting_metric.name = "alerting_frame" + return alerting_metric # Track doesn't exceed threshold - don't output return None diff --git a/project-time-in-area-analytics/overlay_manager.sh b/project-time-in-area-analytics/overlay_manager.sh index 1b98ec5..022568a 100755 --- a/project-time-in-area-analytics/overlay_manager.sh +++ b/project-time-in-area-analytics/overlay_manager.sh @@ -271,7 +271,7 @@ debug_log_file "Environment variables - VAPIX_USERNAME: $VAPIX_USERNAME, VAPIX_I # "timestamp":"2025-10-13T14:47:13.252519Z", # "track_id":"2923e6a2-920f-40a7-a7a8-f856b1a136cc" # }, -# "name":"overlay_metric", +# "name":"overlay_frame", # "tags":{}, # "timestamp":1760366877 # } From 82f9f7221078177e0512676c6e20e774a225b80e Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Mon, 27 Oct 2025 10:58:53 +0100 Subject: [PATCH 21/42] Add start of zone filtering --- .../README_INCLUDE_ZONE.md | 47 +++++ .../test_scripts/visualize_zone.py | 189 ++++++++++++++++++ 2 files changed, 236 insertions(+) create mode 100644 project-time-in-area-analytics/README_INCLUDE_ZONE.md create mode 100755 project-time-in-area-analytics/test_scripts/visualize_zone.py diff --git a/project-time-in-area-analytics/README_INCLUDE_ZONE.md b/project-time-in-area-analytics/README_INCLUDE_ZONE.md new file mode 100644 index 0000000..65727c7 --- /dev/null +++ b/project-time-in-area-analytics/README_INCLUDE_ZONE.md @@ -0,0 +1,47 @@ +# Include Zone for Analytics + +We make use of the same format for the include zone as the AXIS Object Analytics ACAP app does. That way, we can export the zone from there and use the same zone for this analytics too. + +## Exporting the Include Zone + +The [AOA VAPIX API is documented here](https://developer.axis.com/vapix/applications/axis-object-analytics-api/). + +You can run the following command: + +```bash +curl -X POST \ + --digest -u root:ACAPdev \ + -H "Content-Type: application/json" \ + -d '{"apiVersion": "1.2", "context": "zone_export", "method": "getConfiguration"}' \ + "http://${CAMERA_IP}/local/objectanalytics/control.cgi" +``` + +This will contain information about the configuration, including one or multiple include zones for a scenario: + +```json +"vertices":[[-0.97,-0.97],[-0.97,0.97],[-0.1209,0.9616],[-0.03069,0.7259],[0.05851,0.5204],[0.04617,-0.9691]] +``` + +The example above is from the `data.scenarios[0].triggers[0].vertices` field. + +## The coordinate system + +The AXIS Object Analytics API uses a normalized coordinate system where all coordinates are in the range **[-1, 1]**: + +- **X-axis**: `-1` (left edge) to `+1` (right edge) +- **Y-axis**: `-1` (bottom edge) to `+1` (top edge) + +The center of the image is at coordinates `(0, 0)`. + +## Visualizing the Zone + +To visualize the zone on a camera snapshot, use the `visualize_zone.py` script in the `test_scripts` directory: + +```bash +# Display the zone +python test_scripts/visualize_zone.py \ + -v '[[-0.97,-0.97],[-0.97,0.97],[-0.1209,0.9616],[-0.03069,0.7259],[0.05851,0.5204],[0.04617,-0.9691]]' \ + -i test_files/snapshot.jpg +``` + +This will overlay the zone polygon on the image with a semi-transparent green fill, showing exactly which area is being monitored. diff --git a/project-time-in-area-analytics/test_scripts/visualize_zone.py b/project-time-in-area-analytics/test_scripts/visualize_zone.py new file mode 100755 index 0000000..e83f107 --- /dev/null +++ b/project-time-in-area-analytics/test_scripts/visualize_zone.py @@ -0,0 +1,189 @@ +#!/usr/bin/env python3 +""" +Visualize AXIS Object Analytics zones on camera images. + +This script takes zone vertices in normalized coordinates [-1, 1] and draws +them on a camera image for visualization. +""" + +import json +import click +import cv2 +import numpy as np + + +def normalize_to_pixel(x, y, width, height): + """ + Convert normalized coordinates [-1, 1] to pixel coordinates. + + In AXIS coordinate system: + - x: -1 (left) to 1 (right) + - y: -1 (bottom) to 1 (top) + + In image pixel coordinates: + - x: 0 (left) to width (right) + - y: 0 (top) to height (bottom) + + Args: + x: Normalized x coordinate in range [-1, 1] + y: Normalized y coordinate in range [-1, 1] + width: Image width in pixels + height: Image height in pixels + + Returns: + Tuple of (pixel_x, pixel_y) + """ + # Convert from [-1, 1] to [0, width] and [0, height] + # Note: Y axis is inverted (y=-1 is bottom, but pixel y=0 is top) + pixel_x = int((x + 1) * width / 2) + pixel_y = int((1 - y) * height / 2) + return pixel_x, pixel_y + + +@click.command() +@click.option( + "--vertices", + "-v", + required=True, + help="Zone vertices as JSON array, e.g., '[[-0.97,-0.97],[-0.97,0.97],[0.12,0.96]]'", +) +@click.option( + "--image", + "-i", + required=True, + type=click.Path(exists=True), + help="Path to the image file", +) +@click.option( + "--save-to", "-s", type=click.Path(), help="Save the output image to this path" +) +@click.option( + "--no-show", is_flag=True, help="Do not display the image (useful with --save-to)" +) +@click.option( + "--color", + "-c", + default="0,255,0", + help="Polygon color in BGR format (default: 0,255,0 for green)", +) +@click.option( + "--thickness", + "-t", + default=3, + type=int, + help="Line thickness in pixels (default: 3)", +) +@click.option( + "--fill-alpha", + "-a", + default=0.3, + type=float, + help="Fill transparency (0.0-1.0, default: 0.3)", +) +def visualize_zone(vertices, image, save_to, no_show, color, thickness, fill_alpha): + """ + Visualize AXIS Object Analytics zone on a camera image. + + By default, the visualization is displayed on screen. Use --save-to to save + and --no-show to skip the display. + + Example usage: + + # Display only (default) + python visualize_zone.py -v '[[-0.97,-0.97],[-0.97,0.97],[-0.12,0.96]]' -i snapshot.jpg + + # Display and save + python visualize_zone.py -v '[...]' -i snapshot.jpg --save-to output.jpg + + # Save only (no display) + python visualize_zone.py -v '[...]' -i snapshot.jpg --save-to output.jpg --no-show + """ + try: + # Parse vertices JSON + vertices_list = json.loads(vertices) + if not isinstance(vertices_list, list) or len(vertices_list) < 3: + raise ValueError("Vertices must be a list with at least 3 points") + + # Parse color + color_bgr = tuple(map(int, color.split(","))) + if len(color_bgr) != 3: + raise ValueError("Color must be in BGR format: B,G,R") + + # Load image + img = cv2.imread(image) + if img is None: + raise ValueError(f"Failed to load image: {image}") + + height, width = img.shape[:2] + + # Convert normalized coordinates to pixel coordinates + pixel_points = [] + for vertex in vertices_list: + if len(vertex) != 2: + raise ValueError(f"Invalid vertex format: {vertex}") + x, y = vertex + px, py = normalize_to_pixel(x, y, width, height) + pixel_points.append([px, py]) + + # Convert to numpy array for OpenCV + pts = np.array(pixel_points, dtype=np.int32) + + # Create overlay for semi-transparent fill + overlay = img.copy() + + # Draw filled polygon on overlay + cv2.fillPoly(overlay, [pts], color_bgr) + + # Blend overlay with original image + cv2.addWeighted(overlay, fill_alpha, img, 1 - fill_alpha, 0, img) + + # Draw polygon outline + cv2.polylines(img, [pts], isClosed=True, color=color_bgr, thickness=thickness) + + # Draw vertices as circles + for point in pixel_points: + cv2.circle(img, tuple(point), radius=5, color=color_bgr, thickness=-1) + + # Add text info + text = f"Zone: {len(pixel_points)} vertices" + cv2.putText( + img, + text, + (10, 30), + cv2.FONT_HERSHEY_SIMPLEX, + 0.7, + color_bgr, + 2, + cv2.LINE_AA, + ) + + # Save if requested + if save_to: + cv2.imwrite(save_to, img) + click.echo(f"✓ Saved visualization to: {save_to}") + + # Display unless --no-show is specified + if not no_show: + window_name = "Zone Visualization (press any key to close)" + cv2.imshow(window_name, img) + click.echo("✓ Displaying image. Press any key to close...") + cv2.waitKey(0) + cv2.destroyAllWindows() + + # Print zone info + click.echo(f"\n📊 Zone Information:") + click.echo(f" Image size: {width}x{height}") + click.echo(f" Vertices: {len(pixel_points)}") + click.echo(f"\n Normalized → Pixel coordinates:") + for i, (norm_pt, pixel_pt) in enumerate(zip(vertices_list, pixel_points)): + click.echo( + f" [{i}] ({norm_pt[0]:+.4f}, {norm_pt[1]:+.4f}) → ({pixel_pt[0]}, {pixel_pt[1]})" + ) + + except json.JSONDecodeError as e: + click.echo(f"✗ Error parsing vertices JSON: {e}", err=True) + raise click.Abort() + + +if __name__ == "__main__": + visualize_zone() From 6af5e37124564c17db8b493170a3229a491c0a2e Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Mon, 27 Oct 2025 11:26:18 +0100 Subject: [PATCH 22/42] Prototype for ray tracing include zone --- .../README_INCLUDE_ZONE.md | 22 +- .../test_scripts/requirements.txt | 5 - .../test_scripts/visualize_zone.py | 234 +++++++++++++++--- 3 files changed, 225 insertions(+), 36 deletions(-) delete mode 100644 project-time-in-area-analytics/test_scripts/requirements.txt diff --git a/project-time-in-area-analytics/README_INCLUDE_ZONE.md b/project-time-in-area-analytics/README_INCLUDE_ZONE.md index 65727c7..1d8319e 100644 --- a/project-time-in-area-analytics/README_INCLUDE_ZONE.md +++ b/project-time-in-area-analytics/README_INCLUDE_ZONE.md @@ -19,7 +19,7 @@ curl -X POST \ This will contain information about the configuration, including one or multiple include zones for a scenario: ```json -"vertices":[[-0.97,-0.97],[-0.97,0.97],[-0.1209,0.9616],[-0.03069,0.7259],[0.05851,0.5204],[0.04617,-0.9691]] +"vertices":[[-0.97,-0.97],[-0.97,0.97],[-0.1209,0.9616],[-0.7562,0.6008],[-0.7652,0.05951],[0.05851,0.5204],[0.04617,-0.9691]] ``` The example above is from the `data.scenarios[0].triggers[0].vertices` field. @@ -40,8 +40,26 @@ To visualize the zone on a camera snapshot, use the `visualize_zone.py` script i ```bash # Display the zone python test_scripts/visualize_zone.py \ - -v '[[-0.97,-0.97],[-0.97,0.97],[-0.1209,0.9616],[-0.03069,0.7259],[0.05851,0.5204],[0.04617,-0.9691]]' \ + -v '[[-0.97,-0.97],[-0.97,0.97],[-0.1209,0.9616],[-0.7562,0.6008],[-0.7652,0.05951],[0.05851,0.5204],[0.04617,-0.9691]]' \ -i test_files/snapshot.jpg ``` This will overlay the zone polygon on the image with a semi-transparent green fill, showing exactly which area is being monitored. + +### Testing the Point-in-Zone Algorithm + +The script includes an `is_in_zone()` function that uses the ray tracing algorithm to determine if a point is inside the zone. You can test it by adding random points: + +```bash +python test_scripts/visualize_zone.py \ + -v '[[-0.97,-0.97],[-0.97,0.97],[-0.1209,0.9616],[-0.7562,0.6008],[-0.7652,0.05951],[0.05851,0.5204],[0.04617,-0.9691]]' \ + -i test_files/snapshot.jpg \ + --add-random-points 500 +``` + +Points will be drawn in: + +- **Red**: Inside the zone +- **Yellow**: Outside the zone + +The algorithm uses basic Python only (no numpy) for easy porting to Starlark. diff --git a/project-time-in-area-analytics/test_scripts/requirements.txt b/project-time-in-area-analytics/test_scripts/requirements.txt deleted file mode 100644 index 2e85201..0000000 --- a/project-time-in-area-analytics/test_scripts/requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -click==8.2.1 -matplotlib==3.9.4 -numpy==2.2.1 -paramiko==3.5.0 -types-paramiko==4.0.0.20250809 diff --git a/project-time-in-area-analytics/test_scripts/visualize_zone.py b/project-time-in-area-analytics/test_scripts/visualize_zone.py index e83f107..5deada8 100755 --- a/project-time-in-area-analytics/test_scripts/visualize_zone.py +++ b/project-time-in-area-analytics/test_scripts/visualize_zone.py @@ -7,11 +7,73 @@ """ import json +import random import click import cv2 import numpy as np +def edge_crosses_horizontal_line(y, y1, y2): + """Check if an edge crosses the horizontal line at y.""" + return (y1 > y) != (y2 > y) + + +def calculate_edge_x_at_y(x1, y1, x2, y2, y): + """Calculate the x-coordinate where the edge intersects the horizontal line at y.""" + return (x2 - x1) * (y - y1) / (y2 - y1) + x1 + + +def ray_intersects_edge(x, y, x1, y1, x2, y2): + """ + Check if a ray cast from point (x,y) to the right intersects the edge. + + Args: + x, y: Point coordinates + x1, y1: First vertex of edge + x2, y2: Second vertex of edge + + Returns: + True if the rightward ray from (x,y) intersects the edge + """ + if not edge_crosses_horizontal_line(y, y1, y2): + return False + + edge_x = calculate_edge_x_at_y(x1, y1, x2, y2, y) + return x < edge_x + + +def is_in_zone(x, y, vertices): + """ + Check if a point (x, y) is inside a polygon defined by vertices. + Uses ray tracing algorithm: cast a ray to the right and count intersections. + + This implementation uses only basic Python for easy porting to Starlark. + + Args: + x: X coordinate of the point (normalized, -1 to 1) + y: Y coordinate of the point (normalized, -1 to 1) + vertices: List of [x, y] vertices defining the polygon + + Returns: + True if point is inside the polygon, False otherwise + """ + num_vertices = len(vertices) + inside = False + + # Check each edge of the polygon + j = num_vertices - 1 # Start with the last vertex + for i in range(num_vertices): + xi, yi = vertices[i] + xj, yj = vertices[j] + + if ray_intersects_edge(x, y, xi, yi, xj, yj): + inside = not inside + + j = i + + return inside + + def normalize_to_pixel(x, y, width, height): """ Convert normalized coordinates [-1, 1] to pixel coordinates. @@ -40,6 +102,123 @@ def normalize_to_pixel(x, y, width, height): return pixel_x, pixel_y +def draw_zone_on_image(img, vertices_list, color_bgr, thickness, fill_alpha): + """ + Draw a zone polygon on the image with semi-transparent fill. + + Args: + img: OpenCV image (modified in place) + vertices_list: List of [x, y] normalized vertices + color_bgr: Tuple of (B, G, R) color values + thickness: Line thickness for polygon outline + fill_alpha: Transparency for fill (0.0-1.0) + + Returns: + List of pixel coordinates for the vertices + """ + height, width = img.shape[:2] + + # Convert normalized coordinates to pixel coordinates + pixel_points = [] + for vertex in vertices_list: + x, y = vertex + px, py = normalize_to_pixel(x, y, width, height) + pixel_points.append([px, py]) + + # Convert to numpy array for OpenCV + pts = np.array(pixel_points, dtype=np.int32) + + # Create overlay for semi-transparent fill + overlay = img.copy() + cv2.fillPoly(overlay, [pts], color_bgr) + + # Blend overlay with original image + cv2.addWeighted(overlay, fill_alpha, img, 1 - fill_alpha, 0, img) + + # Draw polygon outline + cv2.polylines(img, [pts], isClosed=True, color=color_bgr, thickness=thickness) + + # Draw vertices as circles + for point in pixel_points: + cv2.circle(img, tuple(point), radius=5, color=color_bgr, thickness=-1) + + return pixel_points + + +def draw_test_points_on_image(img, vertices_list, num_points): + """ + Draw random test points on the image to visualize the is_in_zone algorithm. + + Args: + img: OpenCV image (modified in place) + vertices_list: List of [x, y] normalized vertices defining the zone + num_points: Number of random points to generate + """ + height, width = img.shape[:2] + random.seed(42) # For reproducible results + + inside_count = 0 + outside_count = 0 + + for i in range(num_points): + # Generate random normalized coordinates + test_x = random.uniform(-1.0, 1.0) + test_y = random.uniform(-1.0, 1.0) + + # Check if point is inside zone + is_inside = is_in_zone(test_x, test_y, vertices_list) + + # Convert to pixel coordinates + test_px, test_py = normalize_to_pixel(test_x, test_y, width, height) + + # Choose color: red for inside, yellow for outside + if is_inside: + point_color = (0, 0, 255) # Red (BGR) + inside_count += 1 + else: + point_color = (0, 255, 255) # Yellow (BGR) + outside_count += 1 + + # Draw the point + cv2.circle(img, (test_px, test_py), radius=8, color=point_color, thickness=-1) + cv2.circle(img, (test_px, test_py), radius=8, color=(0, 0, 0), thickness=1) + + # Add legend + legend_y = 60 + cv2.putText( + img, + f"Test points: {num_points}", + (10, legend_y), + cv2.FONT_HERSHEY_SIMPLEX, + 0.6, + (255, 255, 255), + 2, + cv2.LINE_AA, + ) + cv2.circle(img, (20, legend_y + 25), radius=8, color=(0, 0, 255), thickness=-1) + cv2.putText( + img, + f"Inside: {inside_count}", + (35, legend_y + 30), + cv2.FONT_HERSHEY_SIMPLEX, + 0.5, + (255, 255, 255), + 1, + cv2.LINE_AA, + ) + cv2.circle(img, (20, legend_y + 50), radius=8, color=(0, 255, 255), thickness=-1) + cv2.putText( + img, + f"Outside: {outside_count}", + (35, legend_y + 55), + cv2.FONT_HERSHEY_SIMPLEX, + 0.5, + (255, 255, 255), + 1, + cv2.LINE_AA, + ) + + @click.command() @click.option( "--vertices", @@ -80,7 +259,15 @@ def normalize_to_pixel(x, y, width, height): type=float, help="Fill transparency (0.0-1.0, default: 0.3)", ) -def visualize_zone(vertices, image, save_to, no_show, color, thickness, fill_alpha): +@click.option( + "--add-random-points", + "-r", + type=int, + help="Add N random test points (red=inside zone, yellow=outside zone)", +) +def visualize_zone( + vertices, image, save_to, no_show, color, thickness, fill_alpha, add_random_points +): """ Visualize AXIS Object Analytics zone on a camera image. @@ -97,6 +284,9 @@ def visualize_zone(vertices, image, save_to, no_show, color, thickness, fill_alp # Save only (no display) python visualize_zone.py -v '[...]' -i snapshot.jpg --save-to output.jpg --no-show + + # Test the is_in_zone algorithm with random points + python visualize_zone.py -v '[...]' -i snapshot.jpg --add-random-points 50 """ try: # Parse vertices JSON @@ -104,6 +294,11 @@ def visualize_zone(vertices, image, save_to, no_show, color, thickness, fill_alp if not isinstance(vertices_list, list) or len(vertices_list) < 3: raise ValueError("Vertices must be a list with at least 3 points") + # Validate vertex format + for vertex in vertices_list: + if len(vertex) != 2: + raise ValueError(f"Invalid vertex format: {vertex}") + # Parse color color_bgr = tuple(map(int, color.split(","))) if len(color_bgr) != 3: @@ -116,35 +311,12 @@ def visualize_zone(vertices, image, save_to, no_show, color, thickness, fill_alp height, width = img.shape[:2] - # Convert normalized coordinates to pixel coordinates - pixel_points = [] - for vertex in vertices_list: - if len(vertex) != 2: - raise ValueError(f"Invalid vertex format: {vertex}") - x, y = vertex - px, py = normalize_to_pixel(x, y, width, height) - pixel_points.append([px, py]) - - # Convert to numpy array for OpenCV - pts = np.array(pixel_points, dtype=np.int32) - - # Create overlay for semi-transparent fill - overlay = img.copy() - - # Draw filled polygon on overlay - cv2.fillPoly(overlay, [pts], color_bgr) - - # Blend overlay with original image - cv2.addWeighted(overlay, fill_alpha, img, 1 - fill_alpha, 0, img) - - # Draw polygon outline - cv2.polylines(img, [pts], isClosed=True, color=color_bgr, thickness=thickness) - - # Draw vertices as circles - for point in pixel_points: - cv2.circle(img, tuple(point), radius=5, color=color_bgr, thickness=-1) + # Draw the zone polygon on the image + pixel_points = draw_zone_on_image( + img, vertices_list, color_bgr, thickness, fill_alpha + ) - # Add text info + # Add zone info text text = f"Zone: {len(pixel_points)} vertices" cv2.putText( img, @@ -157,6 +329,10 @@ def visualize_zone(vertices, image, save_to, no_show, color, thickness, fill_alp cv2.LINE_AA, ) + # Draw random test points if requested + if add_random_points: + draw_test_points_on_image(img, vertices_list, add_random_points) + # Save if requested if save_to: cv2.imwrite(save_to, img) From cdd4c0bdd968348030fe2fa27b5e6daff863a736 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Thu, 30 Oct 2025 14:16:18 +0100 Subject: [PATCH 23/42] Add zone filtering to pipeline --- .../.images/complex-zone-test.png | Bin 0 -> 8744 bytes .../.images/simple-zone-test.png | Bin 0 -> 7442 bytes project-time-in-area-analytics/README.md | 118 ++++++- .../config_process_threshold_filter.conf | 8 +- .../config_process_track_duration.conf | 10 +- .../config_process_zone_filter.conf | 28 ++ .../test_files/sample_data_feeder.sh | 4 +- .../test_files/test_zone_filter_complex.jsonl | 30 ++ .../test_files/test_zone_filter_simple.jsonl | 37 +++ .../test_scripts/visualize_zone_tests.py | 300 ++++++++++++++++++ .../track_duration_calculator.star | 12 +- .../zone_filter.star | 265 ++++++++++++++++ 12 files changed, 783 insertions(+), 29 deletions(-) create mode 100644 project-time-in-area-analytics/.images/complex-zone-test.png create mode 100644 project-time-in-area-analytics/.images/simple-zone-test.png create mode 100644 project-time-in-area-analytics/config_process_zone_filter.conf create mode 100644 project-time-in-area-analytics/test_files/test_zone_filter_complex.jsonl create mode 100644 project-time-in-area-analytics/test_files/test_zone_filter_simple.jsonl create mode 100644 project-time-in-area-analytics/test_scripts/visualize_zone_tests.py create mode 100644 project-time-in-area-analytics/zone_filter.star diff --git a/project-time-in-area-analytics/.images/complex-zone-test.png b/project-time-in-area-analytics/.images/complex-zone-test.png new file mode 100644 index 0000000000000000000000000000000000000000..e284f54f217bdb0506f438e489ecdae8baca235f GIT binary patch literal 8744 zcmeHtcTiJbyKaamo4%!rNQu%EBM8z&AO?|MMCsCgC@7&x@67-z9Rx&>B1Mr7Qj{h^ zDbj?{Aw-nkA#_MM+u!$n_uQE~bM85J=FHqb&L5eTWY&Jyde>U-^FGhJ_H#WQRYtnA zbTAldSrw6<_#ff+qk&vFWU;a^eS10z1c^orL8wENvytVOLJ zu`G_rYKy+s?!8)I_FMKMBe?$ft_J*T2jZ%_+SCu5$}={i2@YCEUq*5wstO6C@?@Kj zg?-Cik37A2cPEK+q~SM(g@nvmHPYbPZk=S>y-P_jSotMJKNw703k{$Kuwd|e54x$z z24*IQb1-qXj_+v?O?RA$jc-nHF~b<{k)p~7mwznBdGC!g-MPr@2a98mCYvc%bHKxf z>#v#S9@G2L=J@eYW)CB&zj=;Dm8r2agdP5#j`W84+?nP=Y+>IkmlyvP>(ZOC62N`i zQcIWb><%ar+Th1GfEFn`PrRI1=gO%bPvLwUs^>sxjMcj*@dye(+wiCteYMQ>6a<+G(`r3QMj3&($-}UVtp|NtkTp(|4gDJ3@fY zTnKy?2kQHqJJG`%6i|s5e{fDBEDm|+_jlBMuP5o@?pu+e3etjz7fj%&{C`7BcS7n04@zPrY&!)ty^0NcIw5~9QU~SO6-&6YPqaCqi=h){SX`vLFFXN;EGmO!pU?~-xthf?6L$a zQ6gnd`A(vx3$t1&%cm0_vjAIZV8WdtbVxIZmQaO<++;yld@~ghw?eBKs_~1nq1)F@ z=ud{L0bD|~)Zsb+7ZWWuP?k3)Hmtm2cxP~aIB~FBHD4;AC~9}Ot;Lgn%kXS}8_s5J z;;85F_9{K%Xmx|w;5zl)n)#B<5DTs+erfYA-Z1bqpUl}4wAc(yW#8U*g<*%!wg{8= znLfL%UYXkyCZ(l~fwd<(BYAs)6q{M)TaTe-I1pf5@ay$mb3LgHlomI7UXIE`AQ^Xr zMW^q@DnHU_(_jI}cNqsuUpBd3mNN{JwcsXJ)h-c)Cj(5jCD@nstEKN1$8f|}>CG1& zs;(XnGB)`N$ms{w7FVxGMV9(#Z%bVoX_F-_@<9H;`7iiIjT_1t4xN<8UHxP}31C`HoT^k)11C1Fk4t{ZEMd_lH~jjJl-pi>yG2o){u!)36d4OQXUe5Uuxs@>zRS$?VrBUv{p{eBS&_9HRb zKZLv4i^4dVxm`yFa3?O%#0aS_wJ|60`abl2XnEV@KDs?sou5Icn7p66U0Ux!DIU~o z2yEHr%Q##gpCeAz#Iq-ZuBRa9T*eGs_KnP{%FcZ^>bBg*la$OE4U`hR7;ilMC>RpQ zxlJkfIp#g|sM%D6p{sxq*Mo1K!6YO$b*|(zoX4i$hKGy*hHC(jFDvHT(8HD>` z52cR@6&1>qcH2dt;>I=zVNb`S+KXm6!mID1*q7xHQK2iS_C^k*gGaa3DOPsGWm#J6 zxyQ@tnR-g%XyXS%XhhSNvlX`Nl>nHfi8j7Agr+i70V0**R6{6$9%m}@Wel)hRp#Dgv|~_k%KEba;SjN8->^aJY)CTJ1yvNbVMOvCT(UKX(WNT)o%o80P>^^0_vTK>FEdLEd7Fyb+g8@ z(wwu4ZR$ulQH8?E`sdKijK6(lgm*J0s$QjQa7;Ug# zD+x2NajNyGcHi7d_0!yKl&G)JwK?Ug4GgQm{R&l1Vl-*gNlDSjbP?_4_bac|ZP7qv z$1igmFJ$raE9RikhiuawPF~~Y){e8Mh{{e^u#zg3$QvHKYV zI?S^P8{#FQC{2sAhTWb&`3J@_oy|X&T_8LmO?30|9M2PSym|%Q5Lo@Mv!x5edLikoxWTLR=dhma_bG#h$jf2jg?o-WgQSo+xd(hZ*bjY4w!b=T{gz$|X`$a88q zTLxJD5Xr`W3Oy1^&18|MFZb#CYxnZ&pWQ2?JnmSLvFm?AnzcF!PX-&~iQXG5eN}?hZ;mk+-WrM)K(spPywu61V9Njz#4)Jv@|VZ>kTzJ8EWFI^x72>*v2?i zJ3RtB2_-|h^H{d8ck|vk@ic8OZ!L4{Oq9tv@D7O!fUc^*#n5*ey5^rYzB|YGOJdif z1HEXm_gT>|eugd3%M3~n#?}m0 zJJOn+A_WM7bSU8BvvP4mrM)rOC@jY`5k@Uw+;Ayn4iZmHM}_fT~9bbzVBL8D{6 z1LZtDU*hxK0NZ8BUcuflaFwfJE_Ku{A2(p%RI!2*xq%SC3keG^(Ijc)k&-&SqIIy( z^+m$K@7eb)4!A9tW|U`??+zMZf0&BgLIWM?f0F#D#EVYROejfz2)CDe$^4S3OQ>=? z(ahegN4s~$6~+SGIgPH!`y18tA+=70+GtM zpF*pC{IXVN;x?<5B7A;zx%#NWjHAZ?!Rm!l9ZN!XC<}0v6)jOPMDg$cwRP*&-e#Xz zQy^(c6{jXxFi>+U(RB00qUdDRdWnnyaiAm=!VrXj-`^y{=p#fTI0vqHug^bytR|Z6 zYBh~2FdSo(UQzQ>Vw-qlhBVZX=x)frW{!yw)+sRCX_zLzx*%!>e-{ z24J-X!1)X?L4C#4JD<*!{v?DF9WU;VV?DNKtM-ff%Kmz)2M?(_jh4v$6qdchR_1n6 z@b3qZNYjzU*E2S>)I;jfX0`Ts?9pyR)60NHE}oJ9(+gT@UC6o|LO{lW22SS3P6t!N z$rrE>URUX55wUSm2`DRZY~1Av4myS?FagN|FuVd2*dZg?AUa$ZUMHgv@MuIi`0Z(Q zxH^2;0a9@-yl}Q#RLZqSmbRsATz2wcdni0SZaERfFOQ82febx}1||4efCq`71cb^V zT`cGWO?XHYEBXME266OgwKaAAxC>}CF{qJ8tM!gBQE#dN3skh!o0@m;P{y}bFV2~ zrH@k~Anqx*Z9ZR}o3gKACe4taSIS!8aqF(qn;YbaoFMPE4fzs_THlci-#KWhe+?J_ zncQ*`mahx>#F9BUak%ifN-!UxV0hj0eENH(8|mkCluhaKreZG1LsYD9@e+0pS#QfIvFE){&g9TmL5)SmlEb6^;rCAa{bgf8(h}hFL8CvS|!z;W~#*RgS>kj*VYZH_q zQ+;h^*JfNbvm%9?H8L@Pd(u~dHRID0d^8P)1~2f2nbbLFAP%uv08unm(kJHFC|n>| zmCJ#yRq|gElOd0)@{#veM~$|u9hMT3Kh#7MJv;Z1l^qV`uFW!t5N*&hU=;u(3bDnbw)B^+$MzC;t}>bH^ke zQ9k(_uHO4oG#N+hDNW=rRl3K8xye|NDK_x9wr)Y>_iH5zh?iJ#_Z%-VF07xDedM>RIAYwa;8$J9k1{txq<_#^c{OgL6!@*2&!=to zc;>-&`Y@l*xUpk>;O4KLj~6wvVaFH(L_+5?hU#4ouCb zKE--77@s68EUXMb%79@QiG17WO%dFFDj<-CM+zrTTFRc`wDb=oTiMP&_Z;qu<5)9dY=lXMz19S-99gT*4UAXC#TPT~4y3zcbn;Cc zf9P*-Y#?QEad1X2@Z;8epUX#LPB&1A3cgZRYhvr_Dj|<_FlkO2zE)j!4|$xUbeKv` zp*#uj*s9FQByjJnnvQrZg`3%F3Oi?hs&QWvZ4o`ZHanGo3O2YHaS-sb7%=WFFf(X6$3hpCE2Jk+acj zbv8C8Xlu2vZZ6>y2xSo8CkMaUG-3%iyhu`{;VsPjrw=)RG96J{mEwMVrWww3?><>Wv~MX*)9tYM zoS$ZR;LT%Moq>q!k+HAzX`^!syKf0D#mmxx~T zPBBQ|iAv&@AuJV#iK0hl9er8`eDq&6Q0maCKQ7KtlP8%Nqvk{9nVl_L4TD)_R9om_}0dsdJKlrSZ5hX9Q>q!CpB znl@7r)G692el>oSEvUxIHoZD;)JV*(g9+_$3 zWkbdO?_kcunA23h-dXx4Xys=_pCeG1eem2(ac6vv+;QWd6Rh>s)axbaZd@n{bw&6f2aJNazu$OCf9p?M??1!3IV&Fe< zUrS%J@~p?WSZFXHr&36!K=F8<3qmfCdJ04~nCAmE4DF zEc~_@$!Bf6lG7koAmT+XTw1?z+&$ZLRP5&5uzJ|Eh1+**;pRs%pJQ%QGN9bEIoZ;W zAq;=Ftb4qiPfR_0Q*6ETr4>JTu0;RCvi#cYr+$au9l6Pu`FbN*6?liQPk#)Z(&{A< z=KPNexsQF%{D#lxX%uW??8v4zCzV?;gp}6Ck7qb&RYji7ecNfp;%K4kavwidIB{gr5`4o09SdMQEH&J#E1Gna5xBW(7 zh5fH$lZDe>OPm(Eq9JzRyXQ-uf~q0IJ(gy4d2O1p$9?U50bbK}VwV25S>> zX=!r7_o{L)1rLI^V?AX(<9Tnu-buc_ucXz3ZBo$w*Z%HkOTx5J4E|%0)f{F_p?BD+ zX;ZhF(z}+Fd9+VI>C>CsyZx{hhUu>eeN)OsZ_^~Z8`)XvK@iDmfsZMlIO;Y56oj*d>_oPwoEVC|>s?a=+8_4U1)zpEkddMRt# zmJjcKei(-ziNf4z9_zo^@Bi?3eHn>#qg=LJim>Q&O5&}`$?^IjZ5Sin{hgB`mrcnSLX3M`x0_6p%@hx}J@=xWMpeHceaeLI(U1(X{_&Sm z579=GVjm4NBf31!F3a_n$`nPT>#lvz39O{VX!A9CU;&Jb%$3N2M^wGC!wF zt9>$#rzTWnlqhC0H}*wi9c1HjFK}bhsx!Tx&vCTBuWB5E>d*vfzj5tK8J^30TKx~) zD)#dt#dyAB%xj37#tS2JHI&j=rL`uWGk$xK9gk}qUiQZaxgO0}6!>8z0w$+7<{16h zU}P!w{QM7hTX>WUcaM=X4Nua_&fVT|_I5emtHI~)Cu*0-9we9NeR7=EaoqEui1jZ( zCFsbDC{L(>WY&!_m#KNhq*CLICB|iJ@7NI=Y<6f=?S<_E)sd<1oyY}t#BJw{u_eZB z*z~}qAxW`xzm8+stx=`aBVugSYNi-c%b+)a5HI7Tw9!vtWP%+O8vrTN(%eK1pw&9z`$5+RKmOU==&UfgIyw zSW1#y@HzDYaa`*0E<&97LQkS+@4GoJk%aW7A!L~NW8RJLjOfpO^;5%JUrW3*96`9x zK>d_g{_y86Comk;5RKrjQ24cs>8sBDW*IqT1fRYYssGWZxYPTt>BQy4jni{znXtPz z`PV)#sO+Sgey6nle zW~QQ30}w$wE8}v@2-FkcKdvhUzyH4!p8lu9zn9hi!wTJh^Fr;5|3jw##RA=+1RQ!Y z`2l(&|9?#F9~Z*^bB_L>*8$D+j~ni+GAy|H;GYGUXb_&!?PCRlQT6vz$lvt9>%iuVdBviKZ1U}3(<-rl zX#BJ$bQ`|lYQhfl6;wuCOQW`0|NPk`pL9$6OIA?+J7y`xiMrip5Z4$WA0c^GIZjx{kAcD*|W0R+iO_+rT&*_?bj>3;Nl(rjK|GCKp$@l7}?a2rYwNU5HETic9B z{*SJY7*Y66{OGxat{vmV=P#{6YFAWOdR5W4JbZP9aF{iCXZ|^U2Y>_t+$1OThv>U* zV0UG_AS`TJMe^N|AC}7aTmO5`yRa9+%Fgd;UVl6!zB^7rGkY8=qL0_DYA1M31oWTB sb{@5y$XdS+T?)|k^8OQscaEuw90i@0R(n1`uYSPPRdjBZpshmx4M5_}bpQYW literal 0 HcmV?d00001 diff --git a/project-time-in-area-analytics/.images/simple-zone-test.png b/project-time-in-area-analytics/.images/simple-zone-test.png new file mode 100644 index 0000000000000000000000000000000000000000..271c0991d4187c952b672677fe3a8aa96154fc2c GIT binary patch literal 7442 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 Vb8`w~9&!R6JutXmtY!D=-vF0?e;)t< literal 0 HcmV?d00001 diff --git a/project-time-in-area-analytics/README.md b/project-time-in-area-analytics/README.md index e5d53b9..bc807a4 100644 --- a/project-time-in-area-analytics/README.md +++ b/project-time-in-area-analytics/README.md @@ -8,10 +8,10 @@ The system consumes real-time object detection data from Axis fisheye cameras an ```mermaid flowchart TD - A["📹 config_input_scene_detections.conf:
Consume analytics scene description from the camera using the inputs.execd plugin and axis_scene_detection_consumer.sh"] -->|detection_frame| B["Filter by area & type (TODO)"] + A["📹 config_input_scene_detections.conf:
Consume analytics scene description from the camera using the inputs.execd plugin and axis_scene_detection_consumer.sh"] -->|detection_frame| B["config_process_zone_filter.conf:
Filter by include zone polygon"] X0["Configuration variables: HELPER_FILES_DIR"] --> A - X1["Configuration variables: TODO"] --> B - B -->|detection_frame| C1 + X1["Configuration variables: INCLUDE_ZONE_POLYGON"] --> B + B -->|detection_frame_in_zone| C1 subgraph TimeLogic ["config_process_track_duration.conf:
Time-in-area Logic Details"] C1{"First time seeing
this object ID?"} @@ -24,7 +24,7 @@ flowchart TD CX --> C3 end - C5 -->|detection_frame| D["config_process_threshold_filter.conf:
Filter for
time in area > ALERT_THRESHOLD_SECONDS"] + C5 -->|detection_frame_with_duration| D["config_process_threshold_filter.conf:
Filter for
time in area > ALERT_THRESHOLD_SECONDS"] X2["Configuration variables: ALERT_THRESHOLD_SECONDS"] --> D D -->|alerting_frame| E["🚨 MQTT Output
Alert messages (TODO)"] @@ -88,6 +88,7 @@ Color scheme: - ["Text area is too big!" in overlay](#text-area-is-too-big-in-overlay) - [Configuration Files](#configuration-files) - [config_input_scene_detections.conf and axis_scene_detection_consumer.sh](#config_input_scene_detectionsconf-and-axis_scene_detection_consumersh) + - [config_process_zone_filter.conf and zone_filter.star](#config_process_zone_filterconf-and-zone_filterstar) - [config_process_track_duration.conf and track_duration_calculator.star](#config_process_track_durationconf-and-track_duration_calculatorstar) - [config_process_threshold_filter.conf](#config_process_threshold_filterconf) - [config_process_rate_limit.conf](#config_process_rate_limitconf) @@ -100,6 +101,7 @@ Color scheme: - [Prerequisites](#prerequisites) - [Host Testing Limitations](#host-testing-limitations) - [Test Commands](#test-commands) + - [Test Zone Filter Only](#test-zone-filter-only) - [Test Time in Area Calculation Only](#test-time-in-area-calculation-only) - [Test Alert Pipeline](#test-alert-pipeline) - [Test Alert Pipeline with Rate Limit](#test-alert-pipeline-with-rate-limit) @@ -137,7 +139,9 @@ Color scheme: Create a combined file by running: ```bash -cat config_input_scene_detections.conf \ +cat config_agent.conf \ + config_input_scene_detections.conf \ + config_process_zone_filter.conf \ config_process_track_duration.conf \ config_process_threshold_filter.conf \ config_process_rate_limit.conf \ @@ -145,9 +149,16 @@ cat config_input_scene_detections.conf \ config_output_overlay.conf > combined.conf ``` -Then upload `combined.conf` as a config file and `overlay_manager.sh`, `axis_scene_detection_consumer.sh` and `track_duration_calculator.star` as helper files. +Then upload `combined.conf` as a config file and `overlay_manager.sh`, `axis_scene_detection_consumer.sh`, `zone_filter.star`, and `track_duration_calculator.star` as helper files. -Set `Extra Env` to `ALERT_THRESHOLD_SECONDS=30` and set valid credentials in the parameters `Vapix username` and `Vapix password`. +Set `Extra Env` to: + +- `ALERT_THRESHOLD_SECONDS=30` +- `INCLUDE_ZONE_POLYGON=[[[-1,-1],[-1,1],[1,1],[1,-1]]]` (configure for your zone polygon) + +Set valid credentials in the parameters `Vapix username` and `Vapix password`. + +To export the zone from AXIS Object Analytics, see [README_INCLUDE_ZONE.md](README_INCLUDE_ZONE.md). ### Troubleshooting @@ -208,6 +219,15 @@ Can also be used for reproducible testing on host systems by setting `CONSUMER_S - `CONSUMER_SCRIPT`: Path to consumer script (defaults to `axis_scene_detection_consumer.sh`) - `SAMPLE_FILE`: Path to sample data file (required when using `sample_data_feeder.sh`) +### config_process_zone_filter.conf and zone_filter.star + +Filters the incoming detection frames based on the configured include zone polygon. This processor: + +- Read the `INCLUDE_ZONE_POLYGON` env var to get the zone polygon +- Uses the `zone_filter.star` script to determine if the detected object's bounding box center is within the polygon +- Only passes detections that are within the polygon to the next stage +- Outputs debug messages when detections are filtered + ### config_process_track_duration.conf and track_duration_calculator.star Calculates time in area for each detected object using the external Starlark script `track_duration_calculator.star`. This processor: @@ -287,6 +307,52 @@ You can test the processing logic locally using Telegraf before deploying to you ### Test Commands +#### Test Zone Filter Only + +We have two files with fake detections that are good for testing the zone filter: + +- `test_files/simple_tracks.jsonl` - simple tracks that are good for testing the zone filter +- `test_files/test_zone_filter_complex.jsonl` - complex tracks that are good for testing the zone filter with a complex polygon + +You can use the [visualize_zone_tests.py](test_scripts/visualize_zone_tests.py) script to visualize the zone and detections: + +```bash +python test_scripts/visualize_zone_tests.py test_files/test_zone_filter_simple.jsonl +``` + +This will show an image like the following where you can see the zone the test is intended to be used with (parsed from a comment in the `.jsonl` file) and the sample detections. That way, it is easy to see which points are inside and which are outside and therefore to know what you should expect from the Telegraf pipeline test using this test file. + +![Complex zone test](.images/simple-zone-test.png) + +Test the zone filter to ensure it correctly filters detections based on the polygon: + +```bash +# Set up test environment +export HELPER_FILES_DIR="$(pwd)" +export CONSUMER_SCRIPT="test_files/sample_data_feeder.sh" +export SAMPLE_FILE="test_files/test_zone_filter_simple.jsonl" +export TELEGRAF_DEBUG=true + +# Set the zone polygon from the test file (example for simple rectangular zone) +export INCLUDE_ZONE_POLYGON='[[[-0.6, -0.4], [0.2, -0.4], [0.2, 0.2], [-0.6, 0.2]]]' + +# Test zone filter only +telegraf --config config_agent.conf \ + --config config_input_scene_detections.conf \ + --config config_process_zone_filter.conf \ + --config test_files/config_output_stdout.conf \ + --once +``` + +**How it works:** By setting `CONSUMER_SCRIPT="test_files/sample_data_feeder.sh"`, we override the default live camera script with a file reader that simulates the camera's message broker output by reading from the file specified in `SAMPLE_FILE`. This allows us to test the zone filter on the host using pre-recorded sample data instead of connecting to the live camera infrastructure. + +**Expected Output:** +Three detections should be outputted by the filter. These can be identified by their `track_id`: + +- `inside_zone_a` +- `inside_zone_b` +- `crossing_edge_g` + #### Test Time in Area Calculation Only Test the time in area calculator without threshold filtering to see all detections with their calculated time in area: @@ -296,9 +362,15 @@ Test the time in area calculator without threshold filtering to see all detectio export HELPER_FILES_DIR="$(pwd)" export CONSUMER_SCRIPT="test_files/sample_data_feeder.sh" export SAMPLE_FILE="test_files/simple_tracks.jsonl" +export TELEGRAF_DEBUG=true + +# Set zone to cover entire view (so all detections pass through) +export INCLUDE_ZONE_POLYGON='[[[-1.0, -1.0], [1.0, -1.0], [1.0, 1.0], [-1.0, 1.0]]]' # Test time in area calculation only (shows all detections + debug messages) -telegraf --config config_input_scene_detections.conf \ +telegraf --config config_agent.conf \ + --config config_input_scene_detections.conf \ + --config config_process_zone_filter.conf \ --config config_process_track_duration.conf \ --config test_files/config_output_stdout.conf \ --once @@ -307,7 +379,7 @@ telegraf --config config_input_scene_detections.conf \ **How it works:** By setting `CONSUMER_SCRIPT="test_files/sample_data_feeder.sh"`, we override the default live camera script with a file reader that simulates the camera's message broker output by reading from the file specified in `SAMPLE_FILE`. This allows us to test the processing pipeline on the host using pre-recorded sample data instead of connecting to the live camera infrastructure. **Expected Output:** -All detections with `time_in_area_seconds` field. +All detections with `time_in_area_seconds` field and `name` set to `detection_frame_with_duration`. Example output: @@ -324,13 +396,13 @@ Example output: "track_id": "track_001", "time_in_area_seconds": 1.67 }, - "name": "detection_frame", + "name": "detection_frame_with_duration", "tags": { "host": "test-host" }, "timestamp": 1755677033 } ``` -The `time_in_area_seconds` field is added by the time-in-area processor, showing how long this object has been tracked in the monitored area. +The `time_in_area_seconds` field is added by the time-in-area processor, showing how long this object has been tracked in the monitored area. The metric name changes from `detection_frame` → `detection_frame_in_zone` → `detection_frame_with_duration` as it flows through the pipeline. #### Test Alert Pipeline @@ -341,10 +413,16 @@ Test the alert generation pipeline with threshold filtering: export HELPER_FILES_DIR="$(pwd)" export CONSUMER_SCRIPT="test_files/sample_data_feeder.sh" export SAMPLE_FILE="test_files/simple_tracks.jsonl" +export TELEGRAF_DEBUG=true export ALERT_THRESHOLD_SECONDS="2" # Alert threshold in seconds +# Set zone to cover entire view (so all detections pass through) +export INCLUDE_ZONE_POLYGON='[[[-1.0, -1.0], [1.0, -1.0], [1.0, 1.0], [-1.0, 1.0]]]' + # Test time in area calculation + threshold filtering -telegraf --config config_input_scene_detections.conf \ +telegraf --config config_agent.conf \ + --config config_input_scene_detections.conf \ + --config config_process_zone_filter.conf \ --config config_process_track_duration.conf \ --config config_process_threshold_filter.conf \ --config test_files/config_output_stdout.conf \ @@ -365,10 +443,16 @@ Test the complete pipeline including threshold filtering and rate limiting for o export HELPER_FILES_DIR="$(pwd)" export CONSUMER_SCRIPT="test_files/sample_data_feeder.sh" export SAMPLE_FILE="test_files/simple_tracks.jsonl" +export TELEGRAF_DEBUG=true export ALERT_THRESHOLD_SECONDS="2" # Alert threshold in seconds +# Set zone to cover entire view (so all detections pass through) +export INCLUDE_ZONE_POLYGON='[[[-1.0, -1.0], [1.0, -1.0], [1.0, 1.0], [-1.0, 1.0]]]' + # Test complete pipeline with rate limiting -telegraf --config config_input_scene_detections.conf \ +telegraf --config config_agent.conf \ + --config config_input_scene_detections.conf \ + --config config_process_zone_filter.conf \ --config config_process_track_duration.conf \ --config config_process_threshold_filter.conf \ --config config_process_rate_limit.conf \ @@ -390,9 +474,15 @@ You can also test with real analytics scene description data recorded from an Ax export HELPER_FILES_DIR="$(pwd)" export CONSUMER_SCRIPT="test_files/sample_data_feeder.sh" export SAMPLE_FILE="test_files/real_device_data.jsonl" +export TELEGRAF_DEBUG=true + +# Set zone to cover entire view (so all detections pass through) +export INCLUDE_ZONE_POLYGON='[[[-1.0, -1.0], [1.0, -1.0], [1.0, 1.0], [-1.0, 1.0]]]' # Test time in area calculation with real data -telegraf --config config_input_scene_detections.conf \ +telegraf --config config_agent.conf \ + --config config_input_scene_detections.conf \ + --config config_process_zone_filter.conf \ --config config_process_track_duration.conf \ --config test_files/config_output_stdout.conf \ --once diff --git a/project-time-in-area-analytics/config_process_threshold_filter.conf b/project-time-in-area-analytics/config_process_threshold_filter.conf index fc37271..6ba8de9 100644 --- a/project-time-in-area-analytics/config_process_threshold_filter.conf +++ b/project-time-in-area-analytics/config_process_threshold_filter.conf @@ -3,15 +3,15 @@ # This processor filters detection frames based on time in area threshold. # Only detections that exceed the configured threshold are passed through. # -# Input: detection_frame metrics with time_in_area_seconds field -# Output: Only detection_frame metrics where time_in_area_seconds > ALERT_THRESHOLD_SECONDS +# Input: detection_frame_with_duration metrics with time_in_area_seconds field +# Output: alerting_frame metrics where time_in_area_seconds > ALERT_THRESHOLD_SECONDS # # Environment Variables: # - ALERT_THRESHOLD_SECONDS: Minimum time in area in seconds to trigger alerts (required) [[processors.starlark]] - # Process only detection frames for threshold filtering - namepass = ["detection_frame"] + # Process only detection frames with duration calculated + namepass = ["detection_frame_with_duration"] source = ''' def apply(metric): diff --git a/project-time-in-area-analytics/config_process_track_duration.conf b/project-time-in-area-analytics/config_process_track_duration.conf index d745fcb..c2f8a75 100644 --- a/project-time-in-area-analytics/config_process_track_duration.conf +++ b/project-time-in-area-analytics/config_process_track_duration.conf @@ -1,16 +1,16 @@ # Track Duration Calculator Processor # # This processor calculates time in area for object tracking and manages state cleanup. -# It processes detection frames and outputs: +# It processes detection frames (filtered by zone) and outputs: # 1. Original detection metrics with added time_in_area_seconds field # 2. Debug metrics when stale tracks are cleaned up # -# Input: detection_frame metrics with track_id, timestamp, coordinates -# Output: Same metrics with time_in_area_seconds field + optional debug metrics +# Input: detection_frame_in_zone metrics with track_id, timestamp, coordinates +# Output: detection_frame_with_duration metrics with time_in_area_seconds field + optional debug metrics [[processors.starlark]] - # Only process detection frames for duration calculation - namepass = ["detection_frame"] + # Only process detection frames that passed zone filtering + namepass = ["detection_frame_in_zone"] # Run the apply function in the starlark script to process all # detections and add the extra time_in_area_seconds field to them. diff --git a/project-time-in-area-analytics/config_process_zone_filter.conf b/project-time-in-area-analytics/config_process_zone_filter.conf new file mode 100644 index 0000000..b7b0bd4 --- /dev/null +++ b/project-time-in-area-analytics/config_process_zone_filter.conf @@ -0,0 +1,28 @@ +# Zone Filter Processor +# +# This processor filters detection frames based on a configured zone polygon. +# Only detections with bounding box centers inside the zone are passed through. +# If INCLUDE_ZONE_POLYGON is not set, all detections pass through unchanged. +# +# The zone polygon is defined in normalized coordinates [-1, 1]: +# - X-axis: -1 (left) to +1 (right) +# - Y-axis: -1 (bottom) to +1 (top) +# +# Input: detection_frame metrics from input processor +# Output: detection_frame_in_zone metrics (only those with centers inside the zone) +# +# Environment Variables: +# - INCLUDE_ZONE_POLYGON: JSON array of zones (required) +# Format: [[vertex1, vertex2, vertex3, ...]] +# Example: [[[-0.5,-0.5],[-0.5,0.5],[0.5,0.5],[0.5,-0.5]]] +# Currently only supports a single zone (multi-zone planned for future) + +[[processors.starlark]] + # Only consume metrics with name "detection_frame" + namepass = ["detection_frame"] + + # Path to Starlark script + script = "${HELPER_FILES_DIR}/zone_filter.star" + + [processors.starlark.constants] + zone_polygon_json = "${INCLUDE_ZONE_POLYGON}" diff --git a/project-time-in-area-analytics/test_files/sample_data_feeder.sh b/project-time-in-area-analytics/test_files/sample_data_feeder.sh index 7e2895e..215846a 100755 --- a/project-time-in-area-analytics/test_files/sample_data_feeder.sh +++ b/project-time-in-area-analytics/test_files/sample_data_feeder.sh @@ -28,8 +28,8 @@ fi # Process data line by line and output it as pure json. while IFS= read -r line; do - # Skip empty lines - if [ -n "$line" ]; then + # Skip empty lines and comment lines (starting with #) + if [ -n "$line" ] && [ "${line#\#}" = "$line" ]; then # Process this frame with jq echo "$line" | jq -c ' .frame as $frame | diff --git a/project-time-in-area-analytics/test_files/test_zone_filter_complex.jsonl b/project-time-in-area-analytics/test_files/test_zone_filter_complex.jsonl new file mode 100644 index 0000000..37383a9 --- /dev/null +++ b/project-time-in-area-analytics/test_files/test_zone_filter_complex.jsonl @@ -0,0 +1,30 @@ +# Test data for zone filter with complex concave zone +# Use zone: [[[-0.97,-0.97],[-0.97,0.97],[-0.1209,0.9616],[-0.7562,0.6008],[-0.7652,0.05951],[0.05851,0.5204],[0.04617,-0.9691]]] +# +# This is a complex concave polygon that tests the zone filter algorithm. +# +# Test coverage with 7 detections: +# +# CONCAVE OUTSIDE (2 points): +# In the concave section of the polygon, i.e. outside the zone. +# +# INSIDE (2 points): +# In the zone. +# +# RIGHT OUTSIDE (2 points): +# Outside the zone on the right side of the zone. +# +# LEFT OUTSIDE (2 points): +# Outside the zone on the left side of the zone. + +{"frame": {"observations": [{"bounding_box": {"bottom": 0.20, "left": 0.35, "right": 0.40, "top": 0.15}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:01.000000Z", "track_id": "concave_outside_a"}], "timestamp": "2024-01-15T10:00:01.000000Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.35, "left": 0.35, "right": 0.40, "top": 0.25}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:01.000000Z", "track_id": "concave_outside_b"}], "timestamp": "2024-01-15T10:00:01.000000Z"}} + +{"frame": {"observations": [{"bounding_box": {"bottom": 0.55, "left": 0.15, "right": 0.25, "top": 0.45}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:02.000000Z", "track_id": "inside_c"}], "timestamp": "2024-01-15T10:00:02.000000Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.45, "left": 0.05, "right": 0.15, "top": 0.35}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:06.000000Z", "track_id": "inside_d"}], "timestamp": "2024-01-15T10:00:06.000000Z"}} + +{"frame": {"observations": [{"bounding_box": {"bottom": 0.55, "left": 0.85, "right": 0.95, "top": 0.45}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:03.000000Z", "track_id": "right_outside_e"}], "timestamp": "2024-01-15T10:00:03.000000Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.15, "left": 0.75, "right": 0.85, "top": 0.05}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:04.000000Z", "track_id": "right_outside_f"}], "timestamp": "2024-01-15T10:00:04.000000Z"}} + +{"frame": {"observations": [{"bounding_box": {"bottom": 0.55, "left": -0.05, "right": 0.05, "top": 0.45}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:05.000000Z", "track_id": "left_outside_g"}], "timestamp": "2024-01-15T10:00:05.000000Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.45, "left": -0.05, "right": 0.05, "top": 0.35}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:06.000000Z", "track_id": "left_outside_h"}], "timestamp": "2024-01-15T10:00:06.000000Z"}} diff --git a/project-time-in-area-analytics/test_files/test_zone_filter_simple.jsonl b/project-time-in-area-analytics/test_files/test_zone_filter_simple.jsonl new file mode 100644 index 0000000..a867ebb --- /dev/null +++ b/project-time-in-area-analytics/test_files/test_zone_filter_simple.jsonl @@ -0,0 +1,37 @@ +# Test data for zone filter with asymmetric rectangular zone +# Use zone: [[[-0.6, -0.4], [0.2, -0.4], [0.2, 0.2], [-0.6, 0.2]]] +# +# Test coverage with 9 detections: +# +# INSIDE zone: +# a: inside zone +# b: inside zone +# +# BOUNDARY: +# c: on zone boundary (x=0.2, right edge) +# +# OUTSIDE zone: +# d: outside zone (above, y > 0.2) +# e: outside zone (above, y > 0.2) +# +# CROSSING edge (movement pattern): +# f: on zone boundary (y=-0.4, bottom edge) +# g: inside zone +# h: outside zone (below, y < -0.4) +# +# OUTSIDE zone: +# i: outside zone (left, x < -0.6) + +{"frame": {"observations": [{"bounding_box": {"bottom": 0.55, "left": 0.25, "right": 0.65, "top": 0.35}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:01.000000Z", "track_id": "inside_zone_a"}], "timestamp": "2024-01-15T10:00:01.000000Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.55, "left": 0.25, "right": 0.75, "top": 0.35}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:02.000000Z", "track_id": "inside_zone_b"}], "timestamp": "2024-01-15T10:00:02.000000Z"}} + +{"frame": {"observations": [{"bounding_box": {"bottom": 0.6, "left": 0.6, "right": 0.6, "top": 0.5}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:03.000000Z", "track_id": "on_boundary_c"}], "timestamp": "2024-01-15T10:00:03.000000Z"}} + +{"frame": {"observations": [{"bounding_box": {"bottom": 0.3, "left": 0.2, "right": 0.7, "top": 0.1}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:04.000000Z", "track_id": "above_zone_d"}], "timestamp": "2024-01-15T10:00:04.000000Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.2, "left": 0.3, "right": 0.8, "top": 0.0}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:05.000000Z", "track_id": "above_zone_e"}], "timestamp": "2024-01-15T10:00:05.000000Z"}} + +{"frame": {"observations": [{"bounding_box": {"bottom": 0.8, "left": 0.0, "right": 0.5, "top": 0.6}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:06.000000Z", "track_id": "crossing_edge_f"}], "timestamp": "2024-01-15T10:00:06.000000Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.55, "left": 0.2, "right": 0.6, "top": 0.35}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:07.000000Z", "track_id": "crossing_edge_g"}], "timestamp": "2024-01-15T10:00:07.000000Z"}} +{"frame": {"observations": [{"bounding_box": {"bottom": 0.2, "left": 0.2, "right": 0.6, "top": 0.0}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:08.000000Z", "track_id": "crossing_edge_h"}], "timestamp": "2024-01-15T10:00:08.000000Z"}} + +{"frame": {"observations": [{"bounding_box": {"bottom": 0.5, "left": -0.2, "right": 0.2, "top": 0.3}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:09.000000Z", "track_id": "left_of_zone_i"}], "timestamp": "2024-01-15T10:00:09.000000Z"}} diff --git a/project-time-in-area-analytics/test_scripts/visualize_zone_tests.py b/project-time-in-area-analytics/test_scripts/visualize_zone_tests.py new file mode 100644 index 0000000..968dc97 --- /dev/null +++ b/project-time-in-area-analytics/test_scripts/visualize_zone_tests.py @@ -0,0 +1,300 @@ +#!/usr/bin/env python3 +""" +Extract center coordinates from bounding boxes in detection data. + +Parses JSON detection frames from a JSONL file and outputs the center point (cx, cy) +for each detection in both coordinate systems: +- [0, 1]: Detection bounding box coordinate system +- [-1, 1]: AXIS normalized coordinate system (zone polygon system) + +Dependencies: +- click: Command-line interface framework +- prettytable: ASCII table formatting +- matplotlib: For zone and detection visualization +- numpy: For numerical operations +""" + +import json +import re +import sys +from pathlib import Path + +import click +import cv2 +import numpy as np +from prettytable import PrettyTable + +# Import visualization functions from visualize_zone +sys.path.insert(0, str(Path(__file__).parent)) +from visualize_zone import draw_zone_on_image, normalize_to_pixel + + +def parse_json(data_str): + """Parse JSONL data and return list of observation dicts.""" + observations = [] + for line in data_str.strip().split("\n"): + line = line.strip() + if line and not line.startswith("#"): + frame_data = json.loads(line) + observations.extend(frame_data["frame"]["observations"]) + + return observations + + +def parse_zone_from_file(filepath): + """Extract zone polygons from JSONL file comments. + + Expected format: # Use zone: [[[x1,y1],[x2,y2],...]] (array of zones) + + Returns: + Tuple of (zones_list, bbox_tuple) where: + - zones_list: List of zones, where each zone is a list of [x, y] coordinates + - bbox_tuple: (x_min, x_max, y_min, y_max) for visualization (covering all zones) + + Raises: + ValueError: If zone definition comment is not found in file. + """ + with open(filepath, "r") as f: + for line in f: + line = line.strip() + if line.startswith("# Use zone:"): + # Parse the JSON array of zones format: [[[x1,y1],[x2,y2],...]] + match = re.search(r"# Use zone:\s*(\[\[\[.*\]\]\])", line) + + if match: + try: + zone_str = match.group(1) + # Parse JSON array of zones + zones = json.loads(zone_str) + + # Validate zones format + if not isinstance(zones, list) or len(zones) == 0: + raise ValueError( + "Expected array of zones with at least one zone" + ) + + # Validate each zone + for i, zone in enumerate(zones): + if not isinstance(zone, list) or len(zone) < 3: + raise ValueError( + f"Zone {i} must have at least 3 vertices" + ) + + # Calculate bounding box covering all zones + all_x_coords = [] + all_y_coords = [] + for zone in zones: + all_x_coords.extend([v[0] for v in zone]) + all_y_coords.extend([v[1] for v in zone]) + + bbox = ( + min(all_x_coords), + max(all_x_coords), + min(all_y_coords), + max(all_y_coords), + ) + + return zones, bbox + except ( + json.JSONDecodeError, + ValueError, + TypeError, + IndexError, + ) as e: + raise ValueError( + f"Failed to parse zone polygon.\n" + f"Expected format: '# Use zone: [[[x1,y1],[x2,y2],...]]' (array of zones)\n" + f"Got: '{line}'\n" + f"Error: {e}" + ) + else: + raise ValueError( + f"Zone definition format mismatch.\n" + f"Expected format: '# Use zone: [[[x1,y1],[x2,y2],...]]' (array of zones)\n" + f"Got: '{line}'" + ) + + raise ValueError( + f"Zone definition not found in {filepath}.\n" + f"File must contain a comment line with format:\n" + f"# Use zone: [[x1,y1],[x2,y2],...] in [-1, 1] range" + ) + + +def draw_detections_on_image(img, observations, detection_labels): + """Draw detection centers on image with labels. + + Args: + img: OpenCV image (modified in place) + observations: List of observation dictionaries with bounding_box + detection_labels: List of detection labels (a, b, c, etc.) + """ + height, width = img.shape[:2] + + for idx, (obs, label) in enumerate(zip(observations[:26], detection_labels)): + bbox = obs["bounding_box"] + # Convert [0,1] bounding box to [-1,1] for consistency + cx_0_1 = (bbox["left"] + bbox["right"]) / 2 + cy_0_1 = (bbox["top"] + bbox["bottom"]) / 2 + cx_minus1_1 = cx_0_1 * 2 - 1 + cy_minus1_1 = 1 - cy_0_1 * 2 + + # Convert to pixel coordinates + px, py = normalize_to_pixel(cx_minus1_1, cy_minus1_1, width, height) + + # Draw center point + color = (0, 255, 0) # Green in BGR + cv2.circle(img, (px, py), radius=8, color=color, thickness=-1) + cv2.circle(img, (px, py), radius=8, color=(0, 0, 0), thickness=2) + + # Draw label + cv2.putText( + img, + label, + (px + 12, py - 5), + cv2.FONT_HERSHEY_SIMPLEX, + 0.6, + color, + 2, + cv2.LINE_AA, + ) + + +def visualize_zone_and_detections(observations, zones, output_file=None, display=False): + """Create visualization of zone(s) and detections. + + Args: + observations: List of observation dictionaries + zones: List of zones, where each zone is a list of [x, y] coordinates in [-1,1] range + output_file: Optional path to save visualization + display: Whether to display the image (requires output_file to be None or file saved first) + """ + # Create blank image (normalized coordinate space visualization) + img_size = 600 + img = ( + np.ones((img_size, img_size, 3), dtype=np.uint8) * 240 + ) # Light gray background + + # Draw all zones using different colors + zone_colors = [ + (200, 100, 100), # Blue-ish (BGR) + (100, 200, 100), # Green-ish + (100, 100, 200), # Red-ish + (200, 200, 100), # Cyan-ish + (200, 100, 200), # Magenta-ish + ] + + for i, zone_vertices in enumerate(zones): + color = zone_colors[i % len(zone_colors)] + draw_zone_on_image(img, zone_vertices, color, 2, 0.2) + + # Draw detections + detection_labels = [chr(ord("a") + i) for i in range(len(observations[:26]))] + draw_detections_on_image(img, observations, detection_labels) + + # Add coordinate system labels + cv2.putText(img, "-1.0", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 1) + cv2.putText( + img, "+1.0", (img_size - 50, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 1 + ) + cv2.putText( + img, "-1.0", (10, img_size - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 1 + ) + cv2.putText(img, "+1.0", (10, 50), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 1) + + # Save if requested + if output_file: + cv2.imwrite(output_file, img) + click.echo(f"✓ Saved visualization to: {output_file}") + + # Display if requested + if display: + window_name = "Zone and Detections (press any key to close)" + cv2.imshow(window_name, img) + click.echo("✓ Displaying visualization. Press any key to close...") + cv2.waitKey(0) + cv2.destroyAllWindows() + + return img + + +@click.command() +@click.argument("jsonl_file", type=click.Path(exists=True)) +@click.option( + "--no-visualize", is_flag=True, help="Disable visualization (only print table)" +) +@click.option( + "--save-to", + "-s", + type=click.Path(), + help="Save visualization image to this path instead of displaying", +) +def main(jsonl_file, no_visualize, save_to): + """Extract center coordinates from detections in JSONL_FILE.""" + with open(jsonl_file, "r") as f: + data = f.read() + + observations = parse_json(data) + + if len(observations) > 26: + click.echo( + f"Warning: Only first 26 detections will be shown (found {len(observations)})", + err=True, + ) + + # Parse zones from file + try: + zones, _ = parse_zone_from_file(jsonl_file) + except ValueError as e: + click.echo(f"Error: {e}", err=True) + zones = None + + # Create table first + table = PrettyTable() + table.field_names = [ + "Detection", + "Track ID", + "Center X (0...1)", + "Center Y (0...1)", + "Center X (-1...1)", + "Center Y (-1...1)", + ] + table.align["Track ID"] = "l" + + for idx, obs in enumerate(observations[:26]): + bbox = obs["bounding_box"] + track_id = obs["track_id"] + + cx_0_1 = (bbox["left"] + bbox["right"]) / 2 + cy_0_1 = (bbox["top"] + bbox["bottom"]) / 2 + + # Convert to [-1, 1] coordinate system + cx_minus1_1 = cx_0_1 * 2 - 1 + cy_minus1_1 = 1 - cy_0_1 * 2 + + detection_label = chr(ord("a") + idx) + + table.add_row( + [ + detection_label, + track_id, + f"{cx_0_1:.2g}", + f"{cy_0_1:.2g}", + f"{cx_minus1_1:.2g}", + f"{cy_minus1_1:.2g}", + ] + ) + + click.echo(table) + + # Create visualization unless disabled + if not no_visualize and zones: + # Display live by default, save to file if --save-to provided + display = not save_to + visualize_zone_and_detections( + observations, zones, output_file=save_to, display=display + ) + + +if __name__ == "__main__": + main() diff --git a/project-time-in-area-analytics/track_duration_calculator.star b/project-time-in-area-analytics/track_duration_calculator.star index 99db3db..b4f718d 100644 --- a/project-time-in-area-analytics/track_duration_calculator.star +++ b/project-time-in-area-analytics/track_duration_calculator.star @@ -114,8 +114,12 @@ def apply(metric): # Get the time in area for this track ID time_in_area = get_time_in_area_seconds(track_id, current_seconds, state["track_state"]) - # Add the time in area to the metric (always add it, filtering happens in next processor) - metric.fields["time_in_area_seconds"] = time_in_area + # Create a new metric with duration calculated name (before adding fields) + duration_metric = deepcopy(metric) + duration_metric.name = "detection_frame_with_duration" - # Return the same metric with the time in area added - return metric + # Add the time in area to the new metric (filtering happens in next processor) + duration_metric.fields["time_in_area_seconds"] = time_in_area + + # Return the new metric with the time in area added + return duration_metric diff --git a/project-time-in-area-analytics/zone_filter.star b/project-time-in-area-analytics/zone_filter.star new file mode 100644 index 0000000..86e9e4f --- /dev/null +++ b/project-time-in-area-analytics/zone_filter.star @@ -0,0 +1,265 @@ +load("logging.star", "log") +load("json.star", "json") + +def edge_crosses_horizontal_line(y, y1, y2): + """Check if an edge crosses the horizontal line at y.""" + return (y1 > y) != (y2 > y) + + +def calculate_edge_x_at_y(x1, y1, x2, y2, y): + """Calculate the x-coordinate where the edge intersects the horizontal line at y.""" + return (x2 - x1) * (y - y1) / (y2 - y1) + x1 + + +def ray_intersects_edge(x, y, x1, y1, x2, y2): + """ + Check if a ray cast from point (x,y) to the right intersects the edge. + + Args: + x, y: Point coordinates + x1, y1: First vertex of edge + x2, y2: Second vertex of edge + + Returns: + True if the rightward ray from (x,y) intersects the edge + """ + if not edge_crosses_horizontal_line(y, y1, y2): + return False + + edge_x = calculate_edge_x_at_y(x1, y1, x2, y2, y) + return x < edge_x + + +def is_point_in_polygon(x, y, vertices): + """ + Check if a point (x, y) is inside a polygon defined by vertices. + Uses ray tracing algorithm: cast a ray to the right and count intersections. + + This implementation uses only basic operations for easy porting to Starlark. + + Args: + x: X coordinate of the point (normalized, 0 to 1 range for detection coords) + y: Y coordinate of the point (normalized, 0 to 1 range for detection coords) + vertices: List of [x, y] vertices defining the polygon (in detection coords) + + Returns: + True if point is inside the polygon, False otherwise + """ + num_vertices = len(vertices) + inside = False + + # Check each edge of the polygon + j = num_vertices - 1 # Start with the last vertex + for i in range(num_vertices): + xi, yi = vertices[i] + xj, yj = vertices[j] + + if ray_intersects_edge(x, y, xi, yi, xj, yj): + inside = not inside + + j = i + + return inside + + +def normalize_vertex_to_detection_coords(vertex): + """ + Convert zone vertices from normalized AXIS coordinates [-1, 1] to detection coords [0, 1]. + + In AXIS coordinate system: + - x: -1 (left) to 1 (right) + - y: -1 (bottom) to 1 (top) + + In detection bounding box coordinates: + - x: 0 (left) to 1 (right) + - y: 0 (top) to 1 (bottom) + + Args: + vertex: [x, y] in AXIS normalized coordinates [-1, 1] + + Returns: + [x, y] in detection coordinates [0, 1] + """ + x, y = vertex + x_normalized = (x + 1) / 2.0 + y_normalized = (1 - y) / 2.0 + return [x_normalized, y_normalized] + + +def get_bounding_box_center(bbox_left, bbox_right, bbox_top, bbox_bottom): + """ + Calculate the center point of a bounding box. + + Args: + bbox_left: Left edge of bounding box (0 to 1) + bbox_right: Right edge of bounding box (0 to 1) + bbox_top: Top edge of bounding box (0 to 1) + bbox_bottom: Bottom edge of bounding box (0 to 1) + + Returns: + [center_x, center_y] in detection coordinates [0, 1] + """ + center_x = (bbox_left + bbox_right) / 2.0 + center_y = (bbox_top + bbox_bottom) / 2.0 + return [center_x, center_y] + + +def parse_zone_polygon_json(json_str): + """ + Parse zone polygon from JSON string using json.decode(). + + Supports both formats: + - Single polygon: [[-0.6, -0.4], [0.2, -0.4], ...] + - Array of zones: [[...], [...], ...] + + Args: + json_str: JSON string containing zone polygon(s) + + Returns: + List of zones, where each zone is a list of [x, y] vertices in AXIS coords [-1, 1]. + Returns None if parsing fails. + """ + log.debug("parse_zone_polygon_json: input = " + repr(json_str)) + + # Use json.decode with default parameter (None if parsing fails) + parsed = json.decode(json_str, default=None) + + if parsed == None: + log.error("parse_zone_polygon_json: Failed to decode JSON. Input was: " + repr(json_str) + ".") + return None + + if not parsed: + log.error("parse_zone_polygon_json: Decoded JSON is empty. Input was: " + repr(json_str)) + return None + + # Expected format: Array of zones [[[-0.6, -0.4], [0.2, -0.4], ...], [[...], ...]] + # Each zone is an array of [x, y] vertices + + # Check if parsed is a list + if type(parsed) != "list": + log.error("parse_zone_polygon_json: Expected array of zones. Got type: " + str(type(parsed))) + return None + + # Check if it's an array of zones (each element should be a list of vertices) + if len(parsed) == 0: + log.error("parse_zone_polygon_json: Array of zones is empty") + return None + + # Validate that first element is a list (zone) + if type(parsed[0]) != "list": + log.error("parse_zone_polygon_json: Expected array of zones (array of arrays). First element is not a list. Got: " + repr(parsed)) + return None + + zones = parsed + log.debug("parse_zone_polygon_json: Parsed " + str(len(zones)) + " zone(s)") + return zones + + +def get_or_parse_zone(state, zone_polygon_json): + """ + Get cached zone or parse and cache a new one from JSON string. + + This function implements lazy parsing and caching to avoid re-parsing + the zone on every metric. The zone is cached in Telegraf's shared state dict. + + Args: + state: Telegraf's shared state dictionary (persists across apply calls) + zone_polygon_json: JSON string containing zone polygon(s) + + Returns: + Tuple of (zone_vertices, zone_vertices_normalized) or (None, None) if not configured + - zone_vertices: List of [x, y] in AXIS coords [-1, 1] + - zone_vertices_normalized: List of [x, y] in detection coords [0, 1] + """ + # Check if zone is already cached + if state.get("zone_cached"): + log.debug("get_or_parse_zone: Using cached zone") + return state.get("zone_vertices"), state.get("zone_vertices_normalized") + + # If no zone JSON provided, return None + if zone_polygon_json == "" or zone_polygon_json == None: + log.debug("get_or_parse_zone: No zone_polygon_json configured") + return None, None + + # Parse the zone + log.debug("get_or_parse_zone: Parsing zone_polygon_json = " + repr(zone_polygon_json)) + zones = parse_zone_polygon_json(zone_polygon_json) + + if zones == None or len(zones) == 0: + log.warn("get_or_parse_zone: Failed to parse zone polygon") + return None, None + + if len(zones) > 1: + log.error("get_or_parse_zone: Only one zone supported, but got " + str(len(zones))) + return None, None + + zone = zones[0] + + if len(zone) < 3: + log.error("get_or_parse_zone: Zone must have at least 3 vertices, but got " + str(len(zone))) + return None, None + + log.info("get_or_parse_zone: Successfully parsed zone with " + str(len(zone)) + " vertices") + + # Normalize vertices from AXIS coords [-1, 1] to detection coords [0, 1] + normalized_vertices = [] + for vertex in zone: + normalized_vertices.append(normalize_vertex_to_detection_coords(vertex)) + + # Cache the zone in Telegraf's shared state + state["zone_cached"] = True + state["zone_vertices"] = zone + state["zone_vertices_normalized"] = normalized_vertices + + return zone, normalized_vertices + + +def apply(metric): + """ + Filter detection metrics based on whether their center is inside the configured zone. + + The zone is defined by zone_polygon_json constant (passed via Telegraf config). + Only one zone is currently supported. + + Telegraf provides a special 'state' dictionary that persists across apply() calls, + which we use to cache the parsed zone and avoid re-parsing on every metric. + + Args: + metric: Telegraf metric object + + Returns: + The metric if its center is inside the zone, None otherwise (filtered out) + """ + # Get or parse the zone (uses Telegraf's state dict for caching) + zone_vertices, zone_vertices_normalized = get_or_parse_zone(state, zone_polygon_json) + + # If no zone is configured, pass all metrics through + if zone_vertices == None: + return metric + + # Extract bounding box coordinates from metric + bbox_left = metric.fields.get("bounding_box_left") + bbox_right = metric.fields.get("bounding_box_right") + bbox_top = metric.fields.get("bounding_box_top") + bbox_bottom = metric.fields.get("bounding_box_bottom") + + if bbox_left == None or bbox_right == None or bbox_top == None or bbox_bottom == None: + log.debug("apply: Metric missing bounding box fields") + return metric + + # Calculate center point of bounding box + center_x, center_y = get_bounding_box_center(bbox_left, bbox_right, bbox_top, bbox_bottom) + + # Get track_id for logging + track_id = metric.fields.get("track_id", "unknown") + + # Check if center is inside the zone + if is_point_in_polygon(center_x, center_y, zone_vertices_normalized): + log.debug("apply: track_id=" + str(track_id) + " center=(" + str(center_x) + "," + str(center_y) + ") INSIDE zone") + # Create a new metric with the zone-filtered name + filtered_metric = deepcopy(metric) + filtered_metric.name = "detection_frame_in_zone" + return filtered_metric + else: + log.debug("apply: track_id=" + str(track_id) + " center=(" + str(center_x) + "," + str(center_y) + ") OUTSIDE zone - filtering out") + return None From 032d7214e5e1c3b5409f9cba0f7b6e515c095977 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Thu, 30 Oct 2025 18:01:12 +0100 Subject: [PATCH 24/42] Improve debug logging from starlark scripts --- .../config_process_overlay_transform.conf | 31 ++++++++++++------- .../config_process_rate_limit.conf | 12 +++++-- .../config_process_threshold_filter.conf | 7 ++++- .../config_process_zone_filter.conf | 2 +- .../track_duration_calculator.star | 5 +++ .../zone_filter.star | 6 ++-- 6 files changed, 43 insertions(+), 20 deletions(-) diff --git a/project-time-in-area-analytics/config_process_overlay_transform.conf b/project-time-in-area-analytics/config_process_overlay_transform.conf index 91b388e..80b5f27 100644 --- a/project-time-in-area-analytics/config_process_overlay_transform.conf +++ b/project-time-in-area-analytics/config_process_overlay_transform.conf @@ -7,48 +7,55 @@ [[processors.starlark]] # Source code for the transformation logic source = ''' +load("logging.star", "log") + def apply(metric): # Only process rate-limited metrics if metric.name != "rate_limited_alert_frame": return None - + + track_id = metric.fields.get("track_id", "unknown") + # Extract bounding box coordinates (flat format from device) - if ("bounding_box_left" in metric.fields and - "bounding_box_right" in metric.fields and - "bounding_box_top" in metric.fields and + if ("bounding_box_left" in metric.fields and + "bounding_box_right" in metric.fields and + "bounding_box_top" in metric.fields and "bounding_box_bottom" in metric.fields): - + left = metric.fields["bounding_box_left"] right = metric.fields["bounding_box_right"] top = metric.fields["bounding_box_top"] bottom = metric.fields["bounding_box_bottom"] - + # Calculate center coordinates in analytics system (0.0 to 1.0) center_x = (left + right) / 2.0 center_y = (top + bottom) / 2.0 - + # Transform to VAPIX API coordinate system (-1.0 to 1.0) # Formula: vapix_coord = (analytics_coord - 0.5) * 2 vapix_x = (center_x - 0.5) * 2.0 vapix_y = (center_y - 0.5) * 2.0 - + + log.debug("apply: track_id=" + track_id + " transformed coords from analytics (" + str(center_x) + "," + str(center_y) + ") to VAPIX (" + str(vapix_x) + "," + str(vapix_y) + ")") + # Create new overlay metric by copying the original overlay_frame = deepcopy(metric) overlay_frame.name = "overlay_frame" - + # Set transformed coordinates overlay_frame.fields["center_x"] = vapix_x overlay_frame.fields["center_y"] = vapix_y - + # Remove original bounding box fields since we now have center coordinates overlay_frame.fields.pop("bounding_box_left", None) overlay_frame.fields.pop("bounding_box_right", None) overlay_frame.fields.pop("bounding_box_top", None) overlay_frame.fields.pop("bounding_box_bottom", None) - + # Return the overlay metric return overlay_frame - + # If no bounding box, drop the metric (can't create overlay without position) + log.warn("apply: track_id=" + track_id + " missing bounding box fields - dropping metric") return None ''' diff --git a/project-time-in-area-analytics/config_process_rate_limit.conf b/project-time-in-area-analytics/config_process_rate_limit.conf index 9d9bbba..3b00a95 100644 --- a/project-time-in-area-analytics/config_process_rate_limit.conf +++ b/project-time-in-area-analytics/config_process_rate_limit.conf @@ -2,6 +2,7 @@ [[processors.starlark]] source = ''' load("time.star", "time") +load("logging.star", "log") state = {} @@ -15,17 +16,22 @@ def apply(metric): # want to only let one message per second hit the overlay API. last_update = state.get("last_update") or 0 current_time = time.now().unix - + # Calculate time since last update in seconds time_since_last = current_time - last_update - + + track_id = metric.fields.get("track_id", "unknown") + # If less than 1 second has passed, drop the message if time_since_last < 1.0: + log.debug("apply: track_id=" + track_id + " rate limited - only " + str(time_since_last) + "s since last alert (< 1s)") return None - + # Update the last update time state["last_update"] = current_time + log.debug("apply: track_id=" + track_id + " passed rate limit - " + str(time_since_last) + "s since last alert") + # Create a new metric with the rate-limited name rate_limited_metric = deepcopy(metric) rate_limited_metric.name = "rate_limited_alert_frame" diff --git a/project-time-in-area-analytics/config_process_threshold_filter.conf b/project-time-in-area-analytics/config_process_threshold_filter.conf index 6ba8de9..5fda779 100644 --- a/project-time-in-area-analytics/config_process_threshold_filter.conf +++ b/project-time-in-area-analytics/config_process_threshold_filter.conf @@ -14,20 +14,25 @@ namepass = ["detection_frame_with_duration"] source = ''' +load("logging.star", "log") + def apply(metric): - # Get time in area from the metric + # Get time in area and track_id from the metric time_in_area = metric.fields.get("time_in_area_seconds", 0) + track_id = metric.fields.get("track_id", "unknown") # Parse threshold as float to ensure proper comparison with float time values threshold = float(${ALERT_THRESHOLD_SECONDS}) # Only return metrics that exceed or equal the threshold if time_in_area >= threshold: + log.debug("apply: track_id=" + track_id + " duration=" + str(time_in_area) + "s >= threshold=" + str(threshold) + "s - PASS") # Create a new metric with the alerting name alerting_metric = deepcopy(metric) alerting_metric.name = "alerting_frame" return alerting_metric # Track doesn't exceed threshold - don't output + log.debug("apply: track_id=" + track_id + " duration=" + str(time_in_area) + "s < threshold=" + str(threshold) + "s - FILTER OUT") return None ''' diff --git a/project-time-in-area-analytics/config_process_zone_filter.conf b/project-time-in-area-analytics/config_process_zone_filter.conf index b7b0bd4..098cc18 100644 --- a/project-time-in-area-analytics/config_process_zone_filter.conf +++ b/project-time-in-area-analytics/config_process_zone_filter.conf @@ -23,6 +23,6 @@ # Path to Starlark script script = "${HELPER_FILES_DIR}/zone_filter.star" - + [processors.starlark.constants] zone_polygon_json = "${INCLUDE_ZONE_POLYGON}" diff --git a/project-time-in-area-analytics/track_duration_calculator.star b/project-time-in-area-analytics/track_duration_calculator.star index b4f718d..a13f007 100644 --- a/project-time-in-area-analytics/track_duration_calculator.star +++ b/project-time-in-area-analytics/track_duration_calculator.star @@ -1,4 +1,5 @@ load("time.star", "time") +load("logging.star", "log") def parse_timestamp_to_float_seconds(timestamp_str): """Parse ISO 8601 timestamp string to Unix seconds as float @@ -50,6 +51,7 @@ def get_time_in_area_seconds(track_id, current_seconds, track_state): "first_seen_seconds": current_seconds, "last_seen_seconds": current_seconds } + log.debug("get_time_in_area_seconds: track_id=" + track_id + " first detection at " + str(current_seconds)) return 0 # Time in area is 0 on first detection # Update last seen time @@ -58,6 +60,7 @@ def get_time_in_area_seconds(track_id, current_seconds, track_state): # Calculate time in area - simple subtraction since both are in seconds first_seen_seconds = track_state[track_id]["first_seen_seconds"] time_in_area = current_seconds - first_seen_seconds + log.debug("get_time_in_area_seconds: track_id=" + track_id + " duration=" + str(time_in_area) + "s (first_seen=" + str(first_seen_seconds) + ", current=" + str(current_seconds) + ")") return time_in_area def cleanup_stale_tracks(current_seconds, track_state, max_stale_seconds): @@ -79,6 +82,8 @@ def cleanup_stale_tracks(current_seconds, track_state, max_stale_seconds): tracks_to_remove.append(track_id) # Remove stale tracks + if len(tracks_to_remove) > 0: + log.debug("cleanup_stale_tracks: Removing " + str(len(tracks_to_remove)) + " stale track(s): " + str(tracks_to_remove)) for track_id in tracks_to_remove: track_state.pop(track_id) diff --git a/project-time-in-area-analytics/zone_filter.star b/project-time-in-area-analytics/zone_filter.star index 86e9e4f..5e045d2 100644 --- a/project-time-in-area-analytics/zone_filter.star +++ b/project-time-in-area-analytics/zone_filter.star @@ -177,8 +177,8 @@ def get_or_parse_zone(state, zone_polygon_json): return state.get("zone_vertices"), state.get("zone_vertices_normalized") # If no zone JSON provided, return None - if zone_polygon_json == "" or zone_polygon_json == None: - log.debug("get_or_parse_zone: No zone_polygon_json configured") + if zone_polygon_json == "" or zone_polygon_json == None or zone_polygon_json[:2] == "${": + log.error("get_or_parse_zone: No INCLUDE_ZONE_POLYGON configured") return None, None # Parse the zone @@ -244,7 +244,7 @@ def apply(metric): bbox_bottom = metric.fields.get("bounding_box_bottom") if bbox_left == None or bbox_right == None or bbox_top == None or bbox_bottom == None: - log.debug("apply: Metric missing bounding box fields") + log.warning("apply: Metric missing bounding box fields") return metric # Calculate center point of bounding box From bc79723cd1c02b3e8672aaa70e29ee96ffc6eb7c Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Thu, 30 Oct 2025 18:32:54 +0100 Subject: [PATCH 25/42] Add missing files --- project-time-in-area-analytics/.gitignore | 1 + project-time-in-area-analytics/config_agent.conf | 7 +++++++ 2 files changed, 8 insertions(+) create mode 100644 project-time-in-area-analytics/.gitignore create mode 100644 project-time-in-area-analytics/config_agent.conf diff --git a/project-time-in-area-analytics/.gitignore b/project-time-in-area-analytics/.gitignore new file mode 100644 index 0000000..1e58491 --- /dev/null +++ b/project-time-in-area-analytics/.gitignore @@ -0,0 +1 @@ +combined.conf diff --git a/project-time-in-area-analytics/config_agent.conf b/project-time-in-area-analytics/config_agent.conf new file mode 100644 index 0000000..b76f73a --- /dev/null +++ b/project-time-in-area-analytics/config_agent.conf @@ -0,0 +1,7 @@ +# Global Telegraf Agent Configuration + +[agent] + # Enable debug logging if the environment variable + # is set by the FixedIT Data Agent. + debug = ${TELEGRAF_DEBUG} + From 31ad78c326f456518c74a04106e877239934c85a Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Mon, 3 Nov 2025 16:33:33 +0100 Subject: [PATCH 26/42] Add instructions to get zone --- .../.images/zone_auth.png | Bin 0 -> 74661 bytes .../.images/zone_post.png | Bin 0 -> 122202 bytes .../README_INCLUDE_ZONE.md | 31 ++++++++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 project-time-in-area-analytics/.images/zone_auth.png create mode 100644 project-time-in-area-analytics/.images/zone_post.png diff --git a/project-time-in-area-analytics/.images/zone_auth.png b/project-time-in-area-analytics/.images/zone_auth.png new file mode 100644 index 0000000000000000000000000000000000000000..6671511fbad305b3de6e70106f9ff523aaeede00 GIT binary patch literal 74661 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 mBO)kOYTd!QCOj-QC^gZeB^= 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 literal 0 HcmV?d00001 diff --git a/project-time-in-area-analytics/README_INCLUDE_ZONE.md b/project-time-in-area-analytics/README_INCLUDE_ZONE.md index 1d8319e..1a93372 100644 --- a/project-time-in-area-analytics/README_INCLUDE_ZONE.md +++ b/project-time-in-area-analytics/README_INCLUDE_ZONE.md @@ -24,6 +24,37 @@ This will contain information about the configuration, including one or multiple The example above is from the `data.scenarios[0].triggers[0].vertices` field. +You can also use [Postman](https://www.postman.com/downloads/) to get the zone from the camera. + +First: + +- Set method to `POST` +- Set the URL (including the IP of the camera) +- Press `Authorization` and select `Digest Auth` +- Specify the username and password for the camera + +![Postman digest auth and URL](.images/zone_auth.png) + +Then: + +- Press `Body` +- Specify `raw` format and select `JSON` in the drop-down +- Specify the following JSON: + ```json + { + "apiVersion": "1.2", + "context": "zone_export", + "method": "getConfiguration" + } + ``` +- Press the `Send` button + +![Postman body and response](.images/zone_post.png) + +You can see the zone in the `vertices` field. To use the zone in the application configuration, you need to have it with no new lines. Press the `Raw` button to remove the new lines. + +Note that when you use the zone in the application configuration, you need to enclose it in an extra pair of square brackets. The format of it should look like this: `[[[-1.0, -1.0], [1.0, -1.0], [1.0, 1.0], [-1.0, 1.0]]]`. + ## The coordinate system The AXIS Object Analytics API uses a normalized coordinate system where all coordinates are in the range **[-1, 1]**: From 137c11cc30f2224c85a6bb66cb0f3ff113cfc227 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Mon, 3 Nov 2025 16:53:00 +0100 Subject: [PATCH 27/42] Make workflow work with no configured zone This commit makes sure that the zone default will be to include the whole view as a zone if nothing else is configured. --- project-time-in-area-analytics/zone_filter.star | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/project-time-in-area-analytics/zone_filter.star b/project-time-in-area-analytics/zone_filter.star index 5e045d2..f7182ac 100644 --- a/project-time-in-area-analytics/zone_filter.star +++ b/project-time-in-area-analytics/zone_filter.star @@ -228,14 +228,21 @@ def apply(metric): metric: Telegraf metric object Returns: - The metric if its center is inside the zone, None otherwise (filtered out) + The metric renamed to detection_frame_in_zone. If no zone is configured, all metrics + pass through. If a zone is configured, only metrics with centers inside the zone pass through. """ # Get or parse the zone (uses Telegraf's state dict for caching) zone_vertices, zone_vertices_normalized = get_or_parse_zone(state, zone_polygon_json) - # If no zone is configured, pass all metrics through + # If no zone is configured, pass all metrics through with renamed metric name, + # but show a warning since it might be unintended. if zone_vertices == None: - return metric + log.warn("No INCLUDE_ZONE_POLYGON configured - passing all detections through. " + + "To explicitly include the entire frame, set INCLUDE_ZONE_POLYGON to " + + "[[[-1.0, -1.0], [1.0, -1.0], [1.0, 1.0], [-1.0, 1.0]]]") + pass_through_metric = deepcopy(metric) + pass_through_metric.name = "detection_frame_in_zone" + return pass_through_metric # Extract bounding box coordinates from metric bbox_left = metric.fields.get("bounding_box_left") From 1efb3e5747c8fe893bbdbc3a03209bd44809cd1c Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Mon, 3 Nov 2025 16:57:14 +0100 Subject: [PATCH 28/42] Add missing readme file --- .../test_scripts/requirements.txt | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 project-time-in-area-analytics/test_scripts/requirements.txt diff --git a/project-time-in-area-analytics/test_scripts/requirements.txt b/project-time-in-area-analytics/test_scripts/requirements.txt new file mode 100644 index 0000000..da827d7 --- /dev/null +++ b/project-time-in-area-analytics/test_scripts/requirements.txt @@ -0,0 +1,7 @@ +click==8.2.1 +matplotlib==3.9.4 +numpy==2.2.1 +opencv-python==4.12.0.88 +paramiko==3.5.0 +prettytable==3.16.0 +types-paramiko==4.0.0.20250809 \ No newline at end of file From 494903d9701aa68e5f57808dc0ed4db1013b84b0 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Mon, 3 Nov 2025 17:02:00 +0100 Subject: [PATCH 29/42] Fix automatic tests --- .../actions/python-quality-check/action.yml | 2 +- ...-time-in-area-analytics-python-quality.yml | 2 + .../project-time-in-area-test-analytics.yml | 71 ++++++++++--------- .../test_scripts/visualize_zone.py | 18 +++-- .../test_scripts/visualize_zone_tests.py | 35 +++++---- 5 files changed, 74 insertions(+), 54 deletions(-) diff --git a/.github/actions/python-quality-check/action.yml b/.github/actions/python-quality-check/action.yml index d6999dd..fb2b926 100644 --- a/.github/actions/python-quality-check/action.yml +++ b/.github/actions/python-quality-check/action.yml @@ -64,7 +64,7 @@ runs: shell: bash working-directory: ${{ inputs.working-directory }} run: | - isort --check-only --diff . + isort --check-only --diff --profile black . - name: Run black shell: bash diff --git a/.github/workflows/project-time-in-area-analytics-python-quality.yml b/.github/workflows/project-time-in-area-analytics-python-quality.yml index 52374ab..d8147c2 100644 --- a/.github/workflows/project-time-in-area-analytics-python-quality.yml +++ b/.github/workflows/project-time-in-area-analytics-python-quality.yml @@ -26,3 +26,5 @@ jobs: uses: ./.github/actions/python-quality-check with: working-directory: project-time-in-area-analytics/test_scripts + # Disable E1101 for OpenCV false positives (no-member errors for cv2) + pylint-options: --disable=E1101 diff --git a/.github/workflows/project-time-in-area-test-analytics.yml b/.github/workflows/project-time-in-area-test-analytics.yml index 3367a49..d1c28f2 100644 --- a/.github/workflows/project-time-in-area-test-analytics.yml +++ b/.github/workflows/project-time-in-area-test-analytics.yml @@ -200,9 +200,10 @@ jobs: # Run Telegraf pipeline with ONLY time-in-area calculation (no threshold filtering) TELEGRAF_OUTPUT=$(telegraf --config config_input_scene_detections.conf \ - --config config_process_track_duration.conf \ - --config test_files/config_output_stdout.conf \ - --once 2>/dev/null) + --config config_process_zone_filter.conf \ + --config config_process_track_duration.conf \ + --config test_files/config_output_stdout.conf \ + --once 2>/dev/null) echo "Telegraf output: $TELEGRAF_OUTPUT" @@ -211,7 +212,7 @@ jobs: # Verify all detections have time_in_area_seconds field MISSING_FIELD_COUNT=$(echo "$TELEGRAF_OUTPUT" | \ - jq -r 'select(.name == "detection_frame" and (.fields.time_in_area_seconds == null or .fields.time_in_area_seconds == "")) | .fields.track_id' 2>/dev/null | wc -l) + jq -r 'select(.name == "detection_frame_with_duration" and (.fields.time_in_area_seconds == null or .fields.time_in_area_seconds == "")) | .fields.track_id' 2>/dev/null | wc -l) if [ "$MISSING_FIELD_COUNT" -gt 0 ]; then echo "❌ FAIL: Found $MISSING_FIELD_COUNT detections without time_in_area_seconds field" @@ -257,7 +258,7 @@ jobs: # Find corresponding actual value actual_time=$(echo "$TELEGRAF_OUTPUT" | \ - jq -r "select(.name == \"detection_frame\" and .fields.track_id == \"$track_id\" and .fields.timestamp == \"$timestamp\") | .fields.time_in_area_seconds" 2>/dev/null) + jq -r "select(.name == \"detection_frame_with_duration\" and .fields.track_id == \"$track_id\" and .fields.timestamp == \"$timestamp\") | .fields.time_in_area_seconds" 2>/dev/null) if [ -n "$actual_time" ] && [ "$actual_time" != "null" ]; then # Simple string comparison for expected values (within tolerance) @@ -308,10 +309,11 @@ jobs: # Run Telegraf pipeline TELEGRAF_OUTPUT=$(telegraf --config config_input_scene_detections.conf \ - --config config_process_track_duration.conf \ - --config config_process_threshold_filter.conf \ - --config test_files/config_output_stdout.conf \ - --once 2>/dev/null) + --config config_process_zone_filter.conf \ + --config config_process_track_duration.conf \ + --config config_process_threshold_filter.conf \ + --config test_files/config_output_stdout.conf \ + --once 2>/dev/null) echo "Telegraf output: $TELEGRAF_OUTPUT" @@ -319,9 +321,9 @@ jobs: EXPECTED_UNIQUE_TRACKS=0 EXPECTED_ALARM_DETECTIONS=0 - # Count unique track IDs and alarm detections in detection_frame outputs - ACTUAL_UNIQUE_TRACKS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "detection_frame") | .fields.track_id' 2>/dev/null | sort -u | wc -l) - ACTUAL_ALARM_DETECTIONS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "detection_frame") | .fields.track_id' 2>/dev/null | wc -l) + # Count unique track IDs and alarm detections in alerting_frame outputs + ACTUAL_UNIQUE_TRACKS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "alerting_frame") | .fields.track_id' 2>/dev/null | sort -u | wc -l) + ACTUAL_ALARM_DETECTIONS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "alerting_frame") | .fields.track_id' 2>/dev/null | wc -l) echo "Expected unique tracks: $EXPECTED_UNIQUE_TRACKS" echo "Expected alarm detections: $EXPECTED_ALARM_DETECTIONS" @@ -349,10 +351,11 @@ jobs: # Run Telegraf pipeline TELEGRAF_OUTPUT=$(telegraf --config config_input_scene_detections.conf \ - --config config_process_track_duration.conf \ - --config config_process_threshold_filter.conf \ - --config test_files/config_output_stdout.conf \ - --once 2>/dev/null) + --config config_process_zone_filter.conf \ + --config config_process_track_duration.conf \ + --config config_process_threshold_filter.conf \ + --config test_files/config_output_stdout.conf \ + --once 2>/dev/null) echo "Telegraf output: $TELEGRAF_OUTPUT" @@ -363,10 +366,10 @@ jobs: EXPECTED_ALARM_DETECTIONS=10 EXPECTED_TRACKS="track_001 track_002 track_003 track_005" - # Extract unique track IDs and count alarm detections from detection_frame outputs - ACTUAL_TRACKS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "detection_frame") | .fields.track_id' 2>/dev/null | sort -u | tr '\n' ' ' | sed 's/ $//') + # Extract unique track IDs and count alarm detections from alerting_frame outputs + ACTUAL_TRACKS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "alerting_frame") | .fields.track_id' 2>/dev/null | sort -u | tr '\n' ' ' | sed 's/ $//') ACTUAL_UNIQUE_TRACKS=$(echo "$ACTUAL_TRACKS" | wc -w) - ACTUAL_ALARM_DETECTIONS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "detection_frame") | .fields.track_id' 2>/dev/null | wc -l) + ACTUAL_ALARM_DETECTIONS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "alerting_frame") | .fields.track_id' 2>/dev/null | wc -l) echo "Expected unique tracks: $EXPECTED_UNIQUE_TRACKS" echo "Expected alarm detections: $EXPECTED_ALARM_DETECTIONS" @@ -396,10 +399,11 @@ jobs: # Run Telegraf pipeline TELEGRAF_OUTPUT=$(telegraf --config config_input_scene_detections.conf \ - --config config_process_track_duration.conf \ - --config config_process_threshold_filter.conf \ - --config test_files/config_output_stdout.conf \ - --once 2>/dev/null) + -config config_process_zone_filter.conf \ + --config config_process_track_duration.conf \ + --config config_process_threshold_filter.conf \ + --config test_files/config_output_stdout.conf \ + --once 2>/dev/null) echo "Telegraf output: $TELEGRAF_OUTPUT" @@ -410,10 +414,10 @@ jobs: EXPECTED_ALARM_DETECTIONS=18 EXPECTED_TRACKS="track_001 track_002 track_003 track_004 track_005" - # Extract unique track IDs and count alarm detections from detection_frame outputs - ACTUAL_TRACKS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "detection_frame") | .fields.track_id' 2>/dev/null | sort -u | tr '\n' ' ' | sed 's/ $//') + # Extract unique track IDs and count alarm detections from alerting_frame outputs + ACTUAL_TRACKS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "alerting_frame") | .fields.track_id' 2>/dev/null | sort -u | tr '\n' ' ' | sed 's/ $//') ACTUAL_UNIQUE_TRACKS=$(echo "$ACTUAL_TRACKS" | wc -w) - ACTUAL_ALARM_DETECTIONS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "detection_frame") | .fields.track_id' 2>/dev/null | wc -l) + ACTUAL_ALARM_DETECTIONS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "alerting_frame") | .fields.track_id' 2>/dev/null | wc -l) echo "Expected unique tracks: $EXPECTED_UNIQUE_TRACKS" echo "Expected alarm detections: $EXPECTED_ALARM_DETECTIONS" @@ -443,10 +447,11 @@ jobs: # Run Telegraf pipeline TELEGRAF_OUTPUT=$(telegraf --config config_input_scene_detections.conf \ - --config config_process_track_duration.conf \ - --config config_process_threshold_filter.conf \ - --config test_files/config_output_stdout.conf \ - --once 2>/dev/null) + --config config_process_zone_filter.conf \ + --config config_process_track_duration.conf \ + --config config_process_threshold_filter.conf \ + --config test_files/config_output_stdout.conf \ + --once 2>/dev/null) echo "Telegraf output: $TELEGRAF_OUTPUT" @@ -457,10 +462,10 @@ jobs: EXPECTED_ALARM_DETECTIONS=2 EXPECTED_TRACKS="track_005" - # Extract unique track IDs and count alarm detections from detection_frame outputs - ACTUAL_TRACKS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "detection_frame") | .fields.track_id' 2>/dev/null | sort -u | tr '\n' ' ' | sed 's/ $//') + # Extract unique track IDs and count alarm detections from alerting_frame outputs + ACTUAL_TRACKS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "alerting_frame") | .fields.track_id' 2>/dev/null | sort -u | tr '\n' ' ' | sed 's/ $//') ACTUAL_UNIQUE_TRACKS=$(echo "$ACTUAL_TRACKS" | wc -w) - ACTUAL_ALARM_DETECTIONS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "detection_frame") | .fields.track_id' 2>/dev/null | wc -l) + ACTUAL_ALARM_DETECTIONS=$(echo "$TELEGRAF_OUTPUT" | jq -r 'select(.name == "alerting_frame") | .fields.track_id' 2>/dev/null | wc -l) echo "Expected unique tracks: $EXPECTED_UNIQUE_TRACKS" echo "Expected alarm detections: $EXPECTED_ALARM_DETECTIONS" diff --git a/project-time-in-area-analytics/test_scripts/visualize_zone.py b/project-time-in-area-analytics/test_scripts/visualize_zone.py index 5deada8..7cd37e0 100755 --- a/project-time-in-area-analytics/test_scripts/visualize_zone.py +++ b/project-time-in-area-analytics/test_scripts/visualize_zone.py @@ -8,6 +8,7 @@ import json import random + import click import cv2 import numpy as np @@ -23,7 +24,9 @@ def calculate_edge_x_at_y(x1, y1, x2, y2, y): return (x2 - x1) * (y - y1) / (y2 - y1) + x1 -def ray_intersects_edge(x, y, x1, y1, x2, y2): +def ray_intersects_edge( + x, y, x1, y1, x2, y2 +): # pylint: disable=too-many-arguments,too-many-positional-arguments """ Check if a ray cast from point (x,y) to the right intersects the edge. @@ -102,7 +105,9 @@ def normalize_to_pixel(x, y, width, height): return pixel_x, pixel_y -def draw_zone_on_image(img, vertices_list, color_bgr, thickness, fill_alpha): +def draw_zone_on_image( + img, vertices_list, color_bgr, thickness, fill_alpha +): # pylint: disable=too-many-locals """ Draw a zone polygon on the image with semi-transparent fill. @@ -160,7 +165,7 @@ def draw_test_points_on_image(img, vertices_list, num_points): inside_count = 0 outside_count = 0 - for i in range(num_points): + for _ in range(num_points): # Generate random normalized coordinates test_x = random.uniform(-1.0, 1.0) test_y = random.uniform(-1.0, 1.0) @@ -268,6 +273,7 @@ def draw_test_points_on_image(img, vertices_list, num_points): def visualize_zone( vertices, image, save_to, no_show, color, thickness, fill_alpha, add_random_points ): + # pylint: disable=too-many-arguments,too-many-positional-arguments,too-many-locals """ Visualize AXIS Object Analytics zone on a camera image. @@ -347,10 +353,10 @@ def visualize_zone( cv2.destroyAllWindows() # Print zone info - click.echo(f"\n📊 Zone Information:") + click.echo("\n📊 Zone Information:") click.echo(f" Image size: {width}x{height}") click.echo(f" Vertices: {len(pixel_points)}") - click.echo(f"\n Normalized → Pixel coordinates:") + click.echo("\n Normalized → Pixel coordinates:") for i, (norm_pt, pixel_pt) in enumerate(zip(vertices_list, pixel_points)): click.echo( f" [{i}] ({norm_pt[0]:+.4f}, {norm_pt[1]:+.4f}) → ({pixel_pt[0]}, {pixel_pt[1]})" @@ -362,4 +368,4 @@ def visualize_zone( if __name__ == "__main__": - visualize_zone() + visualize_zone() # pylint: disable=no-value-for-parameter diff --git a/project-time-in-area-analytics/test_scripts/visualize_zone_tests.py b/project-time-in-area-analytics/test_scripts/visualize_zone_tests.py index 968dc97..907aa2a 100644 --- a/project-time-in-area-analytics/test_scripts/visualize_zone_tests.py +++ b/project-time-in-area-analytics/test_scripts/visualize_zone_tests.py @@ -26,7 +26,10 @@ # Import visualization functions from visualize_zone sys.path.insert(0, str(Path(__file__).parent)) -from visualize_zone import draw_zone_on_image, normalize_to_pixel +from visualize_zone import ( # noqa: E402 pylint: disable=wrong-import-position + draw_zone_on_image, + normalize_to_pixel, +) def parse_json(data_str): @@ -54,7 +57,8 @@ def parse_zone_from_file(filepath): Raises: ValueError: If zone definition comment is not found in file. """ - with open(filepath, "r") as f: + # pylint: disable=too-many-nested-blocks + with open(filepath, "r", encoding="utf-8") as f: for line in f: line = line.strip() if line.startswith("# Use zone:"): @@ -102,26 +106,29 @@ def parse_zone_from_file(filepath): IndexError, ) as e: raise ValueError( - f"Failed to parse zone polygon.\n" - f"Expected format: '# Use zone: [[[x1,y1],[x2,y2],...]]' (array of zones)\n" + "Failed to parse zone polygon.\n" + "Expected format: '# Use zone: [[[x1,y1],[x2,y2],...]]' " + "(array of zones)\n" f"Got: '{line}'\n" f"Error: {e}" - ) + ) from e else: raise ValueError( - f"Zone definition format mismatch.\n" - f"Expected format: '# Use zone: [[[x1,y1],[x2,y2],...]]' (array of zones)\n" + "Zone definition format mismatch.\n" + "Expected format: '# Use zone: [[[x1,y1],[x2,y2],...]]' (array of zones)\n" f"Got: '{line}'" ) raise ValueError( f"Zone definition not found in {filepath}.\n" - f"File must contain a comment line with format:\n" - f"# Use zone: [[x1,y1],[x2,y2],...] in [-1, 1] range" + "File must contain a comment line with format:\n" + "# Use zone: [[x1,y1],[x2,y2],...] in [-1, 1] range" ) -def draw_detections_on_image(img, observations, detection_labels): +def draw_detections_on_image( + img, observations, detection_labels +): # pylint: disable=too-many-locals """Draw detection centers on image with labels. Args: @@ -131,7 +138,7 @@ def draw_detections_on_image(img, observations, detection_labels): """ height, width = img.shape[:2] - for idx, (obs, label) in enumerate(zip(observations[:26], detection_labels)): + for _, (obs, label) in enumerate(zip(observations[:26], detection_labels)): bbox = obs["bounding_box"] # Convert [0,1] bounding box to [-1,1] for consistency cx_0_1 = (bbox["left"] + bbox["right"]) / 2 @@ -229,9 +236,9 @@ def visualize_zone_and_detections(observations, zones, output_file=None, display type=click.Path(), help="Save visualization image to this path instead of displaying", ) -def main(jsonl_file, no_visualize, save_to): +def main(jsonl_file, no_visualize, save_to): # pylint: disable=too-many-locals """Extract center coordinates from detections in JSONL_FILE.""" - with open(jsonl_file, "r") as f: + with open(jsonl_file, "r", encoding="utf-8") as f: data = f.read() observations = parse_json(data) @@ -297,4 +304,4 @@ def main(jsonl_file, no_visualize, save_to): if __name__ == "__main__": - main() + main() # pylint: disable=no-value-for-parameter From 408851d495d232040a7c9a96a49cc2c89cdf33c0 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Tue, 4 Nov 2025 11:24:52 +0100 Subject: [PATCH 30/42] Add automated tests for the zone filtering --- .../project-time-in-area-test-analytics.yml | 94 +++++++++++++++++++ project-time-in-area-analytics/README.md | 23 +++-- 2 files changed, 109 insertions(+), 8 deletions(-) diff --git a/.github/workflows/project-time-in-area-test-analytics.yml b/.github/workflows/project-time-in-area-test-analytics.yml index d1c28f2..8deed36 100644 --- a/.github/workflows/project-time-in-area-test-analytics.yml +++ b/.github/workflows/project-time-in-area-test-analytics.yml @@ -187,6 +187,100 @@ jobs: # Verify installation telegraf --version + - name: Test Zone Filter Only (Rectangular Zone) + run: | + cd project-time-in-area-analytics + + echo "Testing zone filter in isolation" + + # Set up environment variables + export HELPER_FILES_DIR="$(pwd)" + export CONSUMER_SCRIPT="test_files/sample_data_feeder.sh" + export SAMPLE_FILE="test_files/test_zone_filter_simple.jsonl" + + # Set the zone polygon from the test file (simple rectangular zone) + export INCLUDE_ZONE_POLYGON='[[[-0.6, -0.4], [0.2, -0.4], [0.2, 0.2], [-0.6, 0.2]]]' + + # Run Telegraf with zone filter only + TELEGRAF_OUTPUT=$(telegraf --config config_input_scene_detections.conf \ + --config config_process_zone_filter.conf \ + --config test_files/config_output_stdout.conf \ + --once 2>/dev/null) + + echo "Checking zone filter output..." + + # Expected: Three detections (inside_zone_a, inside_zone_b, crossing_edge_g) + EXPECTED_TRACKS="crossing_edge_g inside_zone_a inside_zone_b" + EXPECTED_COUNT=3 + + # Count unique track_ids that passed through the filter (sorted alphabetically) + ACTUAL_TRACKS=$(echo "$TELEGRAF_OUTPUT" | \ + jq -r 'select(.name == "detection_frame_in_zone") | .fields.track_id' 2>/dev/null | \ + sort -u | tr '\n' ' ' | sed 's/ $//') + + ACTUAL_COUNT=$(echo "$TELEGRAF_OUTPUT" | \ + jq -r 'select(.name == "detection_frame_in_zone") | .fields.track_id' 2>/dev/null | \ + sort -u | wc -l) + + echo "Expected tracks: $EXPECTED_TRACKS" + echo "Expected count: $EXPECTED_COUNT" + echo "Actual tracks: $ACTUAL_TRACKS" + echo "Actual count: $ACTUAL_COUNT" + + if [ "$ACTUAL_COUNT" -eq "$EXPECTED_COUNT" ] && [ "$ACTUAL_TRACKS" = "$EXPECTED_TRACKS" ]; then + echo "✅ PASS: Zone filter correctly filtered to $ACTUAL_COUNT detections with correct track IDs" + else + echo "❌ FAIL: Expected $EXPECTED_COUNT detections ($EXPECTED_TRACKS) but found $ACTUAL_COUNT ($ACTUAL_TRACKS)" + exit 1 + fi + + - name: Test Zone Filter (Complex Concave Polygon) + run: | + cd project-time-in-area-analytics + + echo "Testing zone filter with complex concave polygon" + + # Set up environment variables + export HELPER_FILES_DIR="$(pwd)" + export CONSUMER_SCRIPT="test_files/sample_data_feeder.sh" + export SAMPLE_FILE="test_files/test_zone_filter_complex.jsonl" + + # Set the complex concave zone polygon from the test file + export INCLUDE_ZONE_POLYGON='[[[-0.97,-0.97],[-0.97,0.97],[-0.1209,0.9616],[-0.7562,0.6008],[-0.7652,0.05951],[0.05851,0.5204],[0.04617,-0.9691]]]' + + # Run Telegraf with zone filter only + TELEGRAF_OUTPUT=$(telegraf --config config_input_scene_detections.conf \ + --config config_process_zone_filter.conf \ + --config test_files/config_output_stdout.conf \ + --once 2>/dev/null) + + echo "Checking complex zone filter output..." + + # Expected: Only two detections (inside_c, inside_d) should pass through + EXPECTED_TRACKS="inside_c inside_d" + EXPECTED_COUNT=2 + + # Count unique track_ids that passed through the filter (sorted alphabetically) + ACTUAL_TRACKS=$(echo "$TELEGRAF_OUTPUT" | \ + jq -r 'select(.name == "detection_frame_in_zone") | .fields.track_id' 2>/dev/null | \ + sort -u | tr '\n' ' ' | sed 's/ $//') + + ACTUAL_COUNT=$(echo "$TELEGRAF_OUTPUT" | \ + jq -r 'select(.name == "detection_frame_in_zone") | .fields.track_id' 2>/dev/null | \ + sort -u | wc -l) + + echo "Expected tracks: $EXPECTED_TRACKS" + echo "Expected count: $EXPECTED_COUNT" + echo "Actual tracks: $ACTUAL_TRACKS" + echo "Actual count: $ACTUAL_COUNT" + + if [ "$ACTUAL_COUNT" -eq "$EXPECTED_COUNT" ] && [ "$ACTUAL_TRACKS" = "$EXPECTED_TRACKS" ]; then + echo "✅ PASS: Complex zone filter correctly filtered to $ACTUAL_COUNT detections with correct track IDs" + else + echo "❌ FAIL: Expected $EXPECTED_COUNT detections ($EXPECTED_TRACKS) but found $ACTUAL_COUNT ($ACTUAL_TRACKS)" + exit 1 + fi + - name: Test Telegraf pipeline - Time-in-area calculation only run: | cd project-time-in-area-analytics diff --git a/project-time-in-area-analytics/README.md b/project-time-in-area-analytics/README.md index bc807a4..e367beb 100644 --- a/project-time-in-area-analytics/README.md +++ b/project-time-in-area-analytics/README.md @@ -669,18 +669,25 @@ This project includes comprehensive automated testing to ensure both the visuali The automated tests run on every push and pull request via the `project-time-in-area-test-analytics.yml` workflow, which includes: -**Two Independent Test Jobs:** +**Three Independent Test Jobs:** -- **Track Heatmap Viewer Tests**: Validates alarm detection in the visualization script -- **Telegraf Pipeline Tests**: Validates time-in-area calculations and threshold filtering +In file `project-time-in-area-test-analytics.yml`: -**Three Test Scenarios per Tool:** +- `test-telegraf-pipeline`: Validates time-in-area algorithms and workflows in Telegraf +- `test-visualization-script`: Validates alarm detection in the test visualization script -- **No alarms scenario**: High threshold (15s) should produce no alarms -- **Some alarms scenario**: Moderate threshold (2s) should identify 3 specific tracks -- **All alarms scenario**: Low threshold (0s) should identify all 4 tracks +In file `project-time-in-area-analytics-python-quality.yml`: -Both tools now behave identically, calculating total time-in-area including brief gaps under 60 seconds. If a gap is longer than 60 seconds (should not happen in data from the Axis cameras!?), then the Telegraf pipeline would forget about the track and the time-in-area would be reset to 0 once the track reappears. +- `python-quality`: Validates Python code quality in the test scripts + +If you have [Act](https://github.com/nektos/act) installed, you can run the tests locally from the terminal. Note that you need to run them from the root of the repo. Run e.g. the following: + +```bash +cd .. +act -j test-telegraf-pipeline -W .github/workflows/project-time-in-area-test-analytics.yml -P ubuntu-24.04=catthehacker/ubuntu:act-24.04 +``` + +If you have the [VS Code plugin "GitHub Local Actions"](https://marketplace.visualstudio.com/items?itemName=SanjulaGanepola.github-local-actions) installed, then you can just open the plugin and press play on any of the test jobs to run them locally. ### Test Data From 827ea3d95649e83813c39d5b13fc2279e8a9f9eb Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Tue, 4 Nov 2025 11:35:24 +0100 Subject: [PATCH 31/42] Fix sonarcloud warnings --- .../overlay_manager.sh | 16 +++++++++++----- .../test_scripts/visualize_zone_tests.py | 3 +-- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/project-time-in-area-analytics/overlay_manager.sh b/project-time-in-area-analytics/overlay_manager.sh index 022568a..b285e24 100755 --- a/project-time-in-area-analytics/overlay_manager.sh +++ b/project-time-in-area-analytics/overlay_manager.sh @@ -37,6 +37,10 @@ FONT_SIZE="${FONT_SIZE:-45}" # Fixed context name for all overlays to ensure only one is active OVERLAY_CONTEXT="time_in_area_overlay" +# Strings that we will match from API responses. These should never +# be changed! +API_ERROR_STRING="error" + # Validate required environment variables for VAPIX API access if [ -z "$VAPIX_USERNAME" ] || [ -z "$VAPIX_PASSWORD" ]; then printf "VAPIX_USERNAME and VAPIX_PASSWORD must be set" >&2 @@ -48,9 +52,11 @@ DEBUG="${TELEGRAF_DEBUG:-false}" # Function to log debug messages to a file debug_log_file() { + _debug_message=$1 if [ "$DEBUG" = "true" ]; then - echo "DEBUG: $1" >> "${HELPER_FILES_DIR}/overlay_manager.debug" 2>/dev/null || true + echo "DEBUG: $_debug_message" >> "${HELPER_FILES_DIR}/overlay_manager.debug" 2>/dev/null || true fi + return 0 } # Helper function to add a new overlay @@ -92,7 +98,7 @@ add_overlay() { debug_log_file "API call exit code: $api_exit" debug_log_file "API response: $api_response" - if [ $api_exit -ne 0 ] || echo "$api_response" | grep -q '"error"'; then + if [ $api_exit -ne 0 ] || echo "$api_response" | grep -q "\"$API_ERROR_STRING\""; then debug_log_file "ERROR: Failed to create overlay" return 1 fi @@ -142,7 +148,7 @@ update_overlay() { debug_log_file "API call exit code: $api_exit" debug_log_file "API response: $api_response" - if [ $api_exit -ne 0 ] || echo "$api_response" | grep -q '"error"'; then + if [ $api_exit -ne 0 ] || echo "$api_response" | grep -q "\"$API_ERROR_STRING\""; then # Note that this might be intentional since the caller might try # to update an overlay and only create a new one if it doesn't exist. debug_log_file "INFO: Failed to update overlay" @@ -179,7 +185,7 @@ delete_overlay() { debug_log_file "API call exit code: $api_exit" debug_log_file "API response: $api_response" - if [ $api_exit -ne 0 ] || echo "$api_response" | grep -q '"error"'; then + if [ $api_exit -ne 0 ] || echo "$api_response" | grep -q "\"$API_ERROR_STRING\""; then debug_log_file "ERROR: Failed to delete overlay" return 1 fi @@ -245,7 +251,7 @@ control_overlay() { fi # Check if response contains an error - if echo "$api_response" | grep -q '"error"'; then + if echo "$api_response" | grep -q "\"$API_ERROR_STRING\""; then debug_log_file "ERROR: VAPIX API returned error - Action: $action" debug_log_file "ERROR: Response: $api_response" printf "Failed to %s overlay" "$action" >&2 diff --git a/project-time-in-area-analytics/test_scripts/visualize_zone_tests.py b/project-time-in-area-analytics/test_scripts/visualize_zone_tests.py index 907aa2a..c212384 100644 --- a/project-time-in-area-analytics/test_scripts/visualize_zone_tests.py +++ b/project-time-in-area-analytics/test_scripts/visualize_zone_tests.py @@ -100,8 +100,7 @@ def parse_zone_from_file(filepath): return zones, bbox except ( - json.JSONDecodeError, - ValueError, + ValueError, # parent to json.JSONDecodeError TypeError, IndexError, ) as e: From 7eebdef26519316b09fe5e0301a6aca22eee7c97 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Tue, 4 Nov 2025 13:36:34 +0100 Subject: [PATCH 32/42] Add filter for object class --- .../project-time-in-area-test-analytics.yml | 33 +++-- project-time-in-area-analytics/README.md | 67 ++++++++- .../axis_scene_detection_consumer.sh | 2 +- .../config_process_class_filter.conf | 128 ++++++++++++++++++ .../config_process_zone_filter.conf | 6 +- .../test_files/sample_data_feeder.sh | 2 +- .../test_files/simple_tracks.jsonl | 70 ++++++++-- 7 files changed, 282 insertions(+), 26 deletions(-) create mode 100644 project-time-in-area-analytics/config_process_class_filter.conf diff --git a/.github/workflows/project-time-in-area-test-analytics.yml b/.github/workflows/project-time-in-area-test-analytics.yml index 8deed36..ffaa413 100644 --- a/.github/workflows/project-time-in-area-test-analytics.yml +++ b/.github/workflows/project-time-in-area-test-analytics.yml @@ -200,9 +200,11 @@ jobs: # Set the zone polygon from the test file (simple rectangular zone) export INCLUDE_ZONE_POLYGON='[[[-0.6, -0.4], [0.2, -0.4], [0.2, 0.2], [-0.6, 0.2]]]' + export OBJECT_TYPE_FILTER="ALL_UNVERIFIED" - # Run Telegraf with zone filter only + # Run Telegraf with class filter and zone filter TELEGRAF_OUTPUT=$(telegraf --config config_input_scene_detections.conf \ + --config config_process_class_filter.conf \ --config config_process_zone_filter.conf \ --config test_files/config_output_stdout.conf \ --once 2>/dev/null) @@ -247,9 +249,11 @@ jobs: # Set the complex concave zone polygon from the test file export INCLUDE_ZONE_POLYGON='[[[-0.97,-0.97],[-0.97,0.97],[-0.1209,0.9616],[-0.7562,0.6008],[-0.7652,0.05951],[0.05851,0.5204],[0.04617,-0.9691]]]' + export OBJECT_TYPE_FILTER="ALL_UNVERIFIED" - # Run Telegraf with zone filter only + # Run Telegraf with class filter and zone filter only TELEGRAF_OUTPUT=$(telegraf --config config_input_scene_detections.conf \ + --config config_process_class_filter.conf \ --config config_process_zone_filter.conf \ --config test_files/config_output_stdout.conf \ --once 2>/dev/null) @@ -291,9 +295,11 @@ jobs: export HELPER_FILES_DIR="$(pwd)" export CONSUMER_SCRIPT="test_files/sample_data_feeder.sh" export SAMPLE_FILE="test_files/simple_tracks.jsonl" + export OBJECT_TYPE_FILTER="ALL_UNVERIFIED" # Run Telegraf pipeline with ONLY time-in-area calculation (no threshold filtering) TELEGRAF_OUTPUT=$(telegraf --config config_input_scene_detections.conf \ + --config config_process_class_filter.conf \ --config config_process_zone_filter.conf \ --config config_process_track_duration.conf \ --config test_files/config_output_stdout.conf \ @@ -327,7 +333,6 @@ jobs: # track_002: starts at 10:00:03, increases over time ["track_002:2024-01-15T10:00:03.345678Z"]="0.0" - ["track_002:2024-01-15T10:00:04.901234Z"]="1.6" ["track_002:2024-01-15T10:00:05.567890Z"]="2.2" # track_003: starts at 10:00:10, increases over time @@ -335,6 +340,10 @@ jobs: ["track_003:2024-01-15T10:00:11.890123Z"]="1.7" ["track_003:2024-01-15T10:00:12.456789Z"]="2.2" + # track_004: starts at 10:00:12.456789, only 2 detections + ["track_004:2024-01-15T10:00:12.456789Z"]="0.0" + ["track_004:2024-01-15T10:00:13.012345Z"]="0.6" + # track_005: starts at 10:00:30, increases every 30s ["track_005:2024-01-15T10:00:30.000000Z"]="0.0" ["track_005:2024-01-15T10:01:00.000000Z"]="30.0" @@ -400,9 +409,11 @@ jobs: export CONSUMER_SCRIPT="test_files/sample_data_feeder.sh" export SAMPLE_FILE="test_files/simple_tracks.jsonl" export ALERT_THRESHOLD_SECONDS="200" + export OBJECT_TYPE_FILTER="ALL_UNVERIFIED" # Run Telegraf pipeline TELEGRAF_OUTPUT=$(telegraf --config config_input_scene_detections.conf \ + --config config_process_class_filter.conf \ --config config_process_zone_filter.conf \ --config config_process_track_duration.conf \ --config config_process_threshold_filter.conf \ @@ -442,9 +453,11 @@ jobs: export CONSUMER_SCRIPT="test_files/sample_data_feeder.sh" export SAMPLE_FILE="test_files/simple_tracks.jsonl" export ALERT_THRESHOLD_SECONDS="2" + export OBJECT_TYPE_FILTER="ALL_UNVERIFIED" # Run Telegraf pipeline TELEGRAF_OUTPUT=$(telegraf --config config_input_scene_detections.conf \ + --config config_process_class_filter.conf \ --config config_process_zone_filter.conf \ --config config_process_track_duration.conf \ --config config_process_threshold_filter.conf \ @@ -453,11 +466,11 @@ jobs: echo "Telegraf output: $TELEGRAF_OUTPUT" - # Expected: 4 unique tracks, 10 alarm detections + # Expected: 4 unique tracks, 9 alarm detections # Note: Once a track exceeds the threshold, ALL subsequent detections for that track # trigger alarms (i.e., get output by the threshold filter) EXPECTED_UNIQUE_TRACKS=4 - EXPECTED_ALARM_DETECTIONS=10 + EXPECTED_ALARM_DETECTIONS=9 EXPECTED_TRACKS="track_001 track_002 track_003 track_005" # Extract unique track IDs and count alarm detections from alerting_frame outputs @@ -490,10 +503,12 @@ jobs: export CONSUMER_SCRIPT="test_files/sample_data_feeder.sh" export SAMPLE_FILE="test_files/simple_tracks.jsonl" export ALERT_THRESHOLD_SECONDS="0" + export OBJECT_TYPE_FILTER="ALL_UNVERIFIED" # Run Telegraf pipeline TELEGRAF_OUTPUT=$(telegraf --config config_input_scene_detections.conf \ - -config config_process_zone_filter.conf \ + --config config_process_class_filter.conf \ + --config config_process_zone_filter.conf \ --config config_process_track_duration.conf \ --config config_process_threshold_filter.conf \ --config test_files/config_output_stdout.conf \ @@ -501,11 +516,11 @@ jobs: echo "Telegraf output: $TELEGRAF_OUTPUT" - # Expected: 5 unique tracks, 18 alarm detections (all tracks: track_001, track_002, track_003, track_004, track_005) + # Expected: 5 unique tracks, 17 alarm detections (all tracks: track_001, track_002, track_003, track_004, track_005) # Note: Once a track exceeds the threshold, ALL subsequent detections for that track # trigger alarms (i.e., get output by the threshold filter) EXPECTED_UNIQUE_TRACKS=5 - EXPECTED_ALARM_DETECTIONS=18 + EXPECTED_ALARM_DETECTIONS=17 EXPECTED_TRACKS="track_001 track_002 track_003 track_004 track_005" # Extract unique track IDs and count alarm detections from alerting_frame outputs @@ -538,9 +553,11 @@ jobs: export CONSUMER_SCRIPT="test_files/sample_data_feeder.sh" export SAMPLE_FILE="test_files/simple_tracks.jsonl" export ALERT_THRESHOLD_SECONDS="120" + export OBJECT_TYPE_FILTER="ALL_UNVERIFIED" # Run Telegraf pipeline TELEGRAF_OUTPUT=$(telegraf --config config_input_scene_detections.conf \ + --config config_process_class_filter.conf \ --config config_process_zone_filter.conf \ --config config_process_track_duration.conf \ --config config_process_threshold_filter.conf \ diff --git a/project-time-in-area-analytics/README.md b/project-time-in-area-analytics/README.md index e367beb..2106ecf 100644 --- a/project-time-in-area-analytics/README.md +++ b/project-time-in-area-analytics/README.md @@ -8,10 +8,12 @@ The system consumes real-time object detection data from Axis fisheye cameras an ```mermaid flowchart TD - A["📹 config_input_scene_detections.conf:
Consume analytics scene description from the camera using the inputs.execd plugin and axis_scene_detection_consumer.sh"] -->|detection_frame| B["config_process_zone_filter.conf:
Filter by include zone polygon"] + A["📹 config_input_scene_detections.conf:
Consume analytics scene description from the camera using the inputs.execd plugin and axis_scene_detection_consumer.sh"] -->|detection_frame| B1["config_process_class_filter.conf:
Filter by class name"] X0["Configuration variables: HELPER_FILES_DIR"] --> A - X1["Configuration variables: INCLUDE_ZONE_POLYGON"] --> B - B -->|detection_frame_in_zone| C1 + X1a["Configuration variables: OBJECT_TYPE_FILTER"] --> B1 + B1 -->|detection_frame_class_filtered| B2["config_process_zone_filter.conf:
Filter by include zone polygon"] + X1b["Configuration variables: INCLUDE_ZONE_POLYGON"] --> B2 + B2 -->|detection_frame_in_zone| C1 subgraph TimeLogic ["config_process_track_duration.conf:
Time-in-area Logic Details"] C1{"First time seeing
this object ID?"} @@ -37,7 +39,8 @@ flowchart TD G --> H["📺 VAPIX Overlay API"] style A fill:#e8f5e9,stroke:#43a047 - style B fill:#f3e5f5,stroke:#8e24aa + style B1 fill:#f3e5f5,stroke:#8e24aa + style B2 fill:#f3e5f5,stroke:#8e24aa style TimeLogic fill:#f3e5f5,stroke:#8e24aa style C1 fill:#ffffff,stroke:#673ab7 style C2 fill:#ffffff,stroke:#673ab7 @@ -52,7 +55,8 @@ flowchart TD style G fill:#ffebee,stroke:#e53935 style H fill:#ffebee,stroke:#e53935 style X0 fill:#f5f5f5,stroke:#9e9e9e - style X1 fill:#f5f5f5,stroke:#9e9e9e + style X1a fill:#f5f5f5,stroke:#9e9e9e + style X1b fill:#f5f5f5,stroke:#9e9e9e style X2 fill:#f5f5f5,stroke:#9e9e9e style X3 fill:#f5f5f5,stroke:#9e9e9e style X4 fill:#f5f5f5,stroke:#9e9e9e @@ -88,6 +92,7 @@ Color scheme: - ["Text area is too big!" in overlay](#text-area-is-too-big-in-overlay) - [Configuration Files](#configuration-files) - [config_input_scene_detections.conf and axis_scene_detection_consumer.sh](#config_input_scene_detectionsconf-and-axis_scene_detection_consumersh) + - [config_process_class_filter.conf](#config_process_class_filterconf) - [config_process_zone_filter.conf and zone_filter.star](#config_process_zone_filterconf-and-zone_filterstar) - [config_process_track_duration.conf and track_duration_calculator.star](#config_process_track_durationconf-and-track_duration_calculatorstar) - [config_process_threshold_filter.conf](#config_process_threshold_filterconf) @@ -101,6 +106,7 @@ Color scheme: - [Prerequisites](#prerequisites) - [Host Testing Limitations](#host-testing-limitations) - [Test Commands](#test-commands) + - [Test Class Filter Only](#test-class-filter-only) - [Test Zone Filter Only](#test-zone-filter-only) - [Test Time in Area Calculation Only](#test-time-in-area-calculation-only) - [Test Alert Pipeline](#test-alert-pipeline) @@ -141,6 +147,7 @@ Create a combined file by running: ```bash cat config_agent.conf \ config_input_scene_detections.conf \ + config_process_class_filter.conf \ config_process_zone_filter.conf \ config_process_track_duration.conf \ config_process_threshold_filter.conf \ @@ -219,6 +226,26 @@ Can also be used for reproducible testing on host systems by setting `CONSUMER_S - `CONSUMER_SCRIPT`: Path to consumer script (defaults to `axis_scene_detection_consumer.sh`) - `SAMPLE_FILE`: Path to sample data file (required when using `sample_data_feeder.sh`) +### config_process_class_filter.conf + +Filters the incoming detection frames based on the configured object type. This processor: + +- Reads the `OBJECT_TYPE_FILTER` env var to get the filtering mode or target class +- Uses inline Starlark logic to determine if the detected object's class matches the filter +- Only passes detections that match the filter to the next stage +- Outputs debug messages when detections are filtered + +**OBJECT_TYPE_FILTER Values:** + +The `object_type` field in incoming detections comes from the camera's `.class.type` field or JSON `null` when the camera has not yet verified/classified the object. + +| Value | Behavior | Use Case | +| ------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| `ALL` | Pass only verified detections where `object_type != null` | Include all object classes, but exclude objects still being classified | +| `ALL_UNVERIFIED` | Pass all detections (both verified and unverified null values) | Include all objects including those still being classified (less predictable but more sensitive) | +| `"Human"` (or other class name) | Pass only detections where `object_type` exactly matches the given class (case-insensitive) | Filter by specific object type (e.g., "Human", "Vehicle" or "Face") | +| Not set or unresolved | Defaults to `ALL` and logs a warning | Not recommended | + ### config_process_zone_filter.conf and zone_filter.star Filters the incoming detection frames based on the configured include zone polygon. This processor: @@ -307,6 +334,31 @@ You can test the processing logic locally using Telegraf before deploying to you ### Test Commands +#### Test Class Filter Only + +Test the class filter to ensure it correctly filters detections by object type: + +```bash +# Set up test environment +export HELPER_FILES_DIR="$(pwd)" +export CONSUMER_SCRIPT="test_files/sample_data_feeder.sh" +export SAMPLE_FILE="test_files/simple_tracks.jsonl" +export TELEGRAF_DEBUG=true + +# Filter for only verified detections (exclude unclassified) +export OBJECT_TYPE_FILTER="Human" + +# Test class filter only +telegraf --config config_agent.conf \ + --config config_input_scene_detections.conf \ + --config config_process_class_filter.conf \ + --config test_files/config_output_stdout.conf \ + --once +``` + +**Expected Output:** +When set to `Human`, only detections with a class name of `Human` are passed through. You can try to change to `ALL` which should show all detections that has a class, or `ALL_UNVERIFIED` which should show all detections even if the class data is not available yet. + #### Test Zone Filter Only We have two files with fake detections that are good for testing the zone filter: @@ -339,6 +391,7 @@ export INCLUDE_ZONE_POLYGON='[[[-0.6, -0.4], [0.2, -0.4], [0.2, 0.2], [-0.6, 0.2 # Test zone filter only telegraf --config config_agent.conf \ --config config_input_scene_detections.conf \ + --config config_process_class_filter.conf \ --config config_process_zone_filter.conf \ --config test_files/config_output_stdout.conf \ --once @@ -370,6 +423,7 @@ export INCLUDE_ZONE_POLYGON='[[[-1.0, -1.0], [1.0, -1.0], [1.0, 1.0], [-1.0, 1.0 # Test time in area calculation only (shows all detections + debug messages) telegraf --config config_agent.conf \ --config config_input_scene_detections.conf \ + --config config_process_class_filter.conf \ --config config_process_zone_filter.conf \ --config config_process_track_duration.conf \ --config test_files/config_output_stdout.conf \ @@ -422,6 +476,7 @@ export INCLUDE_ZONE_POLYGON='[[[-1.0, -1.0], [1.0, -1.0], [1.0, 1.0], [-1.0, 1.0 # Test time in area calculation + threshold filtering telegraf --config config_agent.conf \ --config config_input_scene_detections.conf \ + --config config_process_class_filter.conf \ --config config_process_zone_filter.conf \ --config config_process_track_duration.conf \ --config config_process_threshold_filter.conf \ @@ -452,6 +507,7 @@ export INCLUDE_ZONE_POLYGON='[[[-1.0, -1.0], [1.0, -1.0], [1.0, 1.0], [-1.0, 1.0 # Test complete pipeline with rate limiting telegraf --config config_agent.conf \ --config config_input_scene_detections.conf \ + --config config_process_class_filter.conf \ --config config_process_zone_filter.conf \ --config config_process_track_duration.conf \ --config config_process_threshold_filter.conf \ @@ -482,6 +538,7 @@ export INCLUDE_ZONE_POLYGON='[[[-1.0, -1.0], [1.0, -1.0], [1.0, 1.0], [-1.0, 1.0 # Test time in area calculation with real data telegraf --config config_agent.conf \ --config config_input_scene_detections.conf \ + --config config_process_class_filter.conf \ --config config_process_zone_filter.conf \ --config config_process_track_duration.conf \ --config test_files/config_output_stdout.conf \ diff --git a/project-time-in-area-analytics/axis_scene_detection_consumer.sh b/project-time-in-area-analytics/axis_scene_detection_consumer.sh index 03be95b..12e2d45 100755 --- a/project-time-in-area-analytics/axis_scene_detection_consumer.sh +++ b/project-time-in-area-analytics/axis_scene_detection_consumer.sh @@ -50,7 +50,7 @@ if ($frame.observations | length) > 0 then "frame": $frame.timestamp, "timestamp": .timestamp, "track_id": .track_id, - "object_type": (.class.type // "null"), + "object_type": .class.type, "bounding_box": .bounding_box } else diff --git a/project-time-in-area-analytics/config_process_class_filter.conf b/project-time-in-area-analytics/config_process_class_filter.conf new file mode 100644 index 0000000..8afcf00 --- /dev/null +++ b/project-time-in-area-analytics/config_process_class_filter.conf @@ -0,0 +1,128 @@ +# Class Filter Processor +# +# This processor filters detection frames based on object class/type classification. +# Only detections matching the configured class filter are passed through. +# +# The OBJECT_TYPE_FILTER variable controls which classes pass: +# - ALL: pass only verified detections (object_type != null) - DEFAULT +# - ALL_UNVERIFIED: pass all detections including unverified (object_type == null or any verified class) +# - Specific class name (e.g., "Human"): pass only exact matches (case-insensitive) +# +# If OBJECT_TYPE_FILTER is not set, defaults to ALL and logs a warning. +# +# Input: detection_frame metrics from input processor +# Output: detection_frame_class_filtered metrics (filtered by class) +# +# Environment Variables: +# - OBJECT_TYPE_FILTER: Class filter mode or specific class name (optional) +# Defaults to ALL if not set. + +[[processors.starlark]] + # Only consume metrics with name "detection_frame" + namepass = ["detection_frame"] + + # Inline Starlark script for class filtering + source = ''' +load("logging.star", "log") + +# Initialize mode and target (will be set during first apply) +state = {} + +def init_mode(object_type_str): + """Initialize filtering mode based on object_type_str parameter. + + Args: + object_type_str: Filter setting string (ALL, ALL_UNVERIFIED, or specific class name), + this is case-insensitive. + """ + if "mode" in state: + return # Already initialized + + object_type_str = object_type_str.lower() + + if object_type_str == "" or object_type_str.startswith("${"): + log.warn( + "OBJECT_TYPE_FILTER not set; defaulting to ALL (pass only verified detections). " + + "If this is intended: set OBJECT_TYPE_FILTER=ALL" + ) + state["mode"] = "all" + elif object_type_str == "all" or object_type_str == "all_unverified": + state["mode"] = object_type_str + else: + # Exact class match mode (case-insensitive) + state["mode"] = "exact" + state["target"] = object_type_str + +def canonicalize_object_type(value): + """Validate and canonicalize the object_type field value. + + Converts to lowercase for case-insensitive comparison and normalizes + non-string/missing values to None to represent unverified objects. + + Returns canonical_value: None for unclassified, or lowercase class name string. + """ + if value == None: + # None represents unclassified/unverified object + return None + # Check if value is a string + if type(value) != type(""): + log.warn("object_type not a string: " + str(value) + "; treating as unverified") + return None + if value == "": + log.warn("object_type empty string; treating as unverified") + return None + # Normalize to lowercase for case-insensitive comparison + return value.lower() + + +def should_keep(mode, obj): + """Determine if a detection should pass the filter. + + Args: + mode: Filter mode (all, all_unverified, or exact) + obj: Canonical object_type (None for unverified, or lowercase class name) + + Returns: True if detection should pass, False if it should be filtered out + """ + if mode == "all": + # Pass only verified detections + return obj != None + elif mode == "all_unverified": + # Pass all detections + return True + else: + # exact mode: match target class + target = state.get("target") + return obj == target + + +def apply(metric): + """Filter detection_frame metrics by object class type. + + Renames passing metrics to detection_frame_class_filtered. + Returns None to drop metrics that don't match the filter. + """ + # Initialize mode based on the environment variable + init_mode(filter_env_var) + mode = state["mode"] + + # Get and canonicalize the object_type field + obj = canonicalize_object_type(metric.fields.get("object_type")) + + track_id = metric.fields.get("track_id", "unknown") + + # Determine if this detection should pass the filter + obj_str = obj if obj else "None" + mode_str = "exact:" + state.get("target") if mode == "exact" else mode + if should_keep(mode, obj): + log.debug("apply: track_id=" + track_id + " object_type=" + obj_str + " mode=" + mode_str + " - PASS") + filtered = deepcopy(metric) + filtered.name = "detection_frame_class_filtered" + return filtered + else: + log.debug("apply: track_id=" + track_id + " object_type=" + obj_str + " mode=" + mode_str + " - FILTER OUT") + return None +''' + + [processors.starlark.constants] + filter_env_var = "${OBJECT_TYPE_FILTER}" \ No newline at end of file diff --git a/project-time-in-area-analytics/config_process_zone_filter.conf b/project-time-in-area-analytics/config_process_zone_filter.conf index 098cc18..fb5c7af 100644 --- a/project-time-in-area-analytics/config_process_zone_filter.conf +++ b/project-time-in-area-analytics/config_process_zone_filter.conf @@ -8,7 +8,7 @@ # - X-axis: -1 (left) to +1 (right) # - Y-axis: -1 (bottom) to +1 (top) # -# Input: detection_frame metrics from input processor +# Input: detection_frame_class_filtered metrics from class filter processor # Output: detection_frame_in_zone metrics (only those with centers inside the zone) # # Environment Variables: @@ -18,8 +18,8 @@ # Currently only supports a single zone (multi-zone planned for future) [[processors.starlark]] - # Only consume metrics with name "detection_frame" - namepass = ["detection_frame"] + # Only consume metrics from the class filter + namepass = ["detection_frame_class_filtered"] # Path to Starlark script script = "${HELPER_FILES_DIR}/zone_filter.star" diff --git a/project-time-in-area-analytics/test_files/sample_data_feeder.sh b/project-time-in-area-analytics/test_files/sample_data_feeder.sh index 215846a..0ff1a72 100755 --- a/project-time-in-area-analytics/test_files/sample_data_feeder.sh +++ b/project-time-in-area-analytics/test_files/sample_data_feeder.sh @@ -39,7 +39,7 @@ while IFS= read -r line; do "frame": $frame.timestamp, "timestamp": .timestamp, "track_id": .track_id, - "object_type": (.class.type // "null"), + "object_type": .class.type, "bounding_box": .bounding_box } else diff --git a/project-time-in-area-analytics/test_files/simple_tracks.jsonl b/project-time-in-area-analytics/test_files/simple_tracks.jsonl index 9419ef7..ea616e7 100644 --- a/project-time-in-area-analytics/test_files/simple_tracks.jsonl +++ b/project-time-in-area-analytics/test_files/simple_tracks.jsonl @@ -1,18 +1,72 @@ -{"frame": {"observations": [{"bounding_box": {"bottom": 0.6, "left": 0.2, "right": 0.3, "top": 0.4}, "class": {"type": "Unknown"}, "timestamp": "2024-01-15T10:00:01.123456Z", "track_id": "track_001"}], "timestamp": "2024-01-15T10:00:01.123456Z"}} -{"frame": {"observations": [{"bounding_box": {"bottom": 0.62, "left": 0.22, "right": 0.32, "top": 0.42}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:02.789012Z", "track_id": "track_001"}], "timestamp": "2024-01-15T10:00:02.789012Z"}} -{"frame": {"observations": [{"bounding_box": {"bottom": 0.64, "left": 0.24, "right": 0.34, "top": 0.44}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:03.345678Z", "track_id": "track_001"}, {"bounding_box": {"bottom": 0.56, "left": 0.12, "right": 0.18, "top": 0.36}, "class": {"type": "Unknown"}, "timestamp": "2024-01-15T10:00:03.345678Z", "track_id": "track_002"}], "timestamp": "2024-01-15T10:00:03.345678Z"}} -{"frame": {"observations": [{"bounding_box": {"bottom": 0.66, "left": 0.26, "right": 0.36, "top": 0.46}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:04.901234Z", "track_id": "track_001"}, {"bounding_box": {"bottom": 0.58, "left": 0.14, "right": 0.20, "top": 0.38}, "class": {"type": "Unknown"}, "timestamp": "2024-01-15T10:00:04.901234Z", "track_id": "track_002"}], "timestamp": "2024-01-15T10:00:04.901234Z"}} -{"frame": {"observations": [{"bounding_box": {"bottom": 0.60, "left": 0.16, "right": 0.22, "top": 0.40}, "class": {"type": "Unknown"}, "timestamp": "2024-01-15T10:00:05.567890Z", "track_id": "track_002"}], "timestamp": "2024-01-15T10:00:05.567890Z"}} +# Simple (fake) example data on the same format at the Axis metadata from the camera. +# +# track_001: +# - Detections: 4 total (3 unverified/null, 1 verified as Human) +# - Time span: 3.78s (from first detection to last) +# - First verified: at 3.78s into track (4th detection) +# - One `operation` to delete track_001 after track_002 appears. +# +# track_002: +# - Detections: 2 total (2 unverified/null, 0 verified) +# - Time span: 2.22s (from first to last detection) +# - First verified: N/A (never verified) +# - Notes: Completely unverified track. Appears only in frames 3-6. +# +# track_003: +# - Detections: 3 total (0 unverified, 3 verified as Face) +# - Time span: 2.22s (from first detection to last) +# - First verified: 0.00s (verified from first detection) +# - Note: Last frame (11) shared with track_004. +# +# track_004: +# - Detections: 2 total (0 unverified, 2 verified as Human) +# - Time span: 0.56s (from first detection to last) +# - First verified: 0.00s (verified from first detection) +# - Note: First detection shared with track_003's last. +# - One frame contains one `operation` field that is empty. +# +# track_005: +# - Detections: 6 total (0 unverified, 6 verified as Human) +# - Time span: 150.00s (from first detection to last) +# - First verified: 0.00s (verified from first detection) + +# Frame 1: track_001 det 1 (unverified) - duration_from_first=0.00s +{"frame": {"observations": [{"bounding_box": {"bottom": 0.6, "left": 0.2, "right": 0.3, "top": 0.4}, "timestamp": "2024-01-15T10:00:01.123456Z", "track_id": "track_001"}], "timestamp": "2024-01-15T10:00:01.123456Z"}} +# Frame 2: track_001 det 2 (unverified) - duration_from_first=1.67s +{"frame": {"observations": [{"bounding_box": {"bottom": 0.62, "left": 0.22, "right": 0.32, "top": 0.42}, "timestamp": "2024-01-15T10:00:02.789012Z", "track_id": "track_001"}], "timestamp": "2024-01-15T10:00:02.789012Z"}} +# Frame 3: +# - track_001 det 3 (unverified) - duration_from_first=2.22s +# - track_002 det 1 (unverified) - duration_from_first=0.00s +{"frame": {"observations": [{"bounding_box": {"bottom": 0.64, "left": 0.24, "right": 0.34, "top": 0.44}, "timestamp": "2024-01-15T10:00:03.345678Z", "track_id": "track_001"}, {"bounding_box": {"bottom": 0.56, "left": 0.12, "right": 0.18, "top": 0.36}, "timestamp": "2024-01-15T10:00:03.345678Z", "track_id": "track_002"}], "timestamp": "2024-01-15T10:00:03.345678Z"}} +# Frame 4: track_001 det 4 (verified) - duration_from_first=3.78s, duration_from_verified=0.00s +{"frame": {"observations": [{"bounding_box": {"bottom": 0.66, "left": 0.26, "right": 0.36, "top": 0.46}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:04.901234Z", "track_id": "track_001"}], "timestamp": "2024-01-15T10:00:04.901234Z"}} + +# Frame 6: track_002 det 2 (unverified) - duration_from_first=2.22s +{"frame": {"observations": [{"bounding_box": {"bottom": 0.60, "left": 0.16, "right": 0.22, "top": 0.40}, "timestamp": "2024-01-15T10:00:05.567890Z", "track_id": "track_002"}], "timestamp": "2024-01-15T10:00:05.567890Z"}} {"frame": {"observations": [], "operations": [{"id": "track_001", "type": "DeleteOperation"}], "timestamp": "2024-01-15T10:00:06.000000Z"}} -{"frame": {"observations": [{"bounding_box": {"bottom": 0.75, "left": 0.25, "right": 0.35, "top": 0.50}, "class": {"type": "Unknown"}, "timestamp": "2024-01-15T10:00:10.234567Z", "track_id": "track_003"}], "timestamp": "2024-01-15T10:00:10.234567Z"}} -{"frame": {"observations": [{"bounding_box": {"bottom": 0.77, "left": 0.27, "right": 0.37, "top": 0.52}, "class": {"type": "Vehicle"}, "timestamp": "2024-01-15T10:00:11.890123Z", "track_id": "track_003"}], "timestamp": "2024-01-15T10:00:11.890123Z"}} -{"frame": {"observations": [{"bounding_box": {"bottom": 0.79, "left": 0.29, "right": 0.39, "top": 0.54}, "class": {"type": "Vehicle"}, "timestamp": "2024-01-15T10:00:12.456789Z", "track_id": "track_003"}, {"bounding_box": {"bottom": 0.68, "left": 0.28, "right": 0.38, "top": 0.48}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:12.456789Z", "track_id": "track_001"}], "timestamp": "2024-01-15T10:00:12.456789Z"}} + +# Frame 9: track_003 det 1 (verified) - duration_from_first=0.00s, duration_from_verified=0.00s +{"frame": {"observations": [{"bounding_box": {"bottom": 0.75, "left": 0.25, "right": 0.35, "top": 0.50}, "class": {"type": "Face"}, "timestamp": "2024-01-15T10:00:10.234567Z", "track_id": "track_003"}], "timestamp": "2024-01-15T10:00:10.234567Z"}} +# Frame 10: track_003 det 2 (verified) - duration_from_first=1.66s, duration_from_verified=1.66s +{"frame": {"observations": [{"bounding_box": {"bottom": 0.77, "left": 0.27, "right": 0.37, "top": 0.52}, "class": {"type": "Face"}, "timestamp": "2024-01-15T10:00:11.890123Z", "track_id": "track_003"}], "timestamp": "2024-01-15T10:00:11.890123Z"}} +# Frame 11: +# - track_003 det 3 (verified) - duration_from_first=2.22s, duration_from_verified=2.22s +# - track_004 det 1 (verified) - duration_from_first=0.00s, duration_from_verified=0.00s +{"frame": {"observations": [{"bounding_box": {"bottom": 0.79, "left": 0.29, "right": 0.39, "top": 0.54}, "class": {"type": "Face"}, "timestamp": "2024-01-15T10:00:12.456789Z", "track_id": "track_003"}, {"bounding_box": {"bottom": 0.68, "left": 0.28, "right": 0.38, "top": 0.48}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:12.456789Z", "track_id": "track_004"}], "timestamp": "2024-01-15T10:00:12.456789Z"}} +# Frame 12: track_004 det 2 (verified) - duration_from_first=0.56s, duration_from_verified=0.56s {"frame": {"observations": [{"bounding_box": {"bottom": 0.80, "left": 0.35, "right": 0.45, "top": 0.60}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:13.012345Z", "track_id": "track_004"}], "timestamp": "2024-01-15T10:00:13.012345Z"}} {"frame": {"observations": [], "operations": [], "timestamp": "2024-01-15T10:00:25.000000Z"}} + +# Frame 15: track_005 det 1 (verified) - duration_from_first=0.00s, duration_from_verified=0.00s {"frame": {"observations": [{"bounding_box": {"bottom": 0.85, "left": 0.10, "right": 0.25, "top": 0.65}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:00:30.000000Z", "track_id": "track_005"}], "timestamp": "2024-01-15T10:00:30.000000Z"}} +# Frame 16: track_005 det 2 (verified) - duration_from_first=30.00s, duration_from_verified=30.00s {"frame": {"observations": [{"bounding_box": {"bottom": 0.86, "left": 0.11, "right": 0.26, "top": 0.66}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:01:00.000000Z", "track_id": "track_005"}], "timestamp": "2024-01-15T10:01:00.000000Z"}} +# Frame 17: track_005 det 3 (verified) - duration_from_first=60.00s, duration_from_verified=60.00s {"frame": {"observations": [{"bounding_box": {"bottom": 0.87, "left": 0.12, "right": 0.27, "top": 0.67}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:01:30.000000Z", "track_id": "track_005"}], "timestamp": "2024-01-15T10:01:30.000000Z"}} +# Frame 18: track_005 det 4 (verified) - duration_from_first=90.00s, duration_from_verified=90.00s {"frame": {"observations": [{"bounding_box": {"bottom": 0.88, "left": 0.13, "right": 0.28, "top": 0.68}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:02:00.000000Z", "track_id": "track_005"}], "timestamp": "2024-01-15T10:02:00.000000Z"}} +# Frame 19: track_005 det 5 (verified) - duration_from_first=120.00s, duration_from_verified=120.00s {"frame": {"observations": [{"bounding_box": {"bottom": 0.89, "left": 0.14, "right": 0.29, "top": 0.69}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:02:30.000000Z", "track_id": "track_005"}], "timestamp": "2024-01-15T10:02:30.000000Z"}} +# Frame 20: track_005 det 6 (verified) - duration_from_first=150.00s, duration_from_verified=150.00s {"frame": {"observations": [{"bounding_box": {"bottom": 0.90, "left": 0.15, "right": 0.30, "top": 0.70}, "class": {"type": "Human"}, "timestamp": "2024-01-15T10:03:00.000000Z", "track_id": "track_005"}], "timestamp": "2024-01-15T10:03:00.000000Z"}} {"frame": {"observations": [], "operations": [], "timestamp": "2024-01-15T10:03:30.000000Z"}} \ No newline at end of file From 77c6dc055106f82728c5cb3e5dd9ef165eea2b9e Mon Sep 17 00:00:00 2001 From: fixedit-olatz Date: Tue, 4 Nov 2025 11:58:41 +0100 Subject: [PATCH 33/42] Add files for event support This commit adds configuration and helper files for event support in the time-in-area example. These files will monitor AOA detections and send a stateful event when a detection has been in the monitored zone for too long (expressed as active=1), as well as when the detection leaves the monitored area (expressed as active=0). --- project-time-in-area-analytics/README.md | 20 +++-- .../config_output_events.conf | 68 +++++++++++++++ .../config_process_alarming_state.conf | 85 +++++++++++++++++++ .../config_process_overlay_transform.conf | 1 + .../config_process_rate_limit.conf | 1 + .../config_process_threshold_filter.conf | 7 +- 6 files changed, 173 insertions(+), 9 deletions(-) create mode 100644 project-time-in-area-analytics/config_output_events.conf create mode 100644 project-time-in-area-analytics/config_process_alarming_state.conf diff --git a/project-time-in-area-analytics/README.md b/project-time-in-area-analytics/README.md index 2106ecf..eb947ed 100644 --- a/project-time-in-area-analytics/README.md +++ b/project-time-in-area-analytics/README.md @@ -1,6 +1,6 @@ # Time-in-Area Analytics -This project demonstrates how to implement time-in-area analytics for Axis fisheye cameras using the [FixedIT Data Agent](https://fixedit.ai/products-data-agent/). While AXIS Object Analytics natively supports time-in-area detection for traditional cameras, fisheye cameras lack this capability. This solution bridges that gap by consuming real-time object detection metadata from fisheye cameras and implementing custom time-in-area logic using Telegraf's Starlark processor. The system uses object tracking IDs from [AXIS Scene Metadata](https://developer.axis.com/analytics/axis-scene-metadata/reference/concepts/) to track objects within a defined rectangular area, measures time in area, and triggers both warning (TODO) and alert notifications via MQTT (TODO) when objects remain in the monitored zone beyond configured thresholds. +This project demonstrates how to implement time-in-area analytics for Axis fisheye cameras using the [FixedIT Data Agent](https://fixedit.ai/products-data-agent/). While AXIS Object Analytics natively supports time-in-area detection for traditional cameras, fisheye cameras lack this capability. This solution bridges that gap by consuming real-time object detection metadata from fisheye cameras and implementing custom time-in-area logic using Telegraf's Starlark processor. The system uses object tracking IDs from [AXIS Scene Metadata](https://developer.axis.com/analytics/axis-scene-metadata/reference/concepts/) to track objects within a defined rectangular area, measures time in area, and triggers alert notifications via events when objects remain in the monitored zone beyond configured thresholds. ## How It Works @@ -29,8 +29,9 @@ flowchart TD C5 -->|detection_frame_with_duration| D["config_process_threshold_filter.conf:
Filter for
time in area > ALERT_THRESHOLD_SECONDS"] X2["Configuration variables: ALERT_THRESHOLD_SECONDS"] --> D - D -->|alerting_frame| E["🚨 MQTT Output
Alert messages (TODO)"] - X3["Configuration variables: TODO"] --> E + D -->|alerting_frame_two| E0["config_process_alarming_state.conf:
Check if any alerting detections have happened during the last second"] + E0 -->|alerting_state_change| E01["config_output_events.conf:
Run the event handler binary with information about the detection status"] + E01 --> E["🚨 Event Output
Alert messages"] D -->|alerting_frame| E1["config_process_rate_limit.conf:
Rate limit to 1 message per second
using Starlark state"] E1 -->|rate_limited_alert_frame| F["config_process_overlay_transform.conf:
Recalculate coordinates for overlay visualization"] @@ -49,6 +50,8 @@ flowchart TD style C5 fill:#ffffff,stroke:#673ab7 style CX fill:#fff3e0,stroke:#fb8c00 style D fill:#f3e5f5,stroke:#8e24aa + style E0 fill:#f3e5f5,stroke:#8e24aa + style E01 fill:#f3e5f5,stroke:#8e24aa style E fill:#ffebee,stroke:#e53935 style E1 fill:#f3e5f5,stroke:#8e24aa style F fill:#f3e5f5,stroke:#8e24aa @@ -58,7 +61,6 @@ flowchart TD style X1a fill:#f5f5f5,stroke:#9e9e9e style X1b fill:#f5f5f5,stroke:#9e9e9e style X2 fill:#f5f5f5,stroke:#9e9e9e - style X3 fill:#f5f5f5,stroke:#9e9e9e style X4 fill:#f5f5f5,stroke:#9e9e9e ``` @@ -135,8 +137,8 @@ Color scheme: ### FixedIT Data Agent Compatibility -- **Minimum Data Agent version**: 1.1 -- **Required features**: Uses the `inputs.execd`, `processors.starlark` plugins and the `HELPER_FILES_DIR` environment variable set by the FixedIT Data Agent. It is recommended to use version 1.1 or higher since the load order of config files was not visible in the web user interface in version 1.0. +- **Minimum Data Agent version**: +- **Required features**: Uses the `inputs.execd`, `processors.starlark` plugins and the `HELPER_FILES_DIR` environment variable set by the FixedIT Data Agent. Uses the `output_event` binary packaged with versions of the application and above. ## Quick Setup @@ -153,10 +155,12 @@ cat config_agent.conf \ config_process_threshold_filter.conf \ config_process_rate_limit.conf \ config_process_overlay_transform.conf \ - config_output_overlay.conf > combined.conf + config_output_overlay.conf \ + config_process_alarming_state.conf \ + config_output_events.conf > combined.conf ``` -Then upload `combined.conf` as a config file and `overlay_manager.sh`, `axis_scene_detection_consumer.sh`, `zone_filter.star`, and `track_duration_calculator.star` as helper files. +Then upload `combined.conf` as a config file and `overlay_manager.sh`, `axis_scene_detection_consumer.sh`, `zone_filter.star` and `track_duration_calculator.star` as helper files. Set `Extra Env` to: diff --git a/project-time-in-area-analytics/config_output_events.conf b/project-time-in-area-analytics/config_output_events.conf new file mode 100644 index 0000000..57b6398 --- /dev/null +++ b/project-time-in-area-analytics/config_output_events.conf @@ -0,0 +1,68 @@ +# Output to send all 'alerting_state_change' metrics to the event producer binary. +# The event is configured through the GKeyFile content specified when +# running the binary, using the following format: +# [topics] +# namespace = +# nice_name = +# topic_0 = +# topic_1 = +# topic_2 = +# +# [settings] +# # true if event should be stateful +# # false if event should be stateless +# stateful = +# +# [item.] +# kind = +# data_type = +# value = +# +# The [topics] and [settings] groups and all their key-value pairs +# are mandatory for successfully declaring the event. +# Items are optional, and multiple can be defined. +# +# The binary expects the passed json metrics to have the following +# format: +# +# { +# "fields": {: (...)}, +# "name":"", +# "tags":{}, +# "timestamp": +# } +# +# Only the "fields" value matters, since it is the only part +# that is used by the binary. It will parse every key-value +# pair in "fields" and use those as the values to update +# in the event's items before sending it. If any item present +# during event declaration isn't specified in "fields", the +# the event will simply send the event with that key's +# previous value. +[[outputs.execd]] + # Only consume the 'alerting_state_change' metrics + namepass = ["alerting_state_change"] + + # The binary expects JSON formatted metrics + data_format = "json" + + # Command to run the binary, event structure is + # provided through GKeyFile-formatted input. + command = [ + "${EXECUTABLES_DIR}/output_event", "--config-inline", + """[topics] + namespace = tnsaxis + nice_name = FixedIT Time-in-Area Event + topic_0 = CameraApplicationPlatform + topic_1 = FixedITDataAgent + topic_2 = TimeInArea + + [settings] + stateful = true + + [item.active] + kind = data + data_type = bool + value = false + """ + ] \ No newline at end of file diff --git a/project-time-in-area-analytics/config_process_alarming_state.conf b/project-time-in-area-analytics/config_process_alarming_state.conf new file mode 100644 index 0000000..7011a77 --- /dev/null +++ b/project-time-in-area-analytics/config_process_alarming_state.conf @@ -0,0 +1,85 @@ +# This configuration file sets up a heartbeat metric +# and applies a Starlark processor for inactivity monitoring. +# The Starlark processor checks if there have been any alarming +# detections since the last heartbeat, and if not, sets +# the alarming state to "false". Note that it only monitors +# for alarming state metrics in general, it does not keep +# track of what or how many objects triggered the alarm. + +# ---- Heartbeat (1 metric/second) ---- +[[inputs.exec]] + # This is a static heartbeat to trigger the inactivity monitor, + # so it does not matter what data it includes. + commands = ["sh -c 'echo heartbeat value=1i'"] + data_format = "influx" + interval = "1s" + name_override = "alarming_state_heartbeat" + +# ---- Starlark processor ---- +# This gets triggered by both the heartbeat and any alarming state metrics. +# This makes sure the code is run at least once per second even if there +# are no alarming state metrics. +[[processors.starlark]] + namepass = ["alarming_state_heartbeat", "alerting_frame_two"] + source = ''' +""" +Monitor if an alerting_frame_two metric has not been sent +since the last alarming_state_heartbeat metric. +When we have an alerting object in the monitored zone, +we will get a metric every time we observe that object. +Once the object leaves the area, we stop receiving +alerting_frame_two metrics. This function makes sure that +we send a metric every time we go from no alerting objects +to at least one alerting object, and from at least one +alerting object to no alerting object. +""" +load("logging.star", "log") + +""" +We initialize the state to keep it as a persistent +state between calls. We can use it to store information +such as the "has_alarm_since_last_heartbeat" or +"previous_alarm_state" values. +""" +state = { + # This variable is used to track if an "alerting_frame_two" + # metric has been received since the last + # "alarming_state_heartbeat" metric. + "has_alarm_since_last_heartbeat": False, + + # This variable is used to check the alarm states + # previous value, to see if there has been a change + # from active to inactive or the other way around, + # since we only want to report on state changes. + "previous_alarm_state": None +} + +def apply(metric): + # If we got an alerting frame, update the state to alerting state + # and return without producing any metric. + if metric.name == "alerting_frame_two": + state["has_alarm_since_last_heartbeat"] = True + return + + # Validate that the metric is a heartbeat + if metric.name != "alarming_state_heartbeat": + log.debug("Error: received metric with unexpected name: " + metric.name) + return + + has_alarm_since_last_heartbeat = state.get("has_alarm_since_last_heartbeat") + previous_alarm_state = state.get("previous_alarm_state") + + # We want to track if the alarm has been triggered between + # heartbeats, so we always reset the state to False at + # each heartbeat so we can start monitoring again. + state["has_alarm_since_last_heartbeat"] = False + state["previous_alarm_state"] = has_alarm_since_last_heartbeat + + # We only want to report state changes, so we check the previous state + if (has_alarm_since_last_heartbeat != previous_alarm_state): + alarming_state_metric = Metric("alerting_state_change") + alarming_state_metric.time = metric.time + alarming_state_metric.fields["active"] = has_alarm_since_last_heartbeat + return alarming_state_metric + return +''' \ No newline at end of file diff --git a/project-time-in-area-analytics/config_process_overlay_transform.conf b/project-time-in-area-analytics/config_process_overlay_transform.conf index 80b5f27..734a3ca 100644 --- a/project-time-in-area-analytics/config_process_overlay_transform.conf +++ b/project-time-in-area-analytics/config_process_overlay_transform.conf @@ -5,6 +5,7 @@ # field formatting. [[processors.starlark]] + namepass = ["rate_limited_alert_frame"] # Source code for the transformation logic source = ''' load("logging.star", "log") diff --git a/project-time-in-area-analytics/config_process_rate_limit.conf b/project-time-in-area-analytics/config_process_rate_limit.conf index 3b00a95..21f10b6 100644 --- a/project-time-in-area-analytics/config_process_rate_limit.conf +++ b/project-time-in-area-analytics/config_process_rate_limit.conf @@ -1,5 +1,6 @@ # Rate limit messages to 1 per second to protect the overlay API [[processors.starlark]] + namepass = ["alerting_frame"] source = ''' load("time.star", "time") load("logging.star", "log") diff --git a/project-time-in-area-analytics/config_process_threshold_filter.conf b/project-time-in-area-analytics/config_process_threshold_filter.conf index 5fda779..8c51917 100644 --- a/project-time-in-area-analytics/config_process_threshold_filter.conf +++ b/project-time-in-area-analytics/config_process_threshold_filter.conf @@ -30,7 +30,12 @@ def apply(metric): # Create a new metric with the alerting name alerting_metric = deepcopy(metric) alerting_metric.name = "alerting_frame" - return alerting_metric + + # Duplicate the metric, since it needs to get + # to two processors + alerting_metric_two = deepcopy(metric) + alerting_metric_two.name = "alerting_frame_two" + return [alerting_metric, alerting_metric_two] # Track doesn't exceed threshold - don't output log.debug("apply: track_id=" + track_id + " duration=" + str(time_in_area) + "s < threshold=" + str(threshold) + "s - FILTER OUT") From f837825c12ed2b080e45bbe24510410621e3bc7d Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Fri, 28 Nov 2025 14:06:48 +0100 Subject: [PATCH 34/42] Small fixes --- project-time-in-area-analytics/zone_filter.star | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/project-time-in-area-analytics/zone_filter.star b/project-time-in-area-analytics/zone_filter.star index f7182ac..e2b736e 100644 --- a/project-time-in-area-analytics/zone_filter.star +++ b/project-time-in-area-analytics/zone_filter.star @@ -178,7 +178,7 @@ def get_or_parse_zone(state, zone_polygon_json): # If no zone JSON provided, return None if zone_polygon_json == "" or zone_polygon_json == None or zone_polygon_json[:2] == "${": - log.error("get_or_parse_zone: No INCLUDE_ZONE_POLYGON configured") + # Don't log any error here, instead let the caller use a default (or complain)... return None, None # Parse the zone @@ -238,7 +238,7 @@ def apply(metric): # but show a warning since it might be unintended. if zone_vertices == None: log.warn("No INCLUDE_ZONE_POLYGON configured - passing all detections through. " + - "To explicitly include the entire frame, set INCLUDE_ZONE_POLYGON to " + + "To explicitly include the entire frame, set INCLUDE_ZONE_POLYGON=" + "[[[-1.0, -1.0], [1.0, -1.0], [1.0, 1.0], [-1.0, 1.0]]]") pass_through_metric = deepcopy(metric) pass_through_metric.name = "detection_frame_in_zone" From bf60735336edbe8b5ef4ecfb585f24326a287dd1 Mon Sep 17 00:00:00 2001 From: fixedit-olatz Date: Mon, 1 Dec 2025 11:02:33 +0100 Subject: [PATCH 35/42] Remove state change checking from events in time-in-area Stateful events already avoid sending duplicates if the state has not changed, so we do ont check if the state has changed before sending "duplicate" events (the event engine itself handles this). --- project-time-in-area-analytics/README.md | 2 +- .../config_output_events.conf | 10 ++++---- .../config_process_alarming_state.conf | 24 +++++-------------- 3 files changed, 12 insertions(+), 24 deletions(-) diff --git a/project-time-in-area-analytics/README.md b/project-time-in-area-analytics/README.md index eb947ed..f3bb96e 100644 --- a/project-time-in-area-analytics/README.md +++ b/project-time-in-area-analytics/README.md @@ -30,7 +30,7 @@ flowchart TD X2["Configuration variables: ALERT_THRESHOLD_SECONDS"] --> D D -->|alerting_frame_two| E0["config_process_alarming_state.conf:
Check if any alerting detections have happened during the last second"] - E0 -->|alerting_state_change| E01["config_output_events.conf:
Run the event handler binary with information about the detection status"] + E0 -->|alerting_state_metric| E01["config_output_events.conf:
Run the event handler binary with information about the detection status"] E01 --> E["🚨 Event Output
Alert messages"] D -->|alerting_frame| E1["config_process_rate_limit.conf:
Rate limit to 1 message per second
using Starlark state"] diff --git a/project-time-in-area-analytics/config_output_events.conf b/project-time-in-area-analytics/config_output_events.conf index 57b6398..919291b 100644 --- a/project-time-in-area-analytics/config_output_events.conf +++ b/project-time-in-area-analytics/config_output_events.conf @@ -1,4 +1,4 @@ -# Output to send all 'alerting_state_change' metrics to the event producer binary. +# Output to send all 'alerting_state_metric' metrics to the event producer binary. # The event is configured through the GKeyFile content specified when # running the binary, using the following format: # [topics] @@ -40,8 +40,8 @@ # the event will simply send the event with that key's # previous value. [[outputs.execd]] - # Only consume the 'alerting_state_change' metrics - namepass = ["alerting_state_change"] + # Only consume the 'alerting_state_metric' metrics + namepass = ["alerting_state_metric"] # The binary expects JSON formatted metrics data_format = "json" @@ -49,7 +49,7 @@ # Command to run the binary, event structure is # provided through GKeyFile-formatted input. command = [ - "${EXECUTABLES_DIR}/output_event", "--config-inline", + "${EXECUTABLES_DIR}/event_handler", "--config-inline", """[topics] namespace = tnsaxis nice_name = FixedIT Time-in-Area Event @@ -63,6 +63,6 @@ [item.active] kind = data data_type = bool - value = false + default_value = false """ ] \ No newline at end of file diff --git a/project-time-in-area-analytics/config_process_alarming_state.conf b/project-time-in-area-analytics/config_process_alarming_state.conf index 7011a77..0f20c0c 100644 --- a/project-time-in-area-analytics/config_process_alarming_state.conf +++ b/project-time-in-area-analytics/config_process_alarming_state.conf @@ -38,20 +38,13 @@ load("logging.star", "log") """ We initialize the state to keep it as a persistent state between calls. We can use it to store information -such as the "has_alarm_since_last_heartbeat" or -"previous_alarm_state" values. +such as the "has_alarm_since_last_heartbeat" value. """ state = { # This variable is used to track if an "alerting_frame_two" # metric has been received since the last # "alarming_state_heartbeat" metric. - "has_alarm_since_last_heartbeat": False, - - # This variable is used to check the alarm states - # previous value, to see if there has been a change - # from active to inactive or the other way around, - # since we only want to report on state changes. - "previous_alarm_state": None + "has_alarm_since_last_heartbeat": False } def apply(metric): @@ -67,19 +60,14 @@ def apply(metric): return has_alarm_since_last_heartbeat = state.get("has_alarm_since_last_heartbeat") - previous_alarm_state = state.get("previous_alarm_state") # We want to track if the alarm has been triggered between # heartbeats, so we always reset the state to False at # each heartbeat so we can start monitoring again. state["has_alarm_since_last_heartbeat"] = False - state["previous_alarm_state"] = has_alarm_since_last_heartbeat - # We only want to report state changes, so we check the previous state - if (has_alarm_since_last_heartbeat != previous_alarm_state): - alarming_state_metric = Metric("alerting_state_change") - alarming_state_metric.time = metric.time - alarming_state_metric.fields["active"] = has_alarm_since_last_heartbeat - return alarming_state_metric - return + alarming_state_metric = Metric("alerting_state_metric") + alarming_state_metric.time = metric.time + alarming_state_metric.fields["active"] = has_alarm_since_last_heartbeat + return alarming_state_metric ''' \ No newline at end of file From eb45013d13dcd0fba9a8180d276e470c7fc411d1 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Mon, 1 Dec 2025 10:28:53 +0100 Subject: [PATCH 36/42] WIP fixes for time in area - Enable overlay draw of unverified classes - Save the ID of the overlay to make it work when we have multiple overlays --- .../overlay_manager.sh | 90 +++++++++++++++---- 1 file changed, 71 insertions(+), 19 deletions(-) diff --git a/project-time-in-area-analytics/overlay_manager.sh b/project-time-in-area-analytics/overlay_manager.sh index b285e24..b4f0e1b 100755 --- a/project-time-in-area-analytics/overlay_manager.sh +++ b/project-time-in-area-analytics/overlay_manager.sh @@ -37,6 +37,10 @@ FONT_SIZE="${FONT_SIZE:-45}" # Fixed context name for all overlays to ensure only one is active OVERLAY_CONTEXT="time_in_area_overlay" +# File to store the overlay identity for this context +# Uses HELPER_FILES_DIR which is set by the FixedIt Data Agent +IDENTITY_FILE="${HELPER_FILES_DIR}/.overlay_identity_${OVERLAY_CONTEXT}" + # Strings that we will match from API responses. These should never # be changed! API_ERROR_STRING="error" @@ -59,6 +63,22 @@ debug_log_file() { return 0 } +# Function to get stored overlay identity, or return empty if not found +get_stored_identity() { + if [ -f "$IDENTITY_FILE" ]; then + cat "$IDENTITY_FILE" 2>/dev/null | tr -d '\n' + else + echo "" + fi +} + +# Function to store overlay identity +store_identity() { + _identity=$1 + echo "$_identity" > "$IDENTITY_FILE" 2>/dev/null || true + debug_log_file "Stored overlay identity: $_identity" +} + # Helper function to add a new overlay add_overlay() { text=$1 # Text content @@ -103,12 +123,14 @@ add_overlay() { return 1 fi - # Extract and log the overlay identity from the response + # Extract and store the overlay identity from the response overlay_identity=$(echo "$api_response" | jq -r '.data.identity // empty' 2>/dev/null) if [ -n "$overlay_identity" ] && [ "$overlay_identity" != "null" ]; then debug_log_file "Overlay added successfully with identity: $overlay_identity" + store_identity "$overlay_identity" else - debug_log_file "Overlay added but could not extract identity" + debug_log_file "Overlay added but could not extract identity - will use identity 1 as fallback" + store_identity "1" fi return 0 @@ -120,10 +142,20 @@ update_overlay() { x=$2 # X coordinate y=$3 # Y coordinate - debug_log_file "Updating overlay - Text: $text, Pos: ($x, $y)" + # Get stored identity, or default to 1 if not found + overlay_identity=$(get_stored_identity) + if [ -z "$overlay_identity" ]; then + overlay_identity="1" + debug_log_file "No stored identity found, using default: 1" + else + debug_log_file "Using stored identity: $overlay_identity" + fi + + debug_log_file "Updating overlay - Text: $text, Pos: ($x, $y), Identity: $overlay_identity" json_payload=$(jq -n \ --arg text "$text" \ --arg context "$OVERLAY_CONTEXT" \ + --arg identity "$overlay_identity" \ --arg x "$x" \ --arg y "$y" \ '{ @@ -131,7 +163,7 @@ update_overlay() { method: "setText", context: $context, params: { - identity: 1, + identity: ($identity|tonumber), text: $text, position: [($x|tonumber),($y|tonumber)] } @@ -148,29 +180,40 @@ update_overlay() { debug_log_file "API call exit code: $api_exit" debug_log_file "API response: $api_response" + # Only check for explicit errors - setText doesn't reliably indicate success/failure + # but if there's an explicit error in the response, we know it failed if [ $api_exit -ne 0 ] || echo "$api_response" | grep -q "\"$API_ERROR_STRING\""; then - # Note that this might be intentional since the caller might try - # to update an overlay and only create a new one if it doesn't exist. - debug_log_file "INFO: Failed to update overlay" + debug_log_file "ERROR: Failed to update overlay (curl exit: $api_exit or error in response)" return 1 fi - debug_log_file "Successfully updated overlay" + # If we get here, assume it worked (setText doesn't reliably indicate success) + debug_log_file "Updated overlay with identity: $overlay_identity (assuming success)" return 0 } # Helper function to delete an overlay delete_overlay() { - debug_log_file "Deleting overlay" + # Get stored identity, or default to 1 if not found + overlay_identity=$(get_stored_identity) + if [ -z "$overlay_identity" ]; then + overlay_identity="1" + debug_log_file "No stored identity found, using default: 1" + else + debug_log_file "Using stored identity: $overlay_identity" + fi + + debug_log_file "Deleting overlay with identity: $overlay_identity" json_payload=$(jq -n \ --arg context "$OVERLAY_CONTEXT" \ + --arg identity "$overlay_identity" \ '{ apiVersion: "1.8", method: "remove", context: $context, params: { - identity: 1 + identity: ($identity|tonumber) } }') @@ -190,23 +233,31 @@ delete_overlay() { return 1 fi - debug_log_file "Successfully deleted overlay" + # Remove stored identity file since overlay is deleted + rm -f "$IDENTITY_FILE" 2>/dev/null || true + debug_log_file "Successfully deleted overlay and cleared stored identity" return 0 } # Helper function to update or create overlay +# If identity file exists, update the existing overlay. Otherwise, create a new one. update_or_create_overlay() { text=$1 # Text content x=$2 # X coordinate y=$3 # Y coordinate debug_log_file "Attempting to update or create overlay - Text: $text, Pos: ($x, $y)" - if update_overlay "$text" "$x" "$y"; then - return 0 + + # Check if identity file exists - if it does, we have an existing overlay to update + if [ -f "$IDENTITY_FILE" ]; then + debug_log_file "Identity file exists, updating existing overlay" + update_overlay "$text" "$x" "$y" + return $? + else + debug_log_file "Identity file does not exist, creating new overlay" + add_overlay "$text" "$x" "$y" + return $? fi - - debug_log_file "Update failed, creating new overlay" - add_overlay "$text" "$x" "$y" } # Function to control overlays via VAPIX API @@ -302,19 +353,19 @@ timestamp=$(echo "$json_input" | jq -r '.timestamp // empty') center_x=$(echo "$json_input" | jq -r '.fields.center_x // empty') center_y=$(echo "$json_input" | jq -r '.fields.center_y // empty') -debug_log_file "Extracted fields - track_id: $track_id, time_in_area_seconds: $object_type, object_type: $object_type" +debug_log_file "Extracted fields - track_id: $track_id, time_in_area_seconds: $time_in_area, object_type: $object_type" # Validate required fields. We allow object_type to be empty (null) since # this happens before the video object detection has been able to classify # the object. if [ -z "$track_id" ] || [ "$track_id" = "null" ] || \ [ -z "$time_in_area" ] || [ "$time_in_area" = "null" ] || \ - [ -z "$object_type" ] || [ -z "$timestamp" ] || [ "$timestamp" = "null" ]; then + [ -z "$timestamp" ] || [ "$timestamp" = "null" ]; then debug_log_file "ERROR: Missing required track info fields in JSON input" printf "Missing required track info fields in JSON input. "\ "Required: track_id, time_in_area_seconds, timestamp. "\ "Received: track_id='%s', time_in_area_seconds='%s', timestamp='%s'" \ - "$track_id" "$time_in_area" "$object_type" "$timestamp" >&2 + "$track_id" "$time_in_area" "$timestamp" >&2 exit 12 fi @@ -365,3 +416,4 @@ else fi debug_log_file "Script completed successfully for track: $track_id" + From 8b63f6bb1865a3b04eca2b3561b1787071425b71 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Mon, 1 Dec 2025 14:26:37 +0100 Subject: [PATCH 37/42] Refactor overlay handling --- .../overlay_manager.sh | 190 +++++++++--------- 1 file changed, 93 insertions(+), 97 deletions(-) diff --git a/project-time-in-area-analytics/overlay_manager.sh b/project-time-in-area-analytics/overlay_manager.sh index b4f0e1b..b02d429 100755 --- a/project-time-in-area-analytics/overlay_manager.sh +++ b/project-time-in-area-analytics/overlay_manager.sh @@ -1,5 +1,9 @@ #!/bin/sh +# Set strict error handling, but note that the Axis cameras +# does not support "-o pipefail". +set -eu + # Axis Overlay Manager Script # # This script manages text overlays on Axis cameras based on time-in-area analytics. @@ -37,8 +41,11 @@ FONT_SIZE="${FONT_SIZE:-45}" # Fixed context name for all overlays to ensure only one is active OVERLAY_CONTEXT="time_in_area_overlay" -# File to store the overlay identity for this context -# Uses HELPER_FILES_DIR which is set by the FixedIt Data Agent +# We will use a persistent file in the flash to remember the ID of the +# overlay which we are currently using. This allows us to update the +# text and position of the existing overlay instead of creating a new one. +# We must be aware that there might be other overlay texts that the user +# has created manually in the camera, therefore the identity is important. IDENTITY_FILE="${HELPER_FILES_DIR}/.overlay_identity_${OVERLAY_CONTEXT}" # Strings that we will match from API responses. These should never @@ -63,20 +70,29 @@ debug_log_file() { return 0 } -# Function to get stored overlay identity, or return empty if not found +# Function to get stored overlay identity or return an error +# code if the file does not exist. get_stored_identity() { if [ -f "$IDENTITY_FILE" ]; then + # Write identity as response and return success code cat "$IDENTITY_FILE" 2>/dev/null | tr -d '\n' + return 0 else echo "" fi + return 1 } -# Function to store overlay identity +# Function to store overlay identity in a persistent file. +# Returns 1 on failure to prevent accumulation of orphaned overlays on the device. store_identity() { _identity=$1 - echo "$_identity" > "$IDENTITY_FILE" 2>/dev/null || true + if ! echo "$_identity" > "$IDENTITY_FILE"; then + debug_log_file "ERROR: Failed to write identity file: $IDENTITY_FILE" + return 1 + fi debug_log_file "Stored overlay identity: $_identity" + return 0 } # Helper function to add a new overlay @@ -127,29 +143,43 @@ add_overlay() { overlay_identity=$(echo "$api_response" | jq -r '.data.identity // empty' 2>/dev/null) if [ -n "$overlay_identity" ] && [ "$overlay_identity" != "null" ]; then debug_log_file "Overlay added successfully with identity: $overlay_identity" - store_identity "$overlay_identity" + + # Store the identity - if this fails, propagate the error to prevent orphaned overlays + if ! store_identity "$overlay_identity"; then + debug_log_file "ERROR: Failed to store overlay identity" + printf "Failed to store overlay identity to file %s" "$IDENTITY_FILE" >&2 + return 1 + fi + + return 0 else - debug_log_file "Overlay added but could not extract identity - will use identity 1 as fallback" - store_identity "1" + debug_log_file "ERROR: Overlay added but could not extract identity from API response" + return 1 fi - return 0 + # Should never get here... + return 1 } # Helper function to update an existing overlay +# +# Expected API behavior: +# - Success: Returns {"data": {}, ...} without error field +# - Invalid identity: Returns {"error": {"code": 302, "message": "Invalid value for parameter identity"}, ...} +# +# Return codes: +# - 0: Success +# - 1: General failure (curl error or API error) +# - 2: Invalid identity (error code 302) - overlay was deleted, caller should remove identity file and create new overlay +# +# Note: We have observed cases where the API does not reliably report errors when the overlay +# doesn't exist. Therefore, the caller should use a file-based identity tracking system and +# check the return code to detect when overlays have been deleted (behavior not guaranteed). update_overlay() { text=$1 # Text content x=$2 # X coordinate y=$3 # Y coordinate - - # Get stored identity, or default to 1 if not found - overlay_identity=$(get_stored_identity) - if [ -z "$overlay_identity" ]; then - overlay_identity="1" - debug_log_file "No stored identity found, using default: 1" - else - debug_log_file "Using stored identity: $overlay_identity" - fi + overlay_identity=$4 # Overlay identity to update debug_log_file "Updating overlay - Text: $text, Pos: ($x, $y), Identity: $overlay_identity" json_payload=$(jq -n \ @@ -180,28 +210,35 @@ update_overlay() { debug_log_file "API call exit code: $api_exit" debug_log_file "API response: $api_response" - # Only check for explicit errors - setText doesn't reliably indicate success/failure - # but if there's an explicit error in the response, we know it failed - if [ $api_exit -ne 0 ] || echo "$api_response" | grep -q "\"$API_ERROR_STRING\""; then - debug_log_file "ERROR: Failed to update overlay (curl exit: $api_exit or error in response)" + # Check for curl failure + if [ $api_exit -ne 0 ]; then + debug_log_file "ERROR: Failed to update overlay (curl exit: $api_exit)" + return 1 + fi + + # Check for API error response + if echo "$api_response" | grep -q "\"$API_ERROR_STRING\""; then + debug_log_file "ERROR: API returned error in response" + + # Check specifically for error code 302 (invalid identity parameter) + # This indicates the overlay no longer exists - return special code for caller to handle + error_code=$(echo "$api_response" | jq -r '.error.code // empty' 2>/dev/null) + if [ "$error_code" = "302" ]; then + debug_log_file "ERROR: Invalid identity parameter (code 302) - overlay was likely deleted externally" + return 2 + fi + return 1 fi - # If we get here, assume it worked (setText doesn't reliably indicate success) - debug_log_file "Updated overlay with identity: $overlay_identity (assuming success)" return 0 } -# Helper function to delete an overlay +# Helper function to delete an overlay. +# Currently not used, but we will add an automatic deletion of stale overlays +# in the future, so we keep the function here. delete_overlay() { - # Get stored identity, or default to 1 if not found - overlay_identity=$(get_stored_identity) - if [ -z "$overlay_identity" ]; then - overlay_identity="1" - debug_log_file "No stored identity found, using default: 1" - else - debug_log_file "Using stored identity: $overlay_identity" - fi + overlay_identity=$1 # Overlay identity to delete debug_log_file "Deleting overlay with identity: $overlay_identity" @@ -233,86 +270,46 @@ delete_overlay() { return 1 fi - # Remove stored identity file since overlay is deleted - rm -f "$IDENTITY_FILE" 2>/dev/null || true - debug_log_file "Successfully deleted overlay and cleared stored identity" return 0 } # Helper function to update or create overlay -# If identity file exists, update the existing overlay. Otherwise, create a new one. +# If identity exists, update the existing overlay. Otherwise, create a new one. +# If the update fails due to invalid identity (code 302), removes the identity file +# and creates a new overlay since this means the overlay was deleted externally. update_or_create_overlay() { text=$1 # Text content x=$2 # X coordinate y=$3 # Y coordinate debug_log_file "Attempting to update or create overlay - Text: $text, Pos: ($x, $y)" - - # Check if identity file exists - if it does, we have an existing overlay to update - if [ -f "$IDENTITY_FILE" ]; then - debug_log_file "Identity file exists, updating existing overlay" - update_overlay "$text" "$x" "$y" - return $? - else - debug_log_file "Identity file does not exist, creating new overlay" - add_overlay "$text" "$x" "$y" - return $? - fi -} -# Function to control overlays via VAPIX API -control_overlay() { - action=$1 # Action to perform (add, update, update_or_add, delete) - text=$2 # Text content (for add and update) - x=$3 # X coordinate - y=$4 # Y coordinate - - debug_log_file "Making VAPIX API call - Action: $action, Text: $text, Pos: ($x, $y)" - case $action in - "add") + # Try to get stored identity + if overlay_identity=$(get_stored_identity); then + # Found stored identity, update the existing overlay + debug_log_file "Found stored identity: $overlay_identity, updating existing overlay" + update_overlay "$text" "$x" "$y" "$overlay_identity" + update_exit=$? + + # Check if update failed due to invalid identity (return code 2), if so + # remove the identity file and create a new overlay. + if [ $update_exit -eq 2 ]; then + debug_log_file "Invalid identity detected (overlay was deleted), removing identity file and creating new overlay" + rm -f "$IDENTITY_FILE" 2>/dev/null || true add_overlay "$text" "$x" "$y" return $? - ;; - "update") - update_overlay "$text" "$x" "$y" - return $? - ;; - "update_or_add") - update_or_create_overlay "$text" "$x" "$y" - return $? - ;; - "delete") - delete_overlay - return $? - ;; - *) - debug_log_file "ERROR: Unknown action: $action" - return 1 - ;; - esac + fi - api_exit=$? - debug_log_file "API call exit code: $api_exit" - debug_log_file "API response: $api_response" - - if [ $api_exit -ne 0 ]; then - debug_log_file "ERROR: VAPIX API call failed - Action: $action (exit code: $api_exit)" - printf "Failed to %s overlay" "$action" >&2 - return 1 - fi - - # Check if response contains an error - if echo "$api_response" | grep -q "\"$API_ERROR_STRING\""; then - debug_log_file "ERROR: VAPIX API returned error - Action: $action" - debug_log_file "ERROR: Response: $api_response" - printf "Failed to %s overlay" "$action" >&2 - return 1 + return $update_exit else - debug_log_file "VAPIX API call successful - Action: $action" - return 0 + # No stored identity found, create a new overlay + debug_log_file "No stored identity found, creating new overlay" + add_overlay "$text" "$x" "$y" + return $? fi } + debug_log_file "Starting overlay_manager.sh script" debug_log_file "Environment variables - VAPIX_USERNAME: $VAPIX_USERNAME, VAPIX_IP: $VAPIX_IP, DEBUG: $DEBUG" @@ -407,7 +404,7 @@ debug_log_file "Overlay text: $overlay_text" # Update or create overlay for current detection debug_log_file "Updating/creating overlay for track: $track_id" -if control_overlay "update_or_add" "$overlay_text" "$center_x" "$center_y"; then +if update_or_create_overlay "$overlay_text" "$center_x" "$center_y"; then debug_log_file "Overlay updated/created successfully for track: $track_id" else debug_log_file "ERROR: Failed to update/create overlay for track: $track_id" @@ -416,4 +413,3 @@ else fi debug_log_file "Script completed successfully for track: $track_id" - From b7c5308ab9f9af38ab1a1694903c770eb9baf946 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Mon, 1 Dec 2025 15:05:51 +0100 Subject: [PATCH 38/42] Refactor error and exit --- .../overlay_manager.sh | 31 ++++++++----------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/project-time-in-area-analytics/overlay_manager.sh b/project-time-in-area-analytics/overlay_manager.sh index b02d429..8b5b9d1 100755 --- a/project-time-in-area-analytics/overlay_manager.sh +++ b/project-time-in-area-analytics/overlay_manager.sh @@ -70,6 +70,15 @@ debug_log_file() { return 0 } +# Function to log an error message and exit with the specified code +error_exit() { + _exit_code=$1 + _error_message=$2 + debug_log_file "ERROR: $_error_message" + printf "%s" "$_error_message" >&2 + exit "$_exit_code" +} + # Function to get stored overlay identity or return an error # code if the file does not exist. get_stored_identity() { @@ -335,9 +344,7 @@ debug_log_file "Received JSON input: $json_input" # Validate that we received input data if [ -z "$json_input" ]; then - debug_log_file "ERROR: Empty input received from Telegraf" - printf "Empty input received from Telegraf" >&2 - exit 11 + error_exit 11 "Empty input received from Telegraf" fi # Extract required fields from JSON using jq @@ -358,23 +365,13 @@ debug_log_file "Extracted fields - track_id: $track_id, time_in_area_seconds: $t if [ -z "$track_id" ] || [ "$track_id" = "null" ] || \ [ -z "$time_in_area" ] || [ "$time_in_area" = "null" ] || \ [ -z "$timestamp" ] || [ "$timestamp" = "null" ]; then - debug_log_file "ERROR: Missing required track info fields in JSON input" - printf "Missing required track info fields in JSON input. "\ - "Required: track_id, time_in_area_seconds, timestamp. "\ - "Received: track_id='%s', time_in_area_seconds='%s', timestamp='%s'" \ - "$track_id" "$time_in_area" "$timestamp" >&2 - exit 12 + error_exit 12 "Missing required track info fields in JSON input. Required: track_id, time_in_area_seconds, timestamp. Received: track_id='$track_id', time_in_area_seconds='$time_in_area', timestamp='$timestamp'" fi # Use pre-calculated coordinates if [ -z "$center_x" ] || [ "$center_x" = "null" ] || \ [ -z "$center_y" ] || [ "$center_y" = "null" ]; then - debug_log_file "ERROR: Missing required coordinate fields in JSON input" - printf "Missing required coordinate fields in JSON input. "\ - "Required: center_x, center_y. "\ - "Received: center_x='%s', center_y='%s'" \ - "$center_x" "$center_y" >&2 - exit 12 + error_exit 12 "Missing required coordinate fields in JSON input. Required: center_x, center_y. Received: center_x='$center_x', center_y='$center_y'" fi # Get first 10 chars of track_id and add dots if it's longer than 13 chars. @@ -407,9 +404,7 @@ debug_log_file "Updating/creating overlay for track: $track_id" if update_or_create_overlay "$overlay_text" "$center_x" "$center_y"; then debug_log_file "Overlay updated/created successfully for track: $track_id" else - debug_log_file "ERROR: Failed to update/create overlay for track: $track_id" - printf "Failed to update/create overlay for track %s" "$track_id" >&2 - exit 13 + error_exit 13 "Failed to update/create overlay for track $track_id" fi debug_log_file "Script completed successfully for track: $track_id" From 1b216dc1a932de95b1e67392004c404c3cbe7838 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Mon, 1 Dec 2025 15:10:05 +0100 Subject: [PATCH 39/42] Review comments --- .../overlay_manager.sh | 35 ++++++++++++------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/project-time-in-area-analytics/overlay_manager.sh b/project-time-in-area-analytics/overlay_manager.sh index 8b5b9d1..9e5858d 100755 --- a/project-time-in-area-analytics/overlay_manager.sh +++ b/project-time-in-area-analytics/overlay_manager.sh @@ -21,7 +21,7 @@ set -eu # Environment Variables: # - VAPIX_USERNAME: Device username (required) # - VAPIX_PASSWORD: Device password (required) -# - HELPER_FILES_DIR: Directory for debug log files (required) +# - HELPER_FILES_DIR: Directory for storing overlay identity and debug log files (required) # - VAPIX_IP: IP address of the Axis device (defaults to 127.0.0.1 for localhost) # - TELEGRAF_DEBUG: Enable debug logging when set to "true" (defaults to false) # - FONT_SIZE: Font size for the overlay text (defaults to 32) @@ -52,12 +52,17 @@ IDENTITY_FILE="${HELPER_FILES_DIR}/.overlay_identity_${OVERLAY_CONTEXT}" # be changed! API_ERROR_STRING="error" -# Validate required environment variables for VAPIX API access +# Validate required environment variables if [ -z "$VAPIX_USERNAME" ] || [ -z "$VAPIX_PASSWORD" ]; then printf "VAPIX_USERNAME and VAPIX_PASSWORD must be set" >&2 exit 10 fi +if [ -z "$HELPER_FILES_DIR" ]; then + printf "HELPER_FILES_DIR must be set" >&2 + exit 10 +fi + # Debug mode - use TELEGRAF_DEBUG environment variable DEBUG="${TELEGRAF_DEBUG:-false}" @@ -77,23 +82,30 @@ error_exit() { debug_log_file "ERROR: $_error_message" printf "%s" "$_error_message" >&2 exit "$_exit_code" + return 1 # Should never get here... } # Function to get stored overlay identity or return an error -# code if the file does not exist. +# code if the file does not exist or is empty. get_stored_identity() { if [ -f "$IDENTITY_FILE" ]; then - # Write identity as response and return success code - cat "$IDENTITY_FILE" 2>/dev/null | tr -d '\n' - return 0 - else - echo "" + # Read identity from file + _identity=$(cat "$IDENTITY_FILE" 2>/dev/null | tr -d '\n') + + # Validate that we got a non-empty identity + if [ -n "$_identity" ]; then + echo "$_identity" + return 0 + fi fi + + # File doesn't exist or is empty - both cases should create new overlay + echo "" return 1 } # Function to store overlay identity in a persistent file. -# Returns 1 on failure to prevent accumulation of orphaned overlays on the device. +# Returns 1 on failure to save the file. store_identity() { _identity=$1 if ! echo "$_identity" > "$IDENTITY_FILE"; then @@ -153,7 +165,7 @@ add_overlay() { if [ -n "$overlay_identity" ] && [ "$overlay_identity" != "null" ]; then debug_log_file "Overlay added successfully with identity: $overlay_identity" - # Store the identity - if this fails, propagate the error to prevent orphaned overlays + # Store the identity - if this fails, propagate the error if ! store_identity "$overlay_identity"; then debug_log_file "ERROR: Failed to store overlay identity" printf "Failed to store overlay identity to file %s" "$IDENTITY_FILE" >&2 @@ -165,9 +177,6 @@ add_overlay() { debug_log_file "ERROR: Overlay added but could not extract identity from API response" return 1 fi - - # Should never get here... - return 1 } # Helper function to update an existing overlay From 5baf268ab74b093b770a3772de48fda01ba9ca6a Mon Sep 17 00:00:00 2001 From: fixedit-olatz Date: Mon, 1 Dec 2025 13:17:41 +0100 Subject: [PATCH 40/42] Change flush intervals for outputs Using the default flush interval might lead to delayed event triggers. This commit sets the flush interval to 1 second in order to make it more responsive. --- project-time-in-area-analytics/config_output_events.conf | 5 ++++- project-time-in-area-analytics/config_output_overlay.conf | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/project-time-in-area-analytics/config_output_events.conf b/project-time-in-area-analytics/config_output_events.conf index 919291b..2bab3ef 100644 --- a/project-time-in-area-analytics/config_output_events.conf +++ b/project-time-in-area-analytics/config_output_events.conf @@ -65,4 +65,7 @@ data_type = bool default_value = false """ - ] \ No newline at end of file + ] + + # Flush interval set to 1 second to ensure timely processing. + flush_interval = "1s" \ No newline at end of file diff --git a/project-time-in-area-analytics/config_output_overlay.conf b/project-time-in-area-analytics/config_output_overlay.conf index 914e022..5338b25 100644 --- a/project-time-in-area-analytics/config_output_overlay.conf +++ b/project-time-in-area-analytics/config_output_overlay.conf @@ -58,3 +58,6 @@ # Setting this makes the application more robust since it can recover from # a hanging script. timeout = "15s" + + # Flush interval set to 1 second to ensure timely processing. + flush_interval = "1s" From 31f5f97cbd3c26e3b5e83fc6d244f4f3f469d2d7 Mon Sep 17 00:00:00 2001 From: fixedit-olatz Date: Mon, 1 Dec 2025 14:54:57 +0100 Subject: [PATCH 41/42] Change heartbeat flush interval We do this because the alerting_frame_two metrics seem to arrive batched every second. Having the heartbeat every two seconds instead of every second gives the batch time to arrive, which prevents "empty" periods where the event shows as "inactive". --- .../config_process_alarming_state.conf | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/project-time-in-area-analytics/config_process_alarming_state.conf b/project-time-in-area-analytics/config_process_alarming_state.conf index 0f20c0c..05967d6 100644 --- a/project-time-in-area-analytics/config_process_alarming_state.conf +++ b/project-time-in-area-analytics/config_process_alarming_state.conf @@ -12,7 +12,12 @@ # so it does not matter what data it includes. commands = ["sh -c 'echo heartbeat value=1i'"] data_format = "influx" - interval = "1s" + # TODO: we set this to 2 seconds since we seem to get + # the alerting_frame_two metrics batched every second, + # so we want to have enough time for those metrics to + # have arrived by the time we check the heartbeat. + # We should investigate this further to verify this. + interval = "2s" name_override = "alarming_state_heartbeat" # ---- Starlark processor ---- @@ -41,17 +46,16 @@ state between calls. We can use it to store information such as the "has_alarm_since_last_heartbeat" value. """ state = { - # This variable is used to track if an "alerting_frame_two" - # metric has been received since the last + # This variable is used to count how many "alerting_frame_two" + # metrics have been received since the last # "alarming_state_heartbeat" metric. - "has_alarm_since_last_heartbeat": False + "alert_count_since_last_heartbeat": 0 } def apply(metric): - # If we got an alerting frame, update the state to alerting state - # and return without producing any metric. + # If we got an alerting frame, increment the counter and return without producing any metric. if metric.name == "alerting_frame_two": - state["has_alarm_since_last_heartbeat"] = True + state["alert_count_since_last_heartbeat"] += 1 return # Validate that the metric is a heartbeat @@ -59,15 +63,17 @@ def apply(metric): log.debug("Error: received metric with unexpected name: " + metric.name) return - has_alarm_since_last_heartbeat = state.get("has_alarm_since_last_heartbeat") + # Log the number of alerting frames received since last heartbeat + log.debug("Alerting frames since last heartbeat: " + str(state.get("alert_count_since_last_heartbeat", 0))) - # We want to track if the alarm has been triggered between - # heartbeats, so we always reset the state to False at - # each heartbeat so we can start monitoring again. - state["has_alarm_since_last_heartbeat"] = False + alert_count = state.get("alert_count_since_last_heartbeat", 0) + alert_state = alert_count > 0 + + # Always reset the counter to 0 at each heartbeat so we can start monitoring again. + state["alert_count_since_last_heartbeat"] = 0 alarming_state_metric = Metric("alerting_state_metric") alarming_state_metric.time = metric.time - alarming_state_metric.fields["active"] = has_alarm_since_last_heartbeat + alarming_state_metric.fields["active"] = alert_state return alarming_state_metric ''' \ No newline at end of file From abaaa418671996544b0c7946afc523308732a8b5 Mon Sep 17 00:00:00 2001 From: Daniel Falk Date: Mon, 1 Dec 2025 15:42:48 +0100 Subject: [PATCH 42/42] Use metric_batch_size instead of flush_interval --- project-time-in-area-analytics/config_output_events.conf | 6 ++++-- project-time-in-area-analytics/config_output_overlay.conf | 3 --- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/project-time-in-area-analytics/config_output_events.conf b/project-time-in-area-analytics/config_output_events.conf index 2bab3ef..dfeaa24 100644 --- a/project-time-in-area-analytics/config_output_events.conf +++ b/project-time-in-area-analytics/config_output_events.conf @@ -67,5 +67,7 @@ """ ] - # Flush interval set to 1 second to ensure timely processing. - flush_interval = "1s" \ No newline at end of file + # Process one metric at a time for immediate response. + # This ensures each event gets sent immediately. + # Higher values would batch multiple changes (undesirable). + metric_batch_size = 1 \ No newline at end of file diff --git a/project-time-in-area-analytics/config_output_overlay.conf b/project-time-in-area-analytics/config_output_overlay.conf index 5338b25..914e022 100644 --- a/project-time-in-area-analytics/config_output_overlay.conf +++ b/project-time-in-area-analytics/config_output_overlay.conf @@ -58,6 +58,3 @@ # Setting this makes the application more robust since it can recover from # a hanging script. timeout = "15s" - - # Flush interval set to 1 second to ensure timely processing. - flush_interval = "1s"