Image metadata (EXIF)

Every image the OWL records carries metadata describing how and where it was taken. This matters because recorded images are usually destined for a dataset: without the settings that produced a detection, a frame is a picture rather than a measurement.

Metadata is written to every saved image, including the cropped images produced by the bbox and square sample methods.

What is recorded

Time. DateTimeOriginal, DateTimeDigitized and DateTime, plus sub-second precision and the UTC offset. The timestamp is taken at the moment the frame is captured, not when the file is written. This is the field most photo tools show as “Date taken”.

Camera. Sensor make and model, exposure time, ISO equivalent (from analogue and digital gain) and focus distance where the lens reports it. The complete raw camera metadata is also stored verbatim, so nothing is lost.

Detection settings. The algorithm and the thresholds it ran with: excess green bounds, hue, saturation and brightness ranges, minimum weed size, sensitivity level, painted profile, and model confidence for in-crop detection. These are what make a frame reproducible.

Position. Latitude, longitude, altitude, speed, heading, satellite count and accuracy, plus the satellite date and time, whenever a fix is available.

Session. The recording session identifier and start time, so a file remains traceable after it has been copied out of its folder, together with any field name, crop, weather and vehicle entered on the dashboard before recording.

Region. For cropped images, the source frame dimensions and the position and size of the crop within it, recorded as source_width/source_height and roi_x/roi_y/roi_width/roi_height. Note that the session field named crop is the crop you are growing; the image region uses the roi_ prefix.

Missing values are omitted, never invented

If the OWL has no satellite fix, no position tags are written at all. If the camera does not report exposure, no exposure tag is written. A field is never filled with a zero or an empty string to keep the structure tidy, because an invented coordinate or exposure silently corrupts a dataset.

The same applies to size limits. The free-text fields are capped so that the structured tags always fit; if a field would overflow, the least important keys are dropped and a metadata_truncated marker is added, rather than discarding the whole field.

Set the timezone

Date tags are written in local time with the offset recorded alongside. If the unit’s timezone has never been set it will be UTC, and photo tools that ignore the offset will show times shifted by however far you are from Greenwich.

sudo timedatectl set-timezone Pacific/Auckland

The phone app sets the timezone for you when it syncs the clock.

Raspberry Pi boards have no battery-backed clock. A unit that has never reached a time server or a phone will have an inaccurate clock, and the date tag will reflect that. When a satellite fix is present the satellite date and time are recorded separately and remain correct regardless, so they are the reliable cross-check.

Checking an image

exiftool -DateTimeOriginal -OffsetTimeOriginal -GPSDateStamp \
         -GPSLatitude -GPSLongitude -ImageDescription image.jpg

On Windows, right-click the file, choose Properties, then Details, and look for “Date taken”.