Skip to main content
DoneThat

AI Adoption GuideGovernmentInspect

Computer vision site auditor

Vision model analyzes drone and satellite imagery to detect unauthorized construction, environmental violations, and infrastructure defects across large geographies without site visits.

Government processPlanFundAuthorizeDeliverInspectEnforceReportClose

By Don, DoneThat’s AI coach · updated

The model returns a cited flag or nothing

A computer vision site auditor does not issue a violation, score a geography, or close an inspection. It reads a loaded image and either writes a flag that cites the image ID, the capture timestamp, and the visual artifact that triggered it, or it leaves the field empty.

Empty is the correct result for ordinary imagery. A permitted pad, a dry channel with no new cut, a roof that matches the last allowed footprint: those stay empty. If every tile lights up because a threshold was set for "something might be here," you do not have an auditor. You have a highlighter with no cite.

The inspector still visits or clears. The flag is a pointer, not a finding, not a notice, and not a rate. Do not publish a violation percentage from the model's output. You do not know the base rate of real issues in the imagery, and the model does not know permit status, easements, or what a landowner was allowed to build.

Platforms that already sit in government imagery stacks, Palantir, Microsoft, AWS, Esri, can host or serve the same pattern: ingest, detect, cite, stop. Treat them as a class of places the model can run, not as a ranked list of site-auditor products. None of them replace the visit or the clearance.

Load the imagery before you ask for a read

The how-to starts with load, not with detect.

Bring in the drone pass and the satellite scene as identifiable objects. Each frame needs an image ID you can retrieve later, a capture timestamp (the moment the photons were recorded, not the time the job ran), georeference so a tile maps to a parcel or a structure, and enough resolution that a person can see the same artifact the model named. If the ID is a batch name and the timestamp is "processed this morning," the flag cannot be audited.

Keep drone and satellite in the same queue only when you can tell them apart in the cite. A nadir satellite scene and an oblique drone still of the same parcel are different evidence. Mixing them without naming the source image is how a shadow on one pass becomes a "new structure" on the other.

Do not run the model on a mosaic that has already been colorized, sharpened, or stitched until you know what the processing did to edges. A red overlay from a previous run is not an artifact. If a tile arrives already painted, strip the overlay or reject the frame.

Load parcel ID, last permitted footprint, and last inspection date next to the image, not into the model's prompt as a conclusion. The model should not invent a building because a parcel is vacant on the tax roll. Vacant on the roll and empty in the photo are different facts. Pair this load step with the risk-based inspection scheduler only after frames exist as cited objects. Scheduling work against unnamed tiles recreates the red-tile problem in the calendar.

Write the flag so an inspector can find the artifact

When the model sees something, the flag has three required cites: image ID (the exact frame, not the survey name), timestamp (when the photons were captured), and visual artifact (the thing in the pixels, in language an inspector can match on a screen).

"Bright rectangle, approximately vehicle-length, north of the gravel track, hard edge against canopy" is a cite. "Possible unauthorized construction" is not. The second sentence is a finding. The model is not allowed to write findings.

If any of the three cites is missing, the flag is incomplete. Do not send it. A red tile with no artifact in the text is a failure mode, not a detection. The color is a UI choice. The artifact is the evidence. Without it, the inspector is hunting a map for a reason someone else could not name.

One illustrative pass: a floodplain crew loads a post-storm drone strip over a two-kilometer corridor. On one frame the model writes a flag: image DRN-20260314-0841-117, captured 14 March at 08:41, artifact a pale rectangle with a sharp western edge sitting in a pasture that the last permitted imagery showed as grass. The inspector opens that frame, sees the rectangle, and goes to the parcel. It is a tarp over hay. They clear the flag. Nothing in that sequence is a violation rate. One image produced one cited pointer. The field visit produced the finding: no construction.

The same cite rule applies when the signal is not pixels. A sensor-based infrastructure anomaly detector should name the sensor, the time, and the reading that looked off, or it should stay empty. Do not merge a vision flag and a sensor spike into one "issue" until a person has looked at both cites.

Ordinary imagery stays empty

Most frames in a large geography are ordinary. The pipeline must be allowed to return nothing. Pressure to "show activity" produces the red tile with no artifact. Quality is that an inspector can open a queue of flags and expect each row to point at a visible thing.

If the model is unsure, empty is still correct. Uncertainty is not a cite. Do not downgrade "I think I see a line" into a flag with a vague artifact. Vague artifacts train inspectors to ignore the queue.

Do not backfill empty fields with categories from a violation pattern classifier after the fact. Classification of a confirmed violation is a later step. Painting a class onto an empty image invents a legal label with no visual.

Seasonal change, parked equipment, and shadows are ordinary until an inspector says otherwise. The model may describe a long dark triangle at 16:00 on a north-south fence line. That description can be a valid artifact cite. Calling it a building is inventing a structure that is a shadow. Keep the pixels. Drop the architecture.

Cloud, compression, and resampling create false hard edges. If the artifact disappears when you open the original frame at native resolution, the flag was citing a processing ghost. Load originals, not previews, before you trust a sharp rectangle.

The inspector visits or clears

The flag lands in a work queue. A person who can go to the site, or who can open the image at enough zoom to see the named artifact, decides.

Visit when the artifact is consistent with something that, if real, would need boots on the ground: a new pad, a cut bank, a span with missing members, a plume, a filled-wetland signature the photo actually shows. Clear when the named artifact is explained without a violation: tarp, shadow, permitted work, seasonal water, sensor bloom.

Treating the flag as a finding is the failure mode that turns a pointer into a case file. If your system auto-drafts a notice from the model's sentence, stop. An inspection report auto-drafter can help after the inspector has written what they saw. It should not treat the vision flag as the body of the report.

Priority of which flags to visit first is not this model's job. A scheduler sequences work. It does not add artifacts the images do not contain. When you clear, keep the cites. Empty the finding, not the audit trail. A later review should still retrieve image ID, timestamp, and the artifact text, plus the inspector's clearance note. That is how you catch a model that keeps inventing buildings from afternoon shade.

Coverage of a large geography without a site visit for every hectare is the point of drone and satellite intake. Coverage is not a completed inspection. The visit or the clearance is the inspection. The model only tells you which frames earned a look. Widen the geography, keep the cite, leave ordinary frames alone, and reject a red tile that names no artifact.

Is this worth automating for you?

Whether this pays back depends on how much time it takes your team today. Most teams estimate that from memory, and the estimate is usually wrong in one direction or the other. This one is rated high effort to implement, so the baseline matters more than usual.

DoneThat reconstructs where the time actually went, with no timers to forget, so you can measure the baseline before committing to a project and check the gain afterward.

Measure the baseline first