Spring Annuals Trial HarnessHabitat NZ · technical demo by EmerTech

Imagery

Every frame the harness can run against, grouped by where its truth comes from. Ground sample distance is stated per image because it, not model choice, sets the ceiling on what can be counted.

21 frames13 with exact truth

Synthetic ladder (exact ground truth)

The ladder exists because no dataset on earth gives us both 10–30 mm Central Otago annuals and perfect truth. Each scene is manufactured at a known ground sample distance — 0.5, 1, 2, 4 and 8 mm/px, scattered and dense at every rung — so recall can be plotted against millimetres-per-pixel instead of guessed at. Every plant position is exact by construction, and every scene is seeded with hard negatives (schist flecks, lichen, droppings) that a detector must not count. When a model looks good here and bad in the field, the ladder tells you which rung it failed on.

Synthetic ladder — 0.5 mm/px — scattered
GSD
0.50 mm/px
Altitude
1.9 m AGL
10 mm plant = 20.0 px · Countableground truth: 32 plants+24 planted negativesscattered

CC0 (generated)Synthetic scene — EmerTech generator · DJI Mavic 3E — wide

AnnotateDetail1280 × 960 px
Synthetic ladder — 0.5 mm/px — dense
GSD
0.50 mm/px
Altitude
1.9 m AGL
10 mm plant = 20.0 px · Countableground truth: 181 plants+23 planted negativesdense

CC0 (generated)Synthetic scene — EmerTech generator · DJI Mavic 3E — wide

AnnotateDetail1280 × 960 px
Synthetic ladder — 1.0 mm/px — scattered
GSD
1.00 mm/px
Altitude
3.7 m AGL
10 mm plant = 10.0 px · Countableground truth: 49 plants+39 planted negativesscattered

CC0 (generated)Synthetic scene — EmerTech generator · DJI Mavic 3E — wide

AnnotateDetail1280 × 960 px
Synthetic ladder — 1.0 mm/px — dense
GSD
1.00 mm/px
Altitude
3.7 m AGL
10 mm plant = 10.0 px · Countableground truth: 378 plants+40 planted negativesdense

CC0 (generated)Synthetic scene — EmerTech generator · DJI Mavic 3E — wide

AnnotateDetail1280 × 960 px
Synthetic ladder — 2.0 mm/px — scattered
GSD
2.00 mm/px
Altitude
7.5 m AGL
10 mm plant = 5.0 px · Marginalground truth: 62 plants+40 planted negativesscattered

CC0 (generated)Synthetic scene — EmerTech generator · DJI Mavic 3E — wide

AnnotateDetail1280 × 960 px
Synthetic ladder — 2.0 mm/px — dense
GSD
2.00 mm/px
Altitude
7.5 m AGL
10 mm plant = 5.0 px · Marginalground truth: 400 plants+16 planted negativesdense

CC0 (generated)Synthetic scene — EmerTech generator · DJI Mavic 3E — wide

AnnotateDetail1280 × 960 px
Synthetic ladder — 4.0 mm/px — scattered
GSD
4.00 mm/px
Altitude
15 m AGL
10 mm plant = 2.5 px · Density / cover onlyground truth: 27 plants+23 planted negativesscattered

CC0 (generated)Synthetic scene — EmerTech generator · DJI Mavic 3E — wide

AnnotateDetail1280 × 960 px
Synthetic ladder — 4.0 mm/px — dense
GSD
4.00 mm/px
Altitude
15 m AGL
10 mm plant = 2.5 px · Density / cover onlyground truth: 237 plants+37 planted negativesdense

CC0 (generated)Synthetic scene — EmerTech generator · DJI Mavic 3E — wide

AnnotateDetail1280 × 960 px
Synthetic ladder — 8.0 mm/px — scattered
GSD
8.00 mm/px
Altitude
30 m AGL
10 mm plant = 1.3 px · Below detectionground truth: 36 plants+32 planted negativesscattered

CC0 (generated)Synthetic scene — EmerTech generator · DJI Mavic 3E — wide

AnnotateDetail1280 × 960 px
Synthetic ladder — 8.0 mm/px — dense
GSD
8.00 mm/px
Altitude
30 m AGL
10 mm plant = 1.3 px · Below detectionground truth: 1207 plants+23 planted negativesdense

CC0 (generated)Synthetic scene — EmerTech generator · DJI Mavic 3E — wide

AnnotateDetail1280 × 960 px
Quadrat calibration — 1.0 mm/px — 1 m frame with plants
GSD
1.00 mm/px
Altitude
3.7 m AGL
10 mm plant = 10.0 px · Countableground truth: 65 plants+23 planted negativesscattered

CC0 (generated)Synthetic scene — EmerTech generator · DJI Mavic 3E — wide

AnnotateDetail1280 × 1280 px
Quadrat calibration — 1.0 mm/px — true zero (no plants)
GSD
1.00 mm/px
Altitude
3.7 m AGL
10 mm plant = 10.0 px · Countableground truth: 0 plants (true zero)+36 planted negativesscattered

CC0 (generated)Synthetic scene — EmerTech generator · DJI Mavic 3E — wide

