Manual
What this application shows, how the numbers are computed, and how to review and correct the results.
What happens to a photo (the pipeline)
Every core-box photo goes through four automatic steps:
- Wood subtraction — SAM3 (a segmentation AI) finds the wooden box with the prompts “wooden box” / “wooden plank”, guarded by “stone” / “rock” so wood-coloured core is never removed.
- Box segmentation — the box geometry is derived from the wood mask; each channel (row) is exactly 1 m of core, which calibrates the mm-per-pixel scale. Channels merge into one depth-true strip; missing rock stays as gaps.
- Fracture candidates — a union map of the rock (8 material prompts) plus two candidate layers: direct crack prompts and “multi-mask diff” edges where the prompt masks disagree.
- Crack confirmation — a candidate becomes a crack only if it spans ≥ 70 % of the core height, runs 30–90° to the core axis, is ≤ 20 mm thick and ≤ 90 mm along the core, with sufficient confidence. Everything else is kept as a rejected candidate(grey), never deleted.
Depth of a crack: channel_start + x / px_per_m — every channel is 1 m, so worst-case position error is a few mm.
The views
| Boreholes | Campaign dashboard: every drill with its progress, fracture count, FF and RQD badge. Sortable table or cards. Auto-refreshes while the worker is processing. |
| Box view | One drill as horizontal 1 m-ruled strips, one row per box — closest to how the boxes physically look. Each row links to its box report. |
| Go to ground | The whole drill joined into one vertical core, true aspect ratio, depth axis running to ground. Columns: core with marks · untouched original · RQD per 1 m · fractures per 1 m. Scroll down = deeper. |
| Box report | Everything about one box: all computed parameters, the interactive strip, fracture and channel tables, and every pipeline step image down to the original photo — the verification trail. |
Controls
| min confidence | Hides cracks below the threshold and recomputes RQD/FF live. The pipeline’s own cut-off is 0.45; lowering below that only adds cracks if “rejected” is shown. Your own confirmations always stay visible. |
| show rejected | Displays the grey dashed candidates the pipeline declined — useful for spotting missed cracks in crushed sections. |
| zoom (ground view) | Pixels per metre, 20–3000, with presets. Rendering is depth- and aspect-true; zooming keeps the depth you are looking at. Higher zoom automatically loads sharper imagery. |
| go to / depth chip | Jump to any depth; the floating chip shows where you are while scrolling. |
| clicks | Crack mark → inspector panel. Core (ground view) → box report. Table row status → inspector. Step images → full resolution. |
| ⬇ CSV | Downloads all fractures of the drill with parameters, pipeline verdicts and your verdicts. |
What the numbers mean
RQD (Rock Quality Designation, Deere 1963): the share of intact core pieces longer than 10 cm within an interval. Pieces are the spans between consecutive confirmed cracks. Classes: ■ ≥90 Excellent · ■ 75–90 Good · ■ 50–75 Fair · ■ 25–50 Poor · ■ <25 Very Poor.
FF — fracture frequency, cracks per metre. Mean spacing and the ISRM class derive from the same crack depths.
Confidence (0–1) reflects how a crack was found: both detection layers agreeing scores highest, the direct crack prompt alone slightly lower, the mask-diff layer alone lowest — scaled by how much of the core height the seam covers.
Flags: hatched bins = no processed box covers that depth. Orange-edged RQD bins = low reliability: many rejected candidates but few confirmed cracks, typical for crushed core where spacing-based RQD overestimates quality. In the box report, scale confidence tells whether the 1 m calibration came from a full channel (high) or was corrected from the filename interval (corrected_by_interval).
Reviewing & correcting (your verdicts)
- Click a crack mark → the inspector shows a zoomed crop of that exact spot (±5/10/25 cm) with all parameters.
- ✓ confirm or ✗ not a crack. Your verdict is stored next to the pipeline’s, never over it — both remain visible.
- Missed crack? Toggle ✚ add crack in the ground view and click the core at the right depth. Added cracks carry source “human”; rejecting one removes it again.
- All statistics (RQD, FF, counts, CSV) update immediately. Human-confirmed cracks ignore the confidence slider.
- Marks you touched turn green; the ✎ human only checkbox filters the view down to them — useful for reviewing your own edits.
Verdicts double as labelled ground truth for tuning the pipeline later — every review makes the automatic detection improvable.
Accounts & sign-in
The app requires sign-in; every verdict and added crack records who made it (shown in the inspector and the CSV). Accounts are created by the administrator: python -m app.users add <name>. Sessions last 30 days; sign out from the top bar.
Processing data
Drills are registered from photo folders (depth intervals are parsed from filenames like Z-843_215,00-220,00.JPG) and processed by a background worker, one box at a time (~40 s each, ~30 min per drill). The chip in the top bar shows the live queue. A “process” button appears for any drill with unprocessed boxes; finished boxes are never recomputed unless forced.
Ingest new folders: python -m app.ingest /path/to/drill/foto (or --scan /path/to/campaign for many at once).
Honest caveats
- RQD is fracture-spacing based and not yet corrected for core recovery — sections with missing core read better than they are. A recovery-corrected version (from the rock masks) is planned.
- Crushed/rubble zones are under-marked by design: the crack rules are conservative, so heavily fragmented core shows few confirmed cracks and many grey candidates — watch for the orange low-reliability flag instead of trusting green bins there.
- Each channel is assumed to hold exactly 1 m, read left-to-right, boxes top-to-bottom. Deviating boxes (rare) show up as warnings on the drill.
- Only wooden Z-style boxes are supported so far; the J13/J26 box styles need an adapted segmentation step.