Inspiration
A Ring camera can be online and still be blind. A spider web covers the lens. Wind turns the camera away from the door. A motion zone does not include the front door. Motion detection is off in a Mode. The owner finds the problem only after an incident, when no usable video exists.
Owners report this problem. They see motion events with "No video found" (Ring Community). In 2022, Ring staff confirmed that there were no offline notifications (Ring Community). Spider webs cause alerts every 5 to 10 minutes, and the suggested fix is to snooze alerts (Ring Community). In a Parks Associates survey, 34% of smart home device owners had at least one technical problem in a year (Security Systems News).
Ring's Device Health screen checks the connection. It does not check the picture or the zones. I wanted a tool that checks what the camera can actually see.
What it does
Blindspot gives each camera one state: Watching, Needs attention, Blind, Offline, or Unverified. It does four checks:
- Liveness: Is the camera online? Is the newest still recent?
- Image health: Is the lens covered, partly covered, blurred, or washed out by glare?
- View drift: Did the camera move? How far, in percent and degrees?
- Zone audit: Do the motion zones and privacy zones still cover the door, walkway, and driveway?
For each problem, Blindspot gives one fix. The fix tells the owner what to change in the Ring app. Blindspot never shows "fine" without evidence. If it cannot get a fresh still, the state is Unverified.
The zone audit is the new part. Other products detect a covered lens. I found no product that compares the owner's zones with what the camera actually sees.
How I built it
- Ring Partner API: Blindspot uses
RingClientfrom the open-sourcering-sandboxlibrary. It reads device status, configurations (motion zones, privacy zones, night vision), and the latest still with itsX-Media-Timestamp. It receives Ring webhooks and verifies each HMAC signature. - Simulated home: I do not own a Ring camera. The hackathon allows simulators, so I built a simulated home with three cameras on the
ring-sandboxemulator. Each camera takes a still every minute, like Ring Snapshot Capture. A control panel covers a lens, turns a camera, changes a zone, or unplugs a camera. All simulated data is labeled "Simulated". The same code can connect to a real Ring account. - Image checks: OpenCV measures sharpness, edges, and texture. ORB features and RANSAC measure camera movement. Shapely calculates how much of each key place is inside the motion zones.
- Confirmation: an image problem must appear in 3 new stills in a row before Blindspot sends an alert. A moth or a car headlight does not cause an alert.
- AWS: API Gateway, AWS Lambda, Amazon SQS with a dead-letter queue, Amazon EventBridge Scheduler, Amazon DynamoDB, Amazon S3, AWS Secrets Manager, and AWS CDK. [Add Amazon Bedrock and Amazon SES only if you used them.]
- Fast webhooks: a small, separate Lambda function receives Ring webhooks. It does not load the image libraries, so it replies in less than 5 seconds.
The main metric is time to detect (TTD):
$$TTD = t_{\text{alert}} - t_{\text{onset}}$$
For a fleet, the blind hours that Blindspot can prevent each year for every 1,000 cameras are:
$$H = 1000 \cdot f \cdot \left(B_{\text{baseline}} - B_{\text{Blindspot}}\right)$$
Here, $f$ is the number of silent failures for each camera each year, and $B$ is the blind time for each failure. No public value for $f$ exists, so I do not estimate $H$.
Challenges I ran into
- No Ring camera: I built a simulated home and kept the real Ring API code path.
- False alarms from light: a porch light or a sunset changes the picture. Blindspot compares each still with the camera's own day and night reference and corrects for contrast.
- Bad reference views: in my first prototype, Blindspot learned a hand over the lens as the normal view. Now it learns a reference only from a still with real detail.
- Speed versus privacy: each still request shows in the owner's Ring history. Blindspot checks every 15 minutes. It checks sooner when Ring sends an event or when a check finds a possible problem.
- The same still counted twice: a fast re-check can read the same still again. Blindspot counts only stills that are newer than the last one.
- Old timestamps in the emulator: the emulator returned an old time for the newest still, so I added my own media route to the simulator.
What I learned
- Ring checks the connection. The gap is the picture and the zones.
- Simple
Built With
- amazon-cloudwatch
- amazon-dynamodb
- amazon-ecr
- amazon-eventbridge
- amazon-ses
- amazon-sns
- amazon-sqs
- amazon-web-services
- aws-cdk
- aws-lambda
- aws-secrets-manager
- cloudwatch
- docker
- dynamodb
- eventbridge
- fastapi
- javascript
- jinja
- lambda
- numpy
- opencv
- python
- ring
- ring-sandbox
Log in or sign up for Devpost to join the conversation.