Skip to main content

Guetteur (Team Drift): active perception with receipts

Guetteur is French for "lookout". An agent watches a space through depth only, decides what to look at next using OpenCV 5 evidence, stops at a human gate before anything outward-facing happens, and attaches a re-runnable receipt to every claim it makes.

Status (2026-10-15): submitted to the OpenCV AI Competition powered by AWS. Devpost entry · Narrated demo (3:52) · Submission receipt. AWS judge demo deployed; physical depth capture verified. Try the live dashboard. The published accuracy results remain synthetic-only. Three physical OAK-D depth takes (empty baseline, walkthrough, item removal) each contain 300 integrity-checked 640x400 frames; calibrated replay and real-world accuracy measurement remain open. The AWS demo runs built-in synthetic scenes, not a live camera feed. See current evidence.

Built for the OpenCV AI Competition 2026 (Agentic Vision path). Rules notes with section citations: docs/RULES_NOTES.md.

What it does

depth frames ──> OpenCV 5 perception ──> evidence (JSON, no pixels) ──> planner ──> action ──> next perception call
                 inpaint, medianBlur,                                  rule-based    recheck_zone / pause_zone /
                 morphology, connected                                 (LLM slot)    compensate_drift / degrade_zone
                 components, Farneback                                               request_approval  (human gate)
                                                                                          │
                                           every claim ──> claim.json ──> receipts ──> prove-it-done verifier
  • Ambiguous evidence changes the next tool call. A 25 mm change is ~3.5 sigma in one frame; the planner asks recheck_zone(n=7) and OpenCV 5 re-runs on the integrated window before anyone is bothered.
  • Presence is not a change. A person-sized blob nearer than the scene pauses that zone.
  • Sensor trouble is not a scene event. Noise bursts degrade the zone, gain drift is compensated, lost depth escalates as a camera fault.
  • Default is deny. If no human answers the approval request, nothing is published.
  • Claims carry receipts. Each claim is re-checked by two independent estimators (numpy-only, and OpenCV frame statistics) against the pinned input, and the vendored prove-it-done verifier judges the ledger. Claims doctored beyond the tolerance (max(8 mm, 25% of the value)) fail: inflated, pointed at the wrong pixels or time, or re-pointed at another recording. Smaller inflations pass by design.

Quick start (macOS/Linux, Python 3.12, uv)

uv sync                                    # pinned: opencv-python-headless==5.0.0.93, numpy==2.5.4, pytest==9.1.1 (see uv.lock)
uv run pytest                              # ~2-3 minutes; includes the real verifier and tamper tests
uv run guetteur scenarios                  # the 11 synthetic scenarios and their ground truth
uv run guetteur demo                       # narrated demo (the judge demo without a camera)
uv run guetteur run subtle_item_removed --verify     # one scenario: trace, alerts, score, receipts
uv run guetteur run person_takes_item --gate timeout # human gate times out -> nothing is published
uv run guetteur run subtle_item_removed --planner naive   # the threshold-and-alert baseline misses it
uv run guetteur eval                       # all scenarios x 3 seeds x 3 planners -> eval/results.json
uv run guetteur bench                      # per-frame runtime on this machine -> eval/runtime.json
uv run guetteur serve                      # the judge dashboard + API on http://127.0.0.1:8080/

From PyPI instead of a clone (Python 3.12): pip install guetteur, then the same commands without uv run (for example guetteur demo). Outputs go under the working directory.

Re-verify any ledger yourself: uv run guetteur verify-ledger runs/<run>/receipts.md (runs the vendored third_party/prove_it_done/verify_receipts.py, pinned to prove-it-done commit d897534).

Optional physical-camera capture

An opt-in, depth-only native recorder and operator run sheet are available in docs/REAL_DEPTH_CAPTURE.md. Hardware capture and clean shutdown are verified; calibrated replay remains open. This does not change the synthetic-only status of the accuracy evaluation.

Layout

Path What
src/guetteur/perception.py OpenCV 5 pipeline: holes, denoise, change evidence, morphology, blobs, optical flow, coarse grid
src/guetteur/planner.py Planner interface, RulePlanner, NaivePlanner (ablation), LLMPlanner slot + action validation
src/guetteur/agent.py executor: autonomy policy, evidence guardrails, human gate, trace
src/guetteur/receipts.py, check_numpy.py, check_cv.py claims, ledger writer, the two independent re-checks
src/guetteur/synth.py synthetic depth scenes with ground truth (11 scenarios)
src/guetteur/cloud/ the Lambda handler (also served locally), dashboard page, approval/evidence store
INFRA/ AWS SAM template for the deployed judge endpoint; optional phase-2 resources are not deployed
deploy/ credential-free CloudShell deploy kit: cloudshell-deploy.sh, make-artifact.sh, guardrail check
third_party/prove_it_done/ vendored verifier (MIT), provenance in PROVENANCE.md
tests/ unit, scenario, receipt/tamper, and API tests
docs/ RULES_NOTES.md, EVALUATION.md (generated), TRACE_EXAMPLE.md, report/ (technical report, PDF)

Honest limits

  • Accuracy metrics are synthetic-only. Physical depth recordings exist, but calibration, interval labels, and held-out replay are still required before a real-world accuracy claim.
  • Depth cannot tell what an object is; claims say "a region became farther by 24 mm", not "a bottle was removed".
  • Changes under ~1 sigma after filtering are invisible (documented miss: subthreshold_item_removed).
  • The LLM planner is an interface plus tests with a fake model; no model is called.
  • The edge/cloud approval path (DynamoDB, S3, authenticated routes) is code plus local tests only; the first AWS deployment is a public synthetic-demo endpoint (INFRA/README.md).
  • The deployed AWS scope is API Gateway + Lambda arm64 running OpenCV and receipt checks. DynamoDB, S3, and authenticated real-camera approvals remain phase-2 code with local tests only.
  • The dashboard gate selector simulates approve/deny/timeout; it is not a deployed authenticated human-approval workflow.
  • The demo has API throttling but no reserved-concurrency cap because the account quota could not support the reservation.

License

MIT (see LICENSE). Vendored third_party/prove_it_done is MIT as well.

Metadata

Release files for guetteur 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for guetteur 0.1.0
File Size Uploaded Provenance Actions
guetteur-0.1.0.tar.gz 111.2 kB With provenance Details for guetteur-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for guetteur 0.1.0
File Interpreter ABI Platform Actions
guetteur-0.1.0-py3-none-any.whl Python 3 none any Details for guetteur-0.1.0-py3-none-any.whl

Total release size: 169.1 kB

Release files / guetteur-0.1.0.tar.gz

Download URL guetteur-0.1.0.tar.gz
Size 111.2 kB
Tags Source
SHA-256 checksum
How to use checksums
633671d8a9f46e97c69fc572886e8f293b2c27ceeebc6e0b421af13e8da3e315
BLAKE2b-256 checksum
How to use checksums
850ab1284bea31f07562b378d9553fa9646be63e3e052a80f7b89d3127787fbc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 11, 2026.

Transparency log

Release files / guetteur-0.1.0-py3-none-any.whl

Download URL guetteur-0.1.0-py3-none-any.whl
Size 57.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
32b235ee6b5f89fc949a6bd5a558cf912ad32af8fb585fd29d2b47d7677362ac
BLAKE2b-256 checksum
How to use checksums
c9ad8db625320e976b1a4bb6d3e88db4b32ae7346fd91d9acaffdff199ffccde
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 11, 2026.

Transparency log

Security for guetteur 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for guetteur-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 11, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page