AnnotateDetail1280 × 1280 px
Hero scene — 1.0 mm/px — scattered with hard negatives
GSD
1.00 mm/px
Altitude
3.7 m AGL
10 mm plant = 10.0 px · Countableground truth: 80 plants+27 planted negativesscattered

CC0 (generated)Synthetic scene — EmerTech generator · DJI Mavic 3E — wide

AnnotateDetail1920 × 1280 px

Real UAV frames (CoFly-WeedDB, CC BY 4.0)

Eight frames from CoFly-WeedDB — real DJI Phantom 4 Pro imagery flown at 4.9 m over a cotton field near Larissa, Greece (Krestenitis et al., CC BY 4.0). They are not Central Otago and they are not the target species. They are here as a real-sensor annotation playground: genuine motion blur, JPEG artefacts, shadow and soil clutter that no generator reproduces honestly. They ship with no ground truth — truth on these frames only exists once a human draws it in the workbench.

CoFly-WeedDB — real UAV frame 1 (4.9 m AGL)
GSD
5.74 mm/px
Altitude
4.9 m AGL
10 mm plant = 1.7 px · Density / cover onlyannotate to create truth

CC BY 4.0CoFly-WeedDB (Krestenitis et al.), DJI Phantom 4 Pro over cotton field, Larissa, Greece — zenodo.org/records/6697343

AnnotateDetail1280 × 720 px
CoFly-WeedDB — real UAV frame 2 (4.9 m AGL)
GSD
5.74 mm/px
Altitude
4.9 m AGL
10 mm plant = 1.7 px · Density / cover onlyannotate to create truth

CC BY 4.0CoFly-WeedDB (Krestenitis et al.), DJI Phantom 4 Pro over cotton field, Larissa, Greece — zenodo.org/records/6697343

AnnotateDetail1280 × 720 px
CoFly-WeedDB — real UAV frame 3 (4.9 m AGL)
GSD
5.74 mm/px
Altitude
4.9 m AGL
10 mm plant = 1.7 px · Density / cover onlyannotate to create truth

CC BY 4.0CoFly-WeedDB (Krestenitis et al.), DJI Phantom 4 Pro over cotton field, Larissa, Greece — zenodo.org/records/6697343

AnnotateDetail1280 × 720 px
CoFly-WeedDB — real UAV frame 4 (4.9 m AGL)
GSD
5.74 mm/px
Altitude
4.9 m AGL
10 mm plant = 1.7 px · Density / cover onlyannotate to create truth

CC BY 4.0CoFly-WeedDB (Krestenitis et al.), DJI Phantom 4 Pro over cotton field, Larissa, Greece — zenodo.org/records/6697343

AnnotateDetail1280 × 720 px
CoFly-WeedDB — real UAV frame 5 (4.9 m AGL)
GSD
5.74 mm/px
Altitude
4.9 m AGL
10 mm plant = 1.7 px · Density / cover onlyannotate to create truth

CC BY 4.0CoFly-WeedDB (Krestenitis et al.), DJI Phantom 4 Pro over cotton field, Larissa, Greece — zenodo.org/records/6697343

AnnotateDetail1280 × 720 px
CoFly-WeedDB — real UAV frame 6 (4.9 m AGL)
GSD
5.74 mm/px
Altitude
4.9 m AGL
10 mm plant = 1.7 px · Density / cover onlyannotate to create truth

CC BY 4.0CoFly-WeedDB (Krestenitis et al.), DJI Phantom 4 Pro over cotton field, Larissa, Greece — zenodo.org/records/6697343

AnnotateDetail1280 × 720 px
CoFly-WeedDB — real UAV frame 7 (4.9 m AGL)
GSD
5.74 mm/px
Altitude
4.9 m AGL
10 mm plant = 1.7 px · Density / cover onlyannotate to create truth

CC BY 4.0CoFly-WeedDB (Krestenitis et al.), DJI Phantom 4 Pro over cotton field, Larissa, Greece — zenodo.org/records/6697343

AnnotateDetail1280 × 720 px
CoFly-WeedDB — real UAV frame 8 (4.9 m AGL)
GSD
5.74 mm/px
Altitude
4.9 m AGL
10 mm plant = 1.7 px · Density / cover onlyannotate to create truth

CC BY 4.0CoFly-WeedDB (Krestenitis et al.), DJI Phantom 4 Pro over cotton field, Larissa, Greece — zenodo.org/records/6697343

AnnotateDetail1280 × 720 px

Uploads

Frames added in this session. Give one a camera and an altitude and it joins the physics — GSD, pixel budget and detectability verdict computed the same way as every seeded frame.

No uploads in this session yet. Add a frame below and it appears here.

Add a frame

JPEG or PNG, up to 8 MB. Dimensions are measured server-side, so the stored size is the real one.

GSD 1.33 mm/px · a 10 mm plant spans 7.5 pxCountable
Nothing leaves this browser until you press the button.

Demo storage. Uploads are held in this demo’s memory only. They are never sent anywhere except the model lanes you explicitly run, they are not written to disk or to any third-party store by this gallery, and they disappear when the demo is redeployed or restarted. Do not upload anything you would mind losing — or anything you would mind a hosted model provider seeing if you then run a live lane over it.