Inspiration

Deposit disputes at move-out come down to one question: was this damage there when the tenant moved in? Move-in photos exist, but they are taken from different angles in different light, so comparing them is guesswork and both sides argue. Landys Inspect makes the comparison fair.

The camera guides you back to the exact same shot, so only real changes show up.

What it does

  1. Stations: each room gets 3–6 fixed views (for example "kitchen counter"). Move-in captures one reference photo per station; faces are blurred before anything is stored.
  2. Guided move-out capture (active perception): the app shows the reference as a ghost overlay. Every attempt is aligned against it and turned into one instruction: step left, tilt down, move closer, hold still, more light. If a station can't be matched after N attempts it is honestly marked not comparable, never forced.
  3. Change detection: warp to the reference, normalise lighting, and fuse structural (SSIM), colour (ΔE in Lab) and edge-orientation differences, only inside a reliability mask where local alignment holds.
  4. Agentic review: a vision model on Amazon Bedrock classifies each region (new damage, wear and tear, cleaning, item moved or missing, lighting or reflection, uncertain). The agent can ask for a close-up of a doubtful region, which is aligned and re-compared. Policy code, not the model, decides flag / ignore / review, and anything uncertain goes to a human.
  5. Both-party review and report: landlord and tenant see the same before/after slider, label and reason, and each can Agree or Dispute with a note. The printable report covers every station, including the ones that weren't comparable. It never computes money.

How we built it (OpenCV 5)

  • Alignment: SIFT + ratio test as the default, ORB as a fast fallback, and OpenCV 5's learned path for hard cases: cv.ALIKED_create / cv.DISK_create with cv.LightGlueMatcher_create (ONNX through OpenCV DNN). Homography with cv.USAC_MAGSAC; we report inlier ratio, reprojection error and overlap.
  • Guidance: a pure function from alignment metrics, blur (variance of Laplacian) and exposure to a single instruction, with thresholds tuned on our benchmark. No LLM in this loop, so it answers in well under a second.
  • Photometric normalisation: robust gain/offset per Lab channel fitted on inlier neighbourhoods, optional CLAHE.
  • Privacy: cv.FaceDetectorYN (YuNet, pinned ONNX + SHA-256) blurs faces before storage and before the vision model.
  • AWS: the agent runs on the Bedrock Converse API; the API and the mobile web app deploy with AWS CDK.

Evaluation

A reproducible benchmark (bench/) with real indoor photos and controlled changes reports detection quality, false positives on no-change pairs, and a gallery of failure cases. Full numbers are in bench/RESULTS.md in the code archive.

Challenges

AKAZE/KAZE are not in OpenCV 5's main modules, so we rebuilt the matcher around SIFT, ORB and the new learned ALIKED/DISK + LightGlue path. Lighting changes and reflections are the main source of false changes, which is why we normalise photometrically and only compare inside the reliability mask.

What's next

Plugging Inspect into Landys' condition reports, and reusing the same align-and-compare core to verify repair after-photos.

Built With

Share this project:

Updates

posted an update —

Note for judges (posted after the deadline; the submission itself is unchanged).

The video in the submission was finished before the team intro was recorded. Here are the full version and the live deployment:

The deployed stack runs the full OpenCV 5 pipeline: guided capture, alignment, change detection and the decision trace. Bedrock model access for the region-labelling step is still being enabled on our account. Until then, every changed region goes to human review, which is the app's designed fallback.

We're also happy to arrange a live screen-share demo.

Log in or sign up for Devpost to join the conversation.

Submission history