Inspiration

I wanted to build something physical: a system that looks at a real river, not a dashboard of numbers. Low-water crossings are where people drive into floods, and the USGS already has cameras pointed at many of them that nobody measures.

What it does

RiverWatch reads the water level from a river camera with OpenCV 5, compares it with the official gages, and forecasts whether the crossing will close in the next hour. An Amazon Nova agent decides what to do next: check more often, flag a broken sensor, or ask a human operator to close the crossing. Nothing is published without the operator.

How we built it

Classical OpenCV 5: quality checks, image alignment, and comparing frames 15 minutes apart to find moving water and measure the waterline. A small forecast model trained on 9.5 years of gage data. The agent runs on Amazon Bedrock, and everything runs on AWS: Lambda on Graviton, S3, CloudFront and SNS.

Challenges we ran into

Muddy flood water and dry gravel look almost the same colour, and moving shadows looked like flowing water. The official gage at our test site turned out to be broken. And the model sometimes made unsafe choices, so the safety rules now live in code, not in the prompt.

Accomplishments that we're proud of

Replaying the real flash flood of 2 October 2026, the agent sent an early warning 85 minutes before the water covered the crossing. The camera reads the level within 20 cm on average, and the system is live today.

What we learned

Test an agent like a system: real data, injected failures, repeated runs. And be honest about where it fails.

What's next for RiverWatch

More of the 1,300+ USGS cameras, night-time readings, and rain data in the forecast.

Built With

Share this project:

Updates

Submission history