Cows Know Powered by
Connecting

Cow detection

Waiting for the first frame

More detail

Forecast vs. real weather

What the herd is doing

Cows vs. the National Weather Service

--

Waiting for both forecasts

Next 12 hours

Cows on top, NWS below

Last 12 hours

Cow rain chance Sitting Eating Rain at the station

Farm cams

Click one to show it above
Appendix: how the forecast is made

1. Finding the cows

The server grabs still frames from each cam's live stream. Each cam has its own timer. It takes a new frame every 10 seconds while cows are in view in daylight, every minute when there are no cows or it is dark at the farm, and every 5 minutes while the cam is down.

Each frame goes to a Roboflow Workflow on Roboflow's serverless API. In the workflow, an RF-DETR Medium object detection model, trained in Roboflow on labeled cow images that include frames from these cams, puts a bounding box around each cow it finds, labels the cow standing, sitting or eating (drinking counts as eating), and gives each box a confidence score. Each behavior has its own confidence cutoff, taken from the model's evaluation, and the workflow drops boxes under it. RF-DETR sometimes boxes one cow twice, so the server drops any box that overlaps a more confident box with an intersection over union (IoU) of 0.7 or more, or sits at least 80% inside one.

2. Replays and camera moves

Explore.org cams loop old highlight clips after dark and whenever a cam is down. The server spots those frames by the highlight badge in a corner of the picture, looking for bright text inside a box that is darker than the strip next to it. A cam that was replaying counts as live again after two frames in a row without the badge, and highlight frames stay out of the forecast while any cam at the farm is live.

Each frame also gets a 64-bit difference hash, a fingerprint made from a 9 × 8 grayscale thumbnail. When more than 12 of the 64 bits change between two frames from one cam, the camera moved or the stream cut to other footage, and the server leaves that pair out of the Restless signal.

3. Signals

Every signal uses the cow boxes from the last 30 minutes of frames at the selected farm.

SignalHow it is measured
SittingSitting boxes divided by all cow boxes
Bunched upIn each frame, the average distance from each box center to the center of all the boxes, as a share of the frame. The signal is 1 − (the median of that distance across frames ÷ 0.35), kept between 0 and 1
RestlessEach frame is paired with the same cam's frame from about a minute earlier, and each box is matched to the nearest box in the earlier frame (there is no tracker). For each pair, the average distance the box centers moved. The signal is the median of those distances, scaled to one minute, divided by 0.12 of the frame and capped at 1. Pairs where the view changed, or where the boxes moved more than 15% of the frame on average, are skipped
EatingEating boxes divided by all cow boxes
Sitting trendSitting share in the last 15 minutes minus the share in the 45 minutes before that, capped at plus or minus 0.25

4. Rain chance

12 + 58 × sitting + 12 × bunched + 10 × restless − 12 × eating + 40 × trend

The result stays between 3% and 97%. From 70% up the call is Rain likely, 50 to 69% is Showers possible, 30 to 49% is Clouds building, and under 30% is Fair and dry.

5. The clock

The inner ring is the NWS hourly chance of rain. The outer ring starts at the cows' current chance and drifts back toward 30% with a 4-hour time constant: the chance h hours out is 30 + (current chance − 30) × e−h/4. The cows-vs-NWS score is 100 minus the average gap between the two rings over the next 6 hours.

6. Groups

Two cows join the same group when the gap between their boxes is less than half a cow length, measured on the smaller cow's longer side. Groups of three or more get a purple outline drawn around their boxes.

7. Scoring against the real weather

For each past hour, the page compares the cows' chance at the start of the hour, and the NWS chance for that hour as forecast before it began, with reports from the nearest NWS station. An hour counts as wet when the station measured rain or reported rain, drizzle, showers, thunder or snow. A forecast is right when it gave 50% or more and the hour was wet, or under 50% and the hour stayed dry. The NWS API only serves current forecasts, so NWS hours are scored from the time this server started logging them.