SmartWilds — supplemental material¶
Camera-trap update (2026-11-08). The legacy camera counts, Event hierarchy, first-generation Tree-of-Life method statements, and camera detection-arrival rows in this historical supplement do not describe the current camera release. The canonical camera release has 72,775 original-SAM3-geometry Occurrences, 19,785 camera Events, a 235,778-image inventory, and 70,466 Campaign-2 operational-inference arrivals. Its combined multimodal table has 401,602 Occurrences and 22,242 Events. See
CAMERA_TRAP_RELEASE.mdfor the release-facing scope and provenance. The historical sections remain for auditability and must not be used as current camera-release statistics.
Supplemental material for the SmartWilds datasets. This contains the full data inventories details, the timestamp-repair methods, the standards crosswalk, the field dictionary, the arrival statistics, and the complete defect inventory.
Last updated: 2026-11-10.
Release: SmartWilds release build 2026-10-22, camera tables updated 2026-11-08.
It supersedes the 2026-07-24 integration pass. Paths such as
processing_output/... are relative to the project archive; the released files
are in the per-modality datasets of the SmartWilds collection.
S1. Extended glossary¶
| Term | Source | Meaning in this release | What it is not |
|---|---|---|---|
| Event | Darwin Core | A sampling act with a date, location, protocol, and parentEventID. Five levels in use: Project, SensorDeployment, AudioRecording, MediaEvent, ObservationSession. |
Not an arrival in a stream. One Event can contain 10⁵ arrivals. |
| Occurrence | Darwin Core | One organism record at a place and time, linked by eventID. Usually one detection crop. |
Not an individual animal. Adjacent drone frames yield many Occurrences of the same animal. |
eventType |
Darwin Core | The level of the hierarchy a row occupies. | Not the modality; modality is carried by parentEventID and modality_type. |
basisOfRecord |
Darwin Core | MachineObservation for every detector-derived row; HumanObservation for citizen-science and text records and for the 12 human-added drone starling boxes. |
Not a quality statement. See identificationVerificationStatus. |
identificationVerificationStatus |
Darwin Core | Vocabulary differs by table. Post-triage camera traps: human-reviewed, machine-resolved. Drones and bioacoustics: unverified, validated, plus human-supported; limited-resolution for the drone starling supplement. Citizen science and text: verified by expert. Counts in S9.3. |
Not a confidence score. machine-resolved and unverified are both machine labels; a validated or human-reviewed record was reviewed by a person. |
dataGeneralizations |
Darwin Core | States whether a coordinate is an observed position, a sensor position, a projected estimate, or a platform-telemetry fallback. | Not a precision estimate; see coordinateUncertaintyInMeters. |
informationWithheld |
Darwin Core | Records where locality precision was reduced for sensitive taxa. | — |
| Sampling effort | Humboldt ext. | Acquisition quantity actually expended, per modality: camera observation-days, recorder-hours, flight-minutes, visitor sessions. | Not comparable across modalities. Not a detection count. |
| Arrival | systems | One item entering a processing stream. Two layers measured: acquisition (image capture, WAV file) and detection (an Occurrence). | Not a Darwin Core Event. |
| Deployment | systems | One physical installation of one device at one site over one interval. | Not a device. One device yields several deployments across campaigns. |
| Duty cycle | systems | Fraction of wall-clock time a device was scheduled to acquire. | Not uptime. A device can be on-schedule and dead. |
| Detection | systems | A model output: a SAM3 box, a BirdNET hit. | Not an identification. |
| Identification | Darwin Core | A taxonomic assignment with a stated verification status. | Not implied by a detection. |
locationID |
Darwin Core | Stable identifier for a fixed sensor position or a drone session origin. Null for locality-only records. | Not a comparable spatial sampling unit across modalities. |
| Coverage | systems | Distinct (date, hour) pairs containing ≥1 Occurrence, per modality. | Not area surveyed. Not detection probability. |
| Campaign | this release | One field deployment interval. Three: C1 Jun 30–Jul 3, C2 Aug 4–28, C3 Sep 8. | Not a Darwin Core term. |
S2. Camera-trap deployment inventory¶
Four camera models, HFOV 55–120°. Configuration varied in capture mode, resolution, burst length, PIR sensitivity, and inter-trigger delay. Every one of these is a workload multiplier (S2.3).
S2.1 Campaign 1 — Jun 30 to Jul 3, 2025¶
| Deployment | Site | Model | HFOV | Facing | Mode | Photo | Video | PIR | Images | Notes |
|---|---|---|---|---|---|---|---|---|---|---|
| TW01-CT02 | Nomad Ridge E | GardePro T5NG | 56.5° | SE (135°) | Hybrid | 4 MP, 3-burst | 1080p 10 s MP4+audio | High | 7,811 | Hourly timelapse, info strip on |
| TW02-CT03 | Nomad Ridge W | GardePro A3 | 63° | SW (225°) | Photo+Video | 8 MP, 3-series | 1080p 10 s AVI+audio | High | 39 | Early battery death; 55 files total on card |
| TW03-CT01 | Pasture D Feeder | GardePro T5NG | 56.5° | S (180°) | — | — | — | — | 6,661 | Near salt lick; config not documented |
| TW04-CT04 | Lake Trail | Trail Camera G600 | 120° | NW (315°) | Photo+Video | 8 MP, 5-burst | 1080p 10 s MP4+audio | High | 570 | Images inverted (mount orientation) |
S2.2 Campaign 2 — Aug 4 to Aug 28, 2025¶
| Deployment | Site | Model | HFOV | Facing | Mode | Photo | Video | Images | Notes |
|---|---|---|---|---|---|---|---|---|---|
| TW01-CT02 | Nomad Ridge E | GardePro T5NG | 56.5° | SE (135°) | Photo only | 4 MP, 3-burst | — | 26,573 | Removed Aug 11, relocated to dock |
| TW02-CT01 | Nomad Ridge W | GardePro T5NG | 56.5° | SW (225°) | Photo only | 4 MP, 3-burst | — | 61,217 | Clock error; battery died Aug 18–25; 4 card clock states |
| TW04-CT03 | Lake Trail | GardePro A3 | 63° | NW (315°) | Photo+Video | 8 MP, 3-burst | 1080p 10 s | 984 | Reset Aug 7; no data after Aug 25 |
| TW06-CT04 | Zebra Shelter | Trail Camera G600 | 120° | NW (315°) | Photo+Video | 8 MP, 5-burst | 1080p 10 s | 40,907 | Battery reported 100% at retrieval (unusual) |
| TW06-CT05 | Zebra Shelter (in) | Reveal Pro 3.0 | 55° | N (0°) | Photo+Video | 4K | 720p 10 s | 84 | Late deploy Aug 25–28 |
| TW07-CT05 | Zipline Tower | Reveal Pro 3.0 | 55° | N (0°) | Photo+Video | 4K | 720p 10 s | withdrawn | People-only media were not uploaded; metadata only retained; deletion status unknown |
| TW09-CT02 | Dock (left) | GardePro T5NG | 56.5° | S (180°) | Photo only | 4 MP, 3-burst | — | 90,834 | Largest deployment (38.5% of all images); relocated Aug 18; battery gap Aug 18–25 |
| TW09-CT05 | Dock (right) | Reveal Pro 3.0 | 55° | SE (135°) | Photo+Video | 4K | 720p 10 s | 9 | Detection issues |
| TW11-CT06 | Fence / lake | Reveal Pro 3.0 | 55° | NE (45°) | Photo+Video | 4K | 1080p 15 s | 89 | PIR level 9, 20 s delay, 1 bar cell service |
Totals: 235,778 JPG + 5,113 video clips, 260 GB. 13 deployments, 12 retained.
S2.3 Configuration as workload multiplier¶
| Parameter | Range in deployment | Workload effect |
|---|---|---|
| Burst length | 3 or 5 frames/trigger | Direct 3× or 5× multiplier on raw images per ecological event |
| Capture mode | photo-only / photo+video / hybrid | Video adds a 10–15 s clip per trigger: large storage, frame-extraction compute |
| Resolution | 4 MP / 8 MP / 4K | Bytes and per-image inference time |
| PIR sensitivity | High, Level 9, motion-detect | Higher sensitivity → more triggers and more blanks |
| Inter-trigger delay | 0 / 10 / 20 s | Longer delay suppresses repeat triggers, lowering effective arrival rate |
| HFOV | 55°–120° | Wide-angle covers more area at lower pixel density per animal |
| Cellular uplink | Reveal Pro 3.0 only | The only device in the deployment that could participate in near-real-time coordination |
| Timelapse | TW01-CT02 C1 only | Adds a scheduled arrival stream independent of PIR |
S3. Acoustic recorder inventory¶
All units: Wildlife Acoustics Song Meter Micro 2, 48 kHz. 10 deployments across 6 sites. Duty cycle, not deployment duration, determines volume: uncompressed 48 kHz stereo WAV ≈ 33 MB/minute.
| Deployment | Site | GPS | Schedule | Duty cycle | Raw WAV | Events | GB |
|---|---|---|---|---|---|---|---|
| C1 | |||||||
| TW05-SM01 | Lake Trail Gate O | 39.83537, −81.73842 | 5-min clips hourly (config error — intended 1 hr sunrise + sunset) | 8.3% | 144 | 144 | — |
| TW06-SM03 | Zebra Shelter | 39.83518, −81.73087 | 5 min/hr, 24/7 | 8.3% | 77 | 77 | — |
| TW07-SM02 | Zipline Tower | 39.83288, −81.73455 | 1 hr sunrise + 1 hr sunset | ~8% | 12 | 12 | — |
| TW08-SM04 | Fence w/ vegetation | 39.82900, −81.74378 | 5 min/hr, 24/7 | 8.3% | 78 | 78 | — |
| 311 | 311 | 6.0 | |||||
| C2 | |||||||
| TW02-SM04 | Nomad Ridge Shelter | 39.82957, −81.73295 | 5 min/hr | 8.3% | 659 | 581 | 26.1 |
| TW05-SM06 | Lake Trail Gate O | 39.82866, −81.73758 | sunrise–sunset | ~50–60% | 100 | 96 | 16.6 |
| TW06-SM05 | Zebra Shelter | 39.82870, −81.73756 | 15 min/hr | 25% | 508 | 508 | 21.8 |
| TW07-SM02 | Zipline Tower | 39.82891, −81.74392 | sunrise–sunset | ~50–60% | 339 | 339 | 56.4 |
| TW08-SM03 | Fence w/ vegetation | 39.82892, −81.74392 | sunrise–sunset | ~50–60% | 341 | 341 | 56.7 |
| TW09-SM01 | Dock | 39.83418, −81.73783 | sunrise–sunset (deployed Aug 14) | ~50–60% | 195 | 195 | 32.4 |
| 2,142 | 2,060 | 210 | |||||
| Total | 2,453 | 2,371 | 216 |
Raw-WAV reconciliation. Of the 2,453 WAV paths on disk, 2,371 are
AudioRecording Events: 2,307 with BirdNET detections and 64 on which BirdNET
ran but detected nothing (Events with no Occurrences). The other 82 are not
recordings of their own: 78 are Campaign-1 files copied into the Campaign-2
TW02-SM04 directory during transfer, and 4 TW05-SM06 files produced no BirdNET
result (three 3.9–22.0 s fragments and one unreadable file). Every path is
classified in data/recordings.csv of the bioacoustics dataset.
Note that TW02-SM04 produced more than twice the files of TW07-SM02 but less than half the bytes — the clearest illustration that duty cycle and file count are independent axes.
S4. Drone platform and session inventory¶
| Platform | Campaigns | Video | Telemetry format | Sessions |
|---|---|---|---|---|
| Parrot Anafi 4K | C1 (Jul 1, 3), C2 (Aug 11, 18, 25) | 4K MP4 | Parrot JSON / GUTMA DX | 10 (+3 telemetry-only) |
| DJI (unspecified) | C2 (Aug 11) | 1080p MOV | CSV, GPS + battery, 10 Hz | 1 |
| DJI Air 2 | C3 (Sep 8) | 4K MP4 | Airdata CSV | 4 |
39 raw videos and 39 MediaEvent rows; one MediaEvent (VID_001)
has zero Occurrences because it was intentionally excluded after review.
15 video-bearing SensorDeployment flight-session Events. Three more
Aug 25 Parrot directories hold telemetry but no video and are not sampling
Events. 90 GB total.
Three platforms produced three telemetry schemas with different field names, units (feet vs. metres for altitude), and gimbal-angle conventions. Fields consumed by the projection script, with their per-platform sources:
- platform GPS —
latitude_y/longitude_y - AGL height —
height_sonar(feet)when available, elsealtitude (m)/altitude_m - heading —
gimbal_heading(degrees)orcompass_heading(degrees) - pitch —
gimbal_pitch(degrees), with a configurable fallback when near-level - FOV — approximate per-platform constant
S5. Camera-trap timestamp repair, in full¶
235,778 images; 0 unmapped; 0 flagged for review. 18 correction methods.
S5.1 Raw timestamp source¶
| Source | Images | Share |
|---|---|---|
| Filename | 193,096 | 81.9% |
| EXIF | 42,500 | 18.0% |
| OCR of burned-in bottom overlay | 179 | 0.08% |
| Manual read of bottom overlay | 3 | 0.001% |
S5.2 Final confidence¶
| Confidence | Images | Share | Meaning |
|---|---|---|---|
| high | 105,488 | 44.7% | Verified correct, or anchored to a logged service event |
| medium | 130,290 | 55.3% | Anchored interpolation assuming a constant clock rate — untestable without a second anchor |
S5.3 All 18 correction methods¶
| Method | Images | Pattern |
|---|---|---|
aug_tw09_ct02_sd23_correct_after_move |
59,568 | verified correct |
aug_tw09_ct02_sd22_start_anchor |
31,266 | per-card anchor |
aug_tw06_ct04_sd02_start_anchor |
27,734 | per-card anchor |
aug_tw01_2025_clock_offset |
26,558 | constant offset |
aug_tw02_actual_august_clock |
17,301 | verified correct |
aug_tw02_sd01_sep_clock_anchor |
17,262 | per-card anchor |
aug_tw02_sd01_2023_clock_anchor |
13,689 | constant offset (clock reporting 2023) |
aug_tw06_ct04_initial_start_anchor |
13,173 | per-card anchor |
aug_tw02_sd11_sep_clock_anchor |
12,965 | per-card anchor |
june_tw01_correct |
7,811 | verified correct |
june_tw03_correct |
6,661 | verified correct |
aug_tw04_sd02_start_anchor |
696 | per-card anchor |
june_tw04_start_anchor_inverted_images |
570 | per-card anchor + inverted mount |
aug_tw04_sd03_start_anchor |
288 | per-card anchor |
bottom_overlay_ocr |
179 | OCR of in-frame timestamp |
june_tw02_start_anchor |
39 | per-card anchor |
aug_tw01_2023_tail_clock_offset |
15 | constant offset (2023 tail) |
manual_bottom_overlay_read |
3 | human read |
Only 14,472 images (6.1%) were accepted as recorded
(june_tw01_correct + june_tw03_correct). The remaining
221,306 (93.9%) required reconstruction.
S5.4 Per-deployment repair summary¶
| Dataset | Deployment | Location | Images | First corrected | Last corrected | Methods |
|---|---|---|---|---|---|---|
| C1 | TW01-CT02 | Nomad Ridge E | 7,811 | 2025-06-30 12:18 | 2025-07-02 06:50 | 1 |
| C1 | TW02-CT03 | Nomad Ridge W | 39 | 2025-06-30 12:34 | 2025-07-01 00:34 | 1 |
| C1 | TW03-CT01 | Pasture D Feeder | 6,661 | 2025-06-30 13:06 | 2025-07-02 01:04 | 1 |
| C1 | TW04-CT04 | Lake Trail | 570 | 2025-06-30 13:25 | 2025-07-03 16:56 | 1 |
| C2 | TW01-CT02 | Nomad Ridge E | 26,573 | 2025-08-04 09:01 | 2025-08-10 10:15 | 2 |
| C2 | TW02-CT01 | Nomad Ridge W | 61,217 | 2025-08-04 09:05 | 2025-08-18 09:07 | 4 |
| C2 | TW04-CT03 | Lake Trail | 984 | 2025-08-07 10:38 | 2025-08-25 10:49 | 2 |
| C2 | TW06-CT04 | Zebra Shelter | 40,907 | 2025-08-04 09:52 | 2025-08-26 15:35 | 2 |
| C2 | TW06-CT05 | Zebra Shelter | 84 | 2025-08-25 15:09 | 2025-08-28 08:17 | 2 |
| C2 | TW09-CT05 | Dock / Waterfront | 9 | 2025-08-11 10:18 | 2025-08-13 18:20 | 1 |
| C2 | TW09-CT02 | Dock, then Nomad Ridge W after Aug 18 | 90,834 | 2025-08-11 10:27 | 2025-08-28 09:44 | 2 |
| C2 | TW11-CT06 | Nomad Ridge W | 89 | 2025-08-18 09:00 | 2025-08-28 02:47 | 2 |
Files: processing_output/detections/drone_camera_analysis/camera_time_mapping/
— camera_image_timestamp_map.csv (per-image, 17 columns),
camera_timestamp_summary_by_camera.csv,
camera_timestamp_summary_by_date.csv,
camera_trap_timestamp_corrections.csv,
plus .before_bottom_ocr and .before_ocr_interpolation stages.
S6. Drone ground projection¶
The campaigns were flown for population estimation and behavior, not geolocation. Platform GPS localizes a detection to a known pasture, which is the operative spatial reference. Per-animal projection is an optional refinement provided for completeness; no result in any of the three papers depends on it. Monocular distance estimation from a moving platform to moving subjects is unreliable and is not established practice in aerial wildlife survey.
| Status | Detections | Share |
|---|---|---|
ok (projected position available) |
247,340 | 77.9% |
invalid_altitude |
27,306 | 8.6% |
missing_drone_gps |
24,467 | 7.7% |
horizon_ray (camera near level) |
18,324 | 5.8% |
out_of_range |
122 | 0.04% |
Method: convert the bbox bottom-center pixel to a camera ray, rotate by heading/pitch, intersect with a flat ground plane, project the offset from platform GPS. Dominant error sources: gimbal-pitch convention, terrain relief, altitude source, video stabilisation, FOV assumption, and whether bbox bottom-center is the animal's ground-contact point.
Camera-trap coordinates use the pinhole method from https://github.com/Imageomics/camera-trap-geolocation: bbox height → range, bbox horizontal offset → bearing, projected from the camera GPS. Assumes flat ground and a uniform 0.9 m target height — the dominant error term at a site holding animals from geese to Père David's deer.
Known analysis hazard. An internal audit found a spatial figure that plotted
projected animal positions and platform-telemetry positions together without
distinguishing them: 15.66% of 292,106 plotted drone points were platform
coordinates. The status field was present and correct; the script did not read
it. The release carries that status on every drone Occurrence
(drone_georef_status in occurrenceRemarks, georef_status in
detections.csv); any analysis of drone coordinates must filter on it, and
examples/quickstart.py shows the pattern. No automated check of downstream
analyses ships with the release.
S7. Standards crosswalk, in full¶
| Required information | Standard | Status |
|---|---|---|
| Taxon, rank hierarchy, vernacular name | Darwin Core | reused directly |
eventDate, eventTime, event hierarchy |
Darwin Core | reused directly |
decimalLatitude/Longitude, coordinateUncertaintyInMeters, geodeticDatum |
Darwin Core | reused directly |
basisOfRecord, identificationVerificationStatus |
Darwin Core | reused as the automation boundary |
dataGeneralizations, informationWithheld |
Darwin Core | reused for coordinate semantics and sensitive taxa |
samplingProtocol, samplingEffort, sampleSizeValue/Unit |
Darwin Core + Humboldt | reused; effort reported per modality, never summed |
| Inventory completeness, sampling scope | Humboldt | partially used |
| Device model, sensor specification | SensorML concepts | re-expressed in platform tables (not SensorML-encoded) |
| Derivation chain (raw → detection → identification) | PROV-DM concepts | re-expressed in remarks fields (not PROV-encoded) |
| Platform, mission, annotation documentation | FAIR² Drones | dataset card template adopted |
| Release principles | FAIR, CARE, TRUST | followed |
| Duty cycle and acquisition schedule | — | systems extension (deployment samplingProtocol + config tables) |
| Trigger semantics (PIR sensitivity, burst length, delay) | — | systems extension (config tables, S2.3) |
| Timestamp confidence and repair method | — | systems extension (timestamp map, S5) |
| Per-detection coordinate provenance status | — | systems extension (drone_georef_status, S6) |
| Typed missingness | — | systems extension (S8) |
| Model identity, version, parameters, per-rank accuracy | — | systems extension (S9) |
| Validator coverage and known gaps | — | systems extension (S11) |
The last six rows are the ones no standard we found expresses in a machine-readable way. We name them and use them consistently; we do not claim to have standardized them.
S8. Missing data, broken down by type.¶
| # | State | How it is computable | Example |
|---|---|---|---|
| 1 | Sensor active, nothing observed | Hourly bin inside a deployment window with no Occurrence | Most nocturnal camera bins |
| 2 | Sensor inactive by schedule | Deployment-level schedule field | 5 min/hr recorders are off 91.7% of the time by design |
| 3 | Sensor inactive by failure | Capture gap vs. logged deployment window, with cause | TW02-CT01 battery, Aug 18–25 |
| 4 | Captured but not represented | Raw file inventory vs. Event table | 78 transfer-duplicate WAVs and 4 failed WAVs, each classified per path (S3) |
| 5 | Metadata unusable for a purpose | Status/provenance column | 70,219 drone detections unprojectable (S6); until 2026-11-10, 41,524 drone Occurrences with a date but no time of day (S10, since recovered) |
| 6 | Excluded in QC | Documented exclusion | People-only TW07-CT05 deployment excluded; one drone video reviewed and kept as a zero-Occurrence MediaEvent |
States 1 and 2 have opposite implications for a coordination policy, which is why the schedule field is load-bearing and not documentation.
S9. Models, parameters, and measured accuracy¶
Manual annotation does not scale to sensor-network volume: human-reviewed labels are under 1% of the release and consumed the review capacity available. Semi-automated analysis is therefore the realistic condition, and we use current state-of-the-art models so that reported quality reflects what a practitioner adopting today's best tooling would obtain.
Labels were produced in two generations, and the released tables carry both. The first generation labeled every SAM3 box with a BioCLIP Tree-of-Life taxon; it still describes the operational drone table and the merged cross-modal snapshot. The second generation (October–November 2026) replaced the camera-trap labels with embedding-based triage plus targeted human review (S9.1), and added a seven-video human-annotated drone reference set with a manual starling supplement (S9.2).
| Stage | Model | Role |
|---|---|---|
| Visual segmentation | SAM 3 | bounding boxes on camera-trap images and drone frames |
| Visual classification, first generation | BioCLIP Tree-of-Life (TreeOfLife-200M) | top-1 taxon with full rank hierarchy, top-5 retained; operational drone labels |
| Label triage, second generation | Resolve–Clear–Defer prototype triage over proposal embeddings | routes proposals to human review and resolves the rest by similarity to reviewed examples; operational camera-trap labels |
| Acoustic detection | BirdNET | detections with frequency bounds and offset into the WAV |
| Water/lake masking | SAM 3 | lake/water masks for habitat-association analysis |
S9.1 Camera-trap labels (post-triage)¶
Operational camera-trap Occurrences are SAM3 animal proposals labeled by
Resolve–Clear–Defer triage. The triage selects proposals for human review and
resolves the remainder by similarity to reviewed examples; labelProvenance
records the outcome on every row, with the triage round where recovered.
labelProvenance |
identificationVerificationStatus |
Occurrences |
|---|---|---|
triage_reviewed |
human-reviewed |
1,760 |
triage_resolved |
machine-resolved |
70,808 |
triage_forced_1nn |
machine-resolved |
201 |
| Total | 72,769 |
Forced nearest-neighbour labels did not meet the triage confidence rules and
may be wrong; exclude them unless label noise is tolerable. Box geometry is
never edited (geometryProvenance = SAM3), even when the label was human
reviewed. The table keeps only reviewed or resolved animal proposals: cleared
and background proposals, boxes with a shorter side below 32 px, boxes
overlapping the per-resolution ROI mask, and frames on the privacy exclusion
manifest are excluded, so an image without an Occurrence is not evidence
that no animal was present. Twelve taxa occur: milu (Père David's) deer,
Przewalski's horse, Canada goose, Sichuan takin, trumpeter swan, killdeer,
European starling, barn swallow, and the broad labels bird, butterfly,
dragonfly, and insect.
A separate human-reviewed reference set of 2,067 boxes on 198 selected ungulate and waterfowl images (881 Canada goose, 627 milu deer, 349 Przewalski's horse, 149 Sichuan takin, 61 trumpeter swan) is released beside, not inside, the Occurrence table. Taxonomy and geometry were both reviewed; 1,552 boxes share a SAM3 proposal's geometry and 515 are human edits or additions, and the set is not filtered by the 32 px or ROI rules. The images were selected for review, so the set is not a random or exhaustive test split. Triage label accuracy against this reference set has not yet been reported.
S9.2 Drone labels: operational table and seven-video reference set¶
Operational table. The 318,203 machine drone Occurrences remain first-generation labels: a SAM3 box on every 15th frame with a top-1 BioCLIP Tree-of-Life taxon. The only measured accuracy for that labeler comes from human-annotated camera-trap subsets:
| Analysis | Level | n | Precision | Recall | F1 / accuracy |
|---|---|---|---|---|---|
| SAM3 animal localization, camera traps | IoU ≥ 0.50 | 1,125 | 0.866 | 0.845 | 0.856 |
| Tree-of-Life taxonomic assignment | class | 951 | 0.845 | ||
| order | 951 | 0.660 | |||
| family | 951 | 0.463 | |||
| genus | 951 | 0.322 | |||
| species | 951 | 0.271 |
Usable statement: class-rank labels support screening and triage; species-rank labels require curation; anything aggregating across ranks is uninterpretable. A single headline accuracy anywhere in the 0.27–0.85 range would mislead. Corroborating evidence: the taxonomy crosswalk holds 12,577 label keys, of which only 4 consist entirely of expert-verified records and 16 contain accepted names with mixed verification evidence.
Seven-video reference set. Seven drone videos were human-annotated on
1,089 sampled frames for four focal classes, with onager observations
excluded: 20250703_parrotanafi_1, _2, _5 (C1), 20250811_DJI_01,
20250818_parrot_01, _02, and 20250825_parrot_01 (C2). The corrected
reference holds 27,159 four-class boxes (the localization audit below was
run against 27,180 before the final manual review): Père David's deer 21,177,
Sichuan takin 3,293, Przewalski's horse 2,066, Canada goose 644. It is
delivered as COCO JSON with provenance, a frame-to-proposal mapping, and the
audit files.
SAM3 localization against the reference (35,312 proposals, one-to-one matching):
| IoU | Precision | Recall | F1 |
|---|---|---|---|
| 0.25 | 0.758 | 0.985 | 0.856 |
| 0.50 | 0.749 | 0.973 | 0.847 |
| 0.75 | 0.740 | 0.961 | 0.836 |
Per-class recall at IoU 0.25: Przewalski's horse 0.961, Père David's deer
0.985, Sichuan takin 0.993, Canada goose 1.000. Per-video recall at IoU 0.25
ranges from 0.958 (20250818_parrot_02) to 0.999 (20250825_parrot_01).
Resolve–Clear–Defer prototype triage was then run over the full proposal pool (seed 3, density-moderated k-center acquisition, calibrated rule k = 5, τ_fg = 4, τ_bg = 4). It spent 100 proposals on calibration and 1,610 on expert review (4.6% of the 35,212-proposal evaluation pool), handled the remaining 33,602 automatically, and got 28,040 of those right: 79.6% of the evaluation pool, or 83.5% of the automatic decisions. Zero proposals were left deferred.
Four-species classification on the 25,897 matched, unreviewed foreground instances (78.4% Père David's deer, so always-deer scores 0.784 accuracy):
| Method | Precision | Recall | F1 | Accuracy | Macro-F1 |
|---|---|---|---|---|---|
| Prototype triage, automatic decisions only | 0.913 | 0.850 | 0.880 | 0.850 | 0.789 |
| BioCLIP 2 zero-shot, four prompts | 0.167 | 0.167 | 0.167 | 0.167 | 0.230 |
| Tree-of-Life, open-world, exact focal-taxon match | 0.947 | 0.037 | 0.071 | 0.037 | 0.188 |
Species-wise recall for triage: Père David's deer 0.918, Przewalski's horse 0.687, Canada goose 0.590, Sichuan takin 0.551. The dominant automatic errors are wrong-species resolves into Père David's deer (takin 1,287, horse 595, goose 100) and 1,584 deer cleared as background. Read the table carefully: Tree-of-Life is evaluated open-world, so its 0.037 recall is exact top-1 recognition of a focal taxon under an unconstrained vocabulary, not animal recognition accuracy; BioCLIP 2 zero-shot always answers one of four prompts and has no background option; triage abstentions count as no prediction. All figures are proposal-level repeated observations from seven videos, not independent animals.
Manual European starling supplement. Twelve human-added Sturnus vulgaris
boxes on one frame (20250703_parrotanafi_2 / VID_002, frame 1320) were
appended to the drone Occurrence table on 2026-11-01 with
basisOfRecord = HumanObservation,
identificationVerificationStatus = human-supported; limited-resolution, and
remarks stating that no SAM3 proposal, embedding, or triage decision was
involved.
The identification rests on limited pixels in a single frame and should be
interpreted cautiously. These records are excluded from the 27,159-box
reference, the localization audit, the triage calibration and evaluation, and
the species-classification comparison; none of the numbers above change if
they are dropped. The 12 rows were appended twice (24 rows, 12 distinct
occurrenceIDs) in both the drone and merged tables (defect 21, repaired in the release build).
S9.3 Verification status distribution¶
Counts are per table, because the vocabularies differ. The merged table below is the pre-update state (2026-11-01), before the camera rows were regenerated from the post-triage tables (defect 22, resolved 2026-11-08).
Merged occurrences_all_modalities.csv as of 2026-11-01:
| Modality | Status | Records |
|---|---|---|
| Camera traps (first generation) | unverified |
223,203 |
validated |
946 | |
| Bioacoustics | unverified |
9,960 |
| Drones | unverified |
317,559 |
validated |
644 | |
human-supported; limited-resolution |
24 (12 distinct records; defect 21) | |
| Citizen science | verified by expert |
622 |
| Text data | verified by expert |
30 |
| Total | 552,988 |
Post-triage camera-trap Occurrence table (the released camera dataset):
| Status | Records | Share |
|---|---|---|
machine-resolved |
71,009 | 97.6% |
human-reviewed |
1,760 | 2.4% |
validated = 946 camera-trap + 644 drone bird records from the curated
goose/swan review set (added 2026-09-20). The 946 camera records belong to the
first-generation camera table and are not carried into the post-triage
Occurrence table; the 2,067-box reference set takes their role.
verified by expert = all 622 citizen-science + 30 text-data records.
A verification floor is one predicate: treat unverified and
machine-resolved as machine labels; human-reviewed, validated, and
verified by expert as person-reviewed; and human-supported;
limited-resolution as person-reviewed but low confidence.
S9.4 Why this must be published¶
- A taxon string is not reproducible without the model that produced it. Two versions of the same classifier yield different taxa from the same image.
- Published uncertainty is what makes labels re-derivable. Machine labels are a snapshot of a model, not ground truth. A release that keeps source media, detection geometry, model identity, and per-rank accuracy can be re-labeled when better models arrive and the label sets compared meaningfully. One shipping only final taxon strings cannot.
- Aggregate accuracy hides the rank-dependent failure mode above.
- Verification status must be per record, not per dataset — a README caveat cannot be filtered on.
S10. Sentinel values: nan as a date string (repaired)¶
In snapshot darwin_core_latest_20260724, the 2025-08-11 drone session carried
eventDate = the literal string nan (a dataframe export of a missing value)
and an empty eventTime. The QC summary reported missing_eventDate=0 because
the check tested for null/empty and "nan" is neither.
| eventID | Occurrences |
|---|---|
TheWilds_2025_drone_20250811_DJI_01_DJI_0002 |
12,522 |
TheWilds_2025_drone_20250811_parrot_01_P5190525 |
12,430 |
TheWilds_2025_drone_20250811_parrot_01_P5190526 |
11,996 |
TheWilds_2025_drone_20250811_DJI_01_DJI_0001 |
4,535 |
TheWilds_2025_drone_20250811_parrot_01_P5180524 |
41 |
TheWilds_2025_drone_20250811_DJI_01, ..._parrot_01 (SensorDeployment) |
— |
| Total | 41,524 (13.1% of drone Occurrences) |
Repair (release build 2026-10-22). eventDate was restored to
2025-08-11 from the flight identifier and marked as identifier-derived.
Drones flew on 6 dates; the old count of 7 included the string nan.
Time recovery (2026-11-10). The processed telemetry had no clock, but the
five video containers carry a creation time. Whether an aircraft writes UTC or
local time into that field is airframe-specific, so it was settled against
flights with independently known times: the Parrot Anafi writes UTC (its
2025-08-18 video agrees with the telemetry file name to within 2 s), and the
DJI Air 2 writes UTC (its 2025-09-08 video agrees with the telemetry's
datetime(utc)). The 2025-08-11 Parrot videos therefore started at 09:12:43,
09:14:19, and 09:19:55 local. The DJI Mavic 3 videos read 10:29:39 and
10:31:32; read as UTC that would be 06:29, before anyone was on site, so this
airframe wrote local time, which the telemetry export file name
(…_[10-29-13]) and the field log also support. The field log places the
Parrot flight at Stop 1 (Nomad Ridge, lake survey) and the DJI at the dock,
Stop 5; the JotForm check-ins run 09:32 to 10:48. eventTime is now set for
the 5 MediaEvents and 2 flights (start/end intervals) and for all 41,524
Occurrences (video start + frame_index / fps, to the second). The DJI
convention is inferred rather than verified, so those times should be read as
minute-level. The record is metadata/provenance/drone_time_recovery_20250811.json
in the drone dataset.
The same audit found impossible coordinates (nan, longitude ≈ 500) on seven
drone Events, now replaced with a validated static video location or left
blank, and a missing study-root Event TheWilds_2025, now added.
S11. Validation: checks run, and gaps¶
S11.1 Original checks (snapshot 20260724)¶
- no missing event links (
eventIDresolves) - no missing taxon
- no missing
eventDate(presence only; this is how thenandates passed) - no duplicate
occurrenceID
S11.2 Current release checks¶
The generator now parses every date, time, and coordinate pair and rejects
sentinel values (nan, None, NULL, -1, 1970-01-01) before export. The
release audit checks, over every modality and merged table:
- source-to-merged parity for Events and Occurrences;
- a single-rooted Event hierarchy with no dangling
parentEventID; - Occurrence-to-Event links and ancestry;
- parsed dates and times, and WGS84-bounded coordinates;
- every Occurrence date inside its parent Event's span and the study window;
- no absolute cluster paths, and every
associatedMediaresolving to a released file in the dataset's media manifest; - agreement between the generator and the released tables.
S11.3 Gaps that remain¶
| Gap | Consequence |
|---|---|
No check that analyses constrain drone_georef_status |
Mixed-semantics spatial figures are possible (S6) |
| No semantic content check | People in imagery are found by a person detector plus human review, not by the validators |
A passing validator is evidence about the validator. The original checks certified 552,964 records clean while 13.1% of one modality had no usable timestamp. Validator coverage should be reported, not assumed.
S12. Darwin Core field dictionary¶
occurrences_all_modalities.csv — 44 columns:
modality_type, occurrenceID, eventID, catalogNumber, scientificName,
kingdom, phylum, class, order, family, genus, specificEpithet,
taxonRank, vernacularName, occurrenceStatus, individualCount,
lifeStage, sex, behavior, basisOfRecord, recordedBy, identifiedBy,
identificationVerificationStatus, identificationRemarks, eventDate,
eventTime, decimalLatitude, decimalLongitude,
coordinateUncertaintyInMeters, geodeticDatum, locality, locationID,
country, stateProvince, county, establishmentMeans,
degreeOfEstablishment, occurrenceRemarks, associatedMedia,
associatedReferences, datasetID, datasetName, informationWithheld,
dataGeneralizations
events_all_modalities.csv — 21 columns:
eventID, parentEventID, eventType, eventDate, samplingProtocol,
sampleSizeValue, sampleSizeUnit, locality, locationID,
decimalLatitude, decimalLongitude, coordinateUncertaintyInMeters,
geodeticDatum, country, stateProvince, county, datasetID,
datasetName, recordedBy, fieldNotes, eventTime
S12.1 Event hierarchy composition¶
eventType |
Rows | Granularity |
|---|---|---|
Project |
6 | study root TheWilds_2025 + one per modality |
SensorDeployment |
37 | 12 camera + 10 ARU + 15 drone flight session |
AudioRecording |
2,371 | one per processed WAV file (64 with no detections) |
MediaEvent |
39 | one per raw drone video (1 reviewed, no Occurrences) |
ObservationSession |
17 | 13 citizen science + 4 text data |
| Total | 2,470 |
S12.2 Occurrence composition¶
| Modality | Events | Occurrences | Dates | Hourly bins | locationIDs |
|---|---|---|---|---|---|
| Study root | 1 | — | |||
| Camera traps | 13 | 224,149 | 29 | 624 | 7 |
| Bioacoustics | 2,382 | 9,960 | 29 | 650 | 6 |
| Drones | 55 | 318,203 | 6 | 10* | 15 |
| Citizen science | 14 | 622 | 13 | 28 | 0 |
| Text data | 5 | 30 | 4 | 4 | 6 |
| Total | 2,470 | 552,964 |
* includes the 2025-08-11 session's bins after its times were recovered on 2026-11-10 (S10); the integration pass had counted 8. Camera dates and bins use the corrected timestamps of the release build (439 curated records re-timed).
Camera-trap figures here are the first-generation table in the merged
snapshot. The released post-triage camera dataset has 19,762 Events (1
Project, 12 SensorDeployment, 19,749 Image) and 72,769 Occurrences, and
the drone table gained 12 manual starling records on 2026-11-01 (S9, defects
21–22).
S13. Arrival characterization, both layers¶
Window: Campaign 2, 2025-08-04 to 2025-08-28, 600 hours — the only interval in which all four modalities were simultaneously active.
Definitions. Acquisition arrival = one image capture (from
camera_image_timestamp_map.csv, corrected timestamps) or one WAV recording
(from AudioRecording Event times). Detection arrival = one Occurrence with
a resolvable date and time. B = (σ−μ)/(σ+μ) = (CV−1)/(CV+1) over
inter-arrival times: −1 periodic, 0 Poisson, →1 maximally bursty.
| Stream | Arrivals | Rate/hr | CV | B | Dates |
|---|---|---|---|---|---|
| Acquisition | |||||
| Camera image captures | 220,697 | 367.83 | 2.06 | +0.347 | 25 |
| Acoustic WAV recordings | 2,060 | 3.43 | 1.23 | +0.103 | 25 |
| Detection | |||||
| Camera traps | 208,054 | 346.76 | 7.26 | +0.758 | 25 |
| Bioacoustics | 8,865 | 14.78 | 3.21 | +0.525 | 25 |
| Drones | 94,762 | 157.94 | 216.25 | +0.991 | 3 |
| Citizen science | 242 | 0.40 | 5.30 | +0.682 | 10 |
Detection streams count machine-derived Occurrences only; curated review
records are excluded. Acoustic recordings include the 64 zero-detection WAVs.
The drone row includes the 41,524 Occurrences of 2025-08-11 since their times
were recovered (S10); before that recovery the stream had 53,238 Campaign-2
arrivals at 88.73/hr, CV 229.61, B +0.991 over 2 dates. Every stream is released as a versioned trace (analysis/arrival_traces_v2/
in the study-level dataset) with a source-record ID per arrival, inclusion rules,
and input checksums; earlier unversioned arrival summaries are deprecated.
Acquisition arrivals are not reconstructible for drones (per-frame times are not
retained) or citizen science (one submission per session).
S13.1 Diurnal profiles (mean arrivals per hour-of-day over 25 days)¶
| Hour | Cam capture | Cam detect | Acoustic WAV | Acoustic detect | CS detect |
|---|---|---|---|---|---|
| 00 | 290.1 | 76.5 | 1.8 | 3.4 | 0.0 |
| 01 | 296.3 | 86.9 | 1.8 | 3.2 | 0.0 |
| 02 | 317.4 | 184.1 | 1.8 | 3.3 | 0.0 |
| 03 | 300.3 | 128.6 | 1.8 | 4.3 | 0.0 |
| 04 | 304.0 | 211.9 | 1.8 | 3.3 | 0.0 |
| 05 | 300.6 | 133.3 | 2.8 | 21.1 | 0.7 |
| 06 | 317.9 | 519.2 | 5.2 | 41.6 | 0.0 |
| 07 | 321.8 | 674.4 | 4.3 | 20.1 | 0.0 |
| 08 | 341.3 | 503.2 | 4.3 | 18.3 | 0.0 |
| 09 | 407.2 | 597.6 | 4.6 | 18.4 | 1.7 |
| 10 | 454.4 | 416.5 | 4.3 | 18.6 | 2.7 |
| 11 | 534.4 | 495.1 | 4.3 | 16.8 | 1.4 |
| 12 | 589.0 | 507.6 | 4.3 | 16.2 | 0.2 |
| 13 | 611.8 | 496.8 | 4.3 | 16.2 | 0.4 |
| 14 | 527.6 | 301.1 | 4.3 | 15.8 | 0.0 |
| 15 | 446.0 | 285.0 | 4.3 | 14.6 | 0.0 |
| 16 | 385.3 | 193.5 | 4.3 | 16.5 | 0.0 |
| 17 | 326.1 | 536.7 | 4.3 | 16.4 | 0.0 |
| 18 | 297.8 | 499.9 | 4.3 | 17.6 | 0.0 |
| 19 | 286.4 | 393.7 | 5.2 | 36.2 | 0.0 |
| 20 | 292.8 | 494.8 | 3.0 | 18.7 | 0.0 |
| 21 | 304.8 | 392.9 | 1.8 | 7.2 | 0.0 |
| 22 | 288.4 | 138.9 | 1.8 | 3.0 | 1.6 |
| 23 | 286.1 | 53.9 | 1.8 | 3.8 | 1.0 |
Drone detections are zero in every hour but 09 (26,619 arrivals summed across the two flight dates).
Diurnal swing, max/min: camera captures 2.1×, camera detections 12.5×, acoustic acquisition 2.9×, acoustic detections 13.9×. Detection profiles are sharper than the acquisition profiles feeding them in every modality where both are measurable.
These values come from the versioned v2 arrival traces. They supersede the earlier unversioned arrival summaries, whose event definitions were not recorded.
S13.2 Field servicing effort¶
Derived from the Campaign-2 Jotform logs in
thewilds_20250804_20250828/jotforms/ (two camera-trap exports, two
bioacoustic exports). Every row is one sensor servicing action with a DateTime
stamp, site ID, device ID, SD-card ID, team member, and free-text note.
| Trip | Actions | Window | Elapsed | Median gap between actions | People |
|---|---|---|---|---|---|
| 2025-08-04 | 8 | 08:58–10:41 | 103 min | 16.0 min | 3 |
| 2025-08-07 | 6 | 08:59–10:05 | 66 min | 3.0 min | 1 |
| 2025-08-11 | 9 | 09:32–10:48 | 76 min | 3.0 min | 2 |
| Total | 23 | 245 min (4.1 h) |
Breakdown of the 23 actions: 11 dropoff (deployment), 6 pickup (retrieval), 5 check-in (status only, no SD or battery swap), 1 combined. By modality: 12 acoustic, 11 camera.
Additional operational fields captured per action:
- Access difficulty, 1–3 scale — recorded on 15 of 23 actions (rating 3: 9 actions; rating 1: 5; rating 2: 1)
- Battery status — e.g. 98%, 95%, 60%, "Low", "100%"
- SD-card storage — e.g. "7% full", "26% full", "5GB"
- Camera heading — compass octant, used by the camera-trap georeferencing
- Relocation notes — free text landmarks ("Zebra shelter", "Zip tower", "Lake trail"), which is how the TW09-CT02 mid-deployment move was recovered
- Team member name and email
Scope boundary: this is measured elapsed field time for the three retained mid-campaign Jotform exports only. Campaign-1 field notes have no clock times, Aug. 28 retrieval submissions are absent from the retained exports, and no per-stage analyst-time log exists. The release therefore reports no total campaign field effort and no measured desk-processing hours.
Coverage limits. These exports cover the three mid-campaign trips only.
Campaign-1 field notes
(thewilds_20250630_20250703/field_notes/*.md) are narrative and contain no
clock times, and the 2025-08-28 retrieval visits do not appear in the exported
forms. So 4.1 h is logged servicing time, not total field effort.
Not recorded anywhere: analyst time per processing stage. Field visits were logged with timestamps; the timestamp-repair and taxonomy-review work was not. This asymmetry is requirement R7 in the paper.
S14. Reproduction¶
Darwin Core generation:
The scripts live in the SmartWilds code repository (scripts/). Set
SMARTWILDS_ARCHIVE to the root of the field archive before running them; see
scripts/README.md.
python scripts/darwin_core/generate_darwin_core.py --force
python scripts/arrival_traces/generate_arrival_traces_v2.py
Camera-trap georeferencing:
python scripts/georeferencing/geolocate_camera_trap_treeoflife_predictions.py \
--input-dir <archive>/processing_output/detections/camera_traps/methods_paper/annotations/sam3/treeoflife_sam3/predictions \
--config-csv scripts/georeferencing/camera_geolocation_config.csv \
--output-dir <archive>/processing_output/detections/camera_traps/methods_paper/annotations/sam3/treeoflife_sam3/geolocation/geolocated_predictions \
--overwrite
Drone georeferencing:
python scripts/georeferencing/geolocate_drone_treeoflife_predictions.py \
--prediction-dir <SAM3 per-video prediction CSVs> \
--detection-dir <archive>/processing_output/detections/drones \
--config-csv scripts/georeferencing/drone_projection_config.csv \
--output-dir <archive>/processing_output/detections/drones/geolocation/geolocated_predictions \
--overwrite
S14.1 Release discipline¶
Integration passes are dated and immutable. Every mutation retains a before-copy and emits a JSON audit record. Passes differ semantically, not just additively — different visual-label semantics, corrected timestamps — so comparing numbers across passes is invalid in a way that is not visible in the numbers. Any figure or table must name the release build it was computed from.
The 2026-10-22 release build supersedes the 2026-07-24 pass; each of its
repairs (S10, S3, S4, S16) has its own JSON audit record, shipped under
metadata/provenance/. The 2026-09-20 curated-bird update is reconstructible
from:
curated_bird_dwc_update_audit_20260920_015706.jsoncurated_bird_event_sync_audit_20260920_020046.jsoncurated_bird_project_sample_size_fix_20260920_020401.json
S15. Release logistics¶
Each modality is published as its own Hugging Face dataset with its own DOI, and a study-level dataset holds the merged Event table, the text records, the arrival traces, and this supplement. The SmartWilds collection joins all five. DOIs, the license, and the maintenance commitment will be listed here at publication. Contact: Jenna M. Kline (kline.377@osu.edu).
S16. Defect inventory, in full¶
Every defect class found while integrating the SmartWilds campaigns (release build 2026-10-22; camera tables updated 2026-11-08). Detected by is what made the defect visible, grouped into five families: an external record (service log, field note, platform documentation), a redundant encoding inside the data, a cross-check between two artifacts, human inspection, or nothing. Rows 19-20 had no second record and could be bounded but not repaired. Rows 21-22 were found after the 2026-11-01 annotation update and were repaired in the release build (row 21) and the 2026-11-08 camera update (row 22).
| # | Defect | Mod. | Scope | Detected by (family) | Repair | Residual risk |
|---|---|---|---|---|---|---|
| 1 | Device clock wrong or unset | Cam | 221,306 / 235,778 images (93.9%) | Service log deploy/retrieve times (External record) | 18 per-deployment reconstruction methods (paper §timestamp reconstruction; S5) | 130,290 images (55.3%) only medium confidence |
| 2 | Clock reset to factory epoch | Cam | 2 deployments, 1 reporting year 2023 | Service log; implausible date on its face (External record) | Anchored offset from known deploy time | Offset assumed constant over deployment |
| 3 | Media split across SD cards with inconsistent clocks | Cam | TW02-CT01 (4 clock states), TW09-CT02 (2), TW06-CT04 (2), TW04-CT03 (2) | Card-level directory structure + service log (External record) | Per-card anchors reconciled against logs | Within-card drift unmodeled |
| 4 | Timestamp only in burned-in overlay | Cam | 182 images (TW06-CT05, TW09-CT05, TW11-CT06) | The image itself (redundant in-frame encoding) (Redundant encoding in data) | OCR of bottom overlay; 3 read manually | OCR errors on 179 automated reads |
| 5 | Camera mounted inverted | Cam | TW04-CT04, 570 images | Human review of imagery (Human inspection) | Flagged; images rotated downstream | --- |
| 6 | Camera relocated mid-deployment | Cam | TW09-CT02 (dock → Nomad Ridge W, Aug 18) | Field note recording the move (External record) | Split into two logical location intervals | Single locationID spans both |
| 7 | Battery exhaustion | Cam | TW02-CT01 Aug 18--25; TW02-CT03 C1 (55 files) | Capture gap vs. logged deployment window (Cross-check) | Recorded as a failure gap with cause | Lost observation window unrecoverable |
| 8 | Non-wildlife content (visitors) | Cam | TW07-CT05, whole deployment | Human review of imagery (Human inspection) | People-only imagery not uploaded; deployment excluded from release | Card disposition after field not documented |
| 9 | Recorder ran a schedule other than configured | ARU | TW05-SM01 C1 (144 files) | File inventory vs. intended config (Cross-check) | Actual schedule inferred and documented | Intended vs. actual effort differ |
| 10 | WAV files with no event record | ARU | 146 / 2,453 paths (6.0%) | File inventory vs. event table (Cross-check) | Classified per path: 64 zero-detection recordings added as Events; 78 transfer duplicates and 4 failed files excluded | 4 fragments/unreadable files unrecoverable |
| 11 | Heterogeneous telemetry schemas | Drone | 3 platforms, 3 formats, feet vs. metres | Platform documentation (External record) | Per-platform field mapping with unit conversion | Mapping assumptions per platform |
| 12 | Drone video not processed | Drone | 1 / 39 raw videos | File inventory vs. event table (Cross-check) | Reviewed (no usable content); retained as a zero-Occurrence MediaEvent |
--- |
| 13 | Media references to purged scratch workspace | Drone | 16,069 frame paths, 307,260 Occ. | Resolving every associatedMedia path (Cross-check) |
Replaced with the retained original video, flagged as a video-level fallback | Frame-level media link lost for those rows |
| 14 | Unreviewed fine-rank taxon labels | Cam, Drone | Merged snapshot: 550,722 Occ. unverified (99.6%); post-triage camera table: 71,009 Occ. machine-resolved (97.6%) |
Human-annotated validation subsets (Human inspection) | Camera labels replaced by embedding-based triage with human review and a 2,067-box reference set (S9.1); drone labels kept unverified, with a seven-video human-annotated reference set (S9.2); accuracy reported per rank and per method |
Drone species-rank labels include implausible taxa; triage label accuracy against the camera reference set not yet reported |
| 15 | Null written as the string nan |
Drone | 41,524 / 318,203 Occ. (13.1%); 5 Events + 2 deployments | Date redundantly encoded in the eventID; time from the video containers cross-checked against the field log (Redundant encoding in data; External record) |
Date restored from the identifier and flagged as derived (release build 2026-10-22); time of day recovered on 2026-11-10 from the video container creation times, with each aircraft's clock convention settled against reference flights and the field log and JotForm check-ins of the day (provenance/drone_time_recovery_20250811.json) |
DJI clock convention is inferred from the field schedule, not verified on a reference flight; treat those times as minute-level |
| 16 | Impossible drone coordinates (nan, longitude ≈500) |
Drone | 7 Events | Domain check on coordinate pairs (Cross-check) | Valid static video location if inside study area, else blank | Those Events lack a flight-level position |
| 17 | Curated records bypassed timestamp correction | Cam | 439 / 946 curated Occ. | Occurrence date outside parent deployment interval (Cross-check) | Re-timed from the corrected camera timestamp map (release build 2026-10-22) | --- |
| 18 | Root Event row absent from Event table | All | 1 dangling parentEventID |
Referential check over the Event table (Cross-check) | Study root Event added; parent links validated | --- |
| 19 | Within-card clock drift | Cam | Up to 130,290 images | none (None (recorded once)) | Constant clock rate assumed | Unquantifiable timestamp error |
| 20 | True deployment / retrieval times | Cam | Deployment metadata known to contain errors | none beyond the erroneous records (None (recorded once)) | Corrected occurrence dates used instead | True camera-days not reportable |
| 21 | Manual starling supplement appended twice | Drone | 24 rows / 12 distinct occurrenceIDs in the drone and merged Occurrence tables (2026-11-01) |
Duplicate occurrenceID check (Cross-check) |
Repaired in the release build: the 12 exact duplicate rows are dropped, leaving every occurrenceID unique (318,215 drone Occurrences) |
--- |
| 22 | Merged snapshot and camera release disagree on camera labels | Cam | 224,149 first-generation vs 72,769 post-triage Occ.; 13 vs 19,762 camera Events | Row-count parity between the camera release tables and the merged table (Cross-check) | Not yet repaired; regenerate the merged snapshot and the camera detection-layer arrival traces from the post-triage tables | Cross-modal totals (552,964) and camera detection-layer traces describe the first-generation labels |