TellTale

A camera that forecasts landslides

TellTale stacks bursts from any fixed camera, removes the camera's own motion, measures ground creep to a hundredth of a pixel, forecasts the failure window, re-measures to verify it, and pages a person.

Classical OpenCV 5 vision with no neural network, the inverse-velocity method mines have used for decades, and a small AWS footprint. A person approves every public alert.

An active coastal bluff at Mukilteo, Washington, on 9 December 2015, overlaid with the motion TellTale measured that day: the landslide body is tinted blue, with arrows pointing downslope
A real landslide on a documented movement day: the USGS time-lapse of the Mukilteo bluff, 9 December 2015. Blue is the ground TellTale measured moving; arrows are its direction.

Watched slopes kill nobody

Creep-type slope failures give warning for days or weeks. Where the ground is watched, people leave in time. Where it is not, the same physics plays out unread.

2013

Bingham Canyon, Utah

Monitoring predicted when the pit wall would fail, and the area was evacuated beforehand. About 65 million m³ came down. No one was hurt.

2023

Brienz, Switzerland

The village was evacuated on a forecast stated as a window, May 15 to June 1. Two million m³ fell on June 15.

2024

Wayanad, India

No deformation monitoring. About 290 to 400 people died, depending on the count.

The difference is an instrument: ground-based radar, costly enough that most mines run one unit per site. Half of the people hit by landslides in the last five years got no warning at all. TellTale applies the same physics to a 30 to 50 USD camera, in daylight, for creep-type failures, and says clearly when it cannot see.

What happens to every burst of photographs

  1. Capture. A fixed camera photographs the slope in bursts of seven frames, a few times a day.
  2. Stack. The frames are registered and median-stacked. Heat shimmer averages toward zero; real movement does not.
  3. Stabilise. The operator marks ground that cannot move. Features there give the camera's own motion, which is removed. If that ground still appears to move, the epoch is rejected as a camera event: the single rule that removes the largest class of false alarms.
  4. Measure. Thousands of small patches are matched against the reference with normalised cross-correlation and refined to a hundredth of a pixel. Patches without texture or with ambiguous matches are excluded, never guessed.
  5. Forecast. Displacement becomes velocity. Once acceleration is sustained and statistically significant, one over velocity falls toward zero along a line; where it crosses the time axis is the forecast, given as a window.
  6. Verify and decide. A bounded agent re-runs OpenCV on the stored images to rule out the camera, the light and the lens. If the motion holds, a duty contact gets approve and dismiss links. Nothing reaches the public without that decision.
The demonstration slope's measured creep, magnified about five times with OpenCV remap. Nothing is invented: every pixel moves by the displacement TellTale measured.

What the evidence says

Every number below comes from a script in the repository, run from a clean clone. Synthetic results are labelled as synthetic.

TestResult
A real landslide, USGS Mukilteo bluff2 of 2 documented movement periods the camera could see were flagged, with 0 false acceleration alarms across 147 quiet days in each of three zones. The wet-lens months were rejected as blurred, not read as quiet.
Public benchmark, SEM 2D DIC Challenge0.0047 px mean error on Sample 1, the best of TellTale, Farneback flow and Lucas-Kanade; within 0.01 px of the best on the noisier sets.
Synthetic sub-pixel accuracy0.006 to 0.010 px mean absolute error across noise and lighting, with bias under 0.003 px.
Synthetic collapse, through the cloud pathTrue failure at t = 50; forecast 50.3. With a fixed reference, coarse-to-fine correlation follows 28 px of motion at 0.007 px error.
Confounders and the agentCamera bump, lighting step and fog raise no false alarm. The agent closes every camera-distortion event as a false alarm and pages a person 42 time units before failure, where thresholds alone page at 3.
Real slopes that failedReplayed on six published monitoring records that ran to failure (Preonzo, Arvigo, Vajont, Hogarth, Veslemannen), the unchanged forecast reached CRITICAL before every one; its last window contained the failure at three of four sites. It also raised twelve early alarms that settled, which is why a person decides.
Cost on AWS GravitonOn one c8g.large, COOL's OpenCV 5.1 processes 1,964 epochs an hour (0.041 USD per 1,000 epochs) and the stock OpenCV 5.0 wheel 2,094 (0.038 USD). Either is about 1.5 times faster and 40 percent cheaper than a matched x86 instance. About 1.40 USD of cloud cost per slope per month in a 50-slope district.
The demonstration slope at its last epoch: still ground grey, the creeping block blue with arrows
The demonstration slope, last epoch before the forecast failure.
The Mukilteo bluff on 20 November 2015, a quiet day: almost no blue tint and few arrows
20 November 2015, a quiet day on the same bluff.
The Mukilteo bluff on 9 December 2015, a documented movement day: the landslide body tinted blue with coherent downslope arrows
9 December 2015, a documented movement day: the slide body moved four to seven times its quiet baseline.

The system on AWS

A camera uploads bursts to S3. A queue feeds a Graviton worker running OpenCV 5. Results reach this dashboard through CloudFront; alerts go out through SNS; human decisions come back through signed links to a Lambda function. One CloudFormation template builds all of it.

Architecture: field camera to S3, SQS, a Graviton EC2 worker running stacking, stabilisation, measurement and forecasting, publishing to CloudFront; CloudWatch alarms, SNS alerts and a human approval link

When the instrument raises an event, the supervising agent, Claude on Amazon Bedrock, can only answer by calling OpenCV again. Each result decides its next call.

Agent workflow: an event triggers perception tools that re-run OpenCV, a bounded decision, and actions limited to capture cadence, paging a person and closing the event

What it cannot do

Questions people ask

Why not satellites?

Satellite radar revisits every few days to weeks, loses coherence on vegetation, and cannot follow the final hours to days of acceleration. A camera on site measures every few hours for the cost of a phone.

What camera do I need?

Any fixed camera with a stable mount and a view of the slope: an old phone, a Raspberry Pi camera, or existing CCTV. Longer focal lengths give finer resolution; a lens hood and heater keep it dry.

What do the time units mean?

Whatever the site uses: hours for an excavation, days for a natural slope, minutes for the tabletop demonstration. The physics is the same.

Who sees the alert?

The duty contact configured for the site receives critical messages with approve and dismiss links. Every decision is logged with its time and source.

Is anyone's privacy affected?

Cameras look at ground and structures. There is no person detection or face processing anywhere in the code, and raw images expire after 30 days.

Words used on the dashboard

Epoch
One burst of frames at one time.
Subset
A small image patch matched between epochs.
ZNCC
Zero-normalised cross-correlation, a match score unaffected by brightness changes.
Coverage
The share of subsets that passed quality checks.
Onset of acceleration
The first epoch of a sustained, statistically significant speed-up.
Inverse velocity
One divided by velocity; for creep it falls in a line to zero at failure.
Camera event
Ground marked as stable appeared to move, so the camera, not the slope, is suspect.
Blind, blurred
Too dark, foggy or wet to measure. Reported, not hidden.