docs: runtime, one photo, empty mask, browsers
This commit is contained in:
+19
-3
@@ -1,8 +1,9 @@
|
|||||||
# Milestone 1 — Capture
|
# Milestone 1 — Capture
|
||||||
|
|
||||||
Runs in the browser on phone and PC as ordinary client code.
|
Runs in the browser on phone and PC as ordinary client code.
|
||||||
No inference URL. No model. Mask, rectangle, measurements, and PNG encode are deterministic functions of the photo and user inputs.
|
No inference URL. No model. No backend. Mask, rectangle, measurements, and PNG encode are deterministic functions of the photo and user inputs.
|
||||||
|
|
||||||
|
Milestone 1 uses one reference photo. Further angles are later milestones.
|
||||||
Milestone 1 ends when the user sees the inventory PNG and measurements. Milestone 2 is Review. Milestone 3 is Create. This file does not create a WooCommerce product.
|
Milestone 1 ends when the user sees the inventory PNG and measurements. Milestone 2 is Review. Milestone 3 is Create. This file does not create a WooCommerce product.
|
||||||
|
|
||||||
## Setup
|
## Setup
|
||||||
@@ -16,12 +17,18 @@ Photograph the slab on a green or black sheet.
|
|||||||
|
|
||||||
The app expects that sheet. Background removal keys green or black. Other backgrounds are out of Milestone 1.
|
The app expects that sheet. Background removal keys green or black. Other backgrounds are out of Milestone 1.
|
||||||
|
|
||||||
|
## Browsers
|
||||||
|
|
||||||
|
Phone: iOS Safari, Android Chrome.
|
||||||
|
PC: Chrome, Edge, Firefox.
|
||||||
|
Other clients get a hard stop.
|
||||||
|
|
||||||
## States
|
## States
|
||||||
|
|
||||||
One photo component is reused. Each state advances on approve. Back returns to the previous state. A device draft restores the last approved state.
|
One photo component is reused. Each state advances on approve. Back returns to the previous state. A device draft restores the last approved state.
|
||||||
|
|
||||||
1. Resume — only when a device draft exists. Continue or Start fresh.
|
1. Resume — only when a device draft exists. Continue or Start fresh.
|
||||||
2. Add photo — camera or picker. Setup rules visible.
|
2. Add photo — camera or picker. One photo. Setup rules visible.
|
||||||
3. Mask — background removal on that photo.
|
3. Mask — background removal on that photo.
|
||||||
4. Length axis — bounding rectangle and long-side axis on the same photo.
|
4. Length axis — bounding rectangle and long-side axis on the same photo.
|
||||||
5. Measure — length, thickness, inventory PNG, widths, sqft, bdft. Milestone 1 stops here.
|
5. Measure — length, thickness, inventory PNG, widths, sqft, bdft. Milestone 1 stops here.
|
||||||
@@ -32,6 +39,13 @@ Preview fits the device width. Height is capped so Mask and Measure controls sta
|
|||||||
|
|
||||||
The preview is display only. Mask, rectangle, `scale`, sqft, and PNG encode use the source photo pixels, not the CSS size of the preview.
|
The preview is display only. Mask, rectangle, `scale`, sqft, and PNG encode use the source photo pixels, not the CSS size of the preview.
|
||||||
|
|
||||||
|
## Runtime
|
||||||
|
|
||||||
|
Browser APIs: `createImageBitmap`, `canvas` / `OffscreenCanvas`, Web Worker, `convertToBlob({ type: "image/png" })`, IndexedDB.
|
||||||
|
`idb-keyval` may wrap IndexedDB.
|
||||||
|
No OpenCV, ONNX, U2Net, or image-editor kit.
|
||||||
|
Sensitivity 0–100 maps to green chroma tightness and black brightness cutoff in the worker.
|
||||||
|
|
||||||
## Mask
|
## Mask
|
||||||
|
|
||||||
Overlay: slab remains the photograph. Removed pixels are a light gray checkerboard.
|
Overlay: slab remains the photograph. Removed pixels are a light gray checkerboard.
|
||||||
@@ -43,7 +57,9 @@ Controls on this state, with the photo visible:
|
|||||||
|
|
||||||
The control value updates immediately. The overlay recomputes 2.0 seconds after the last sensitivity change. A sheet change may recompute on the change.
|
The control value updates immediately. The overlay recomputes 2.0 seconds after the last sensitivity change. A sheet change may recompute on the change.
|
||||||
|
|
||||||
Mask work runs off the UI thread. The last good overlay stays visible while a pass runs. Show a busy mark only if a pass lasts more than a fraction of a second. If a pass fails, keep the last overlay; the user may retake.
|
Mask work runs in the worker. The last good overlay stays visible while a pass runs. Show a busy mark only if a pass lasts more than a fraction of a second. If a pass fails, keep the last overlay; the user may retake.
|
||||||
|
|
||||||
|
Approve is blocked when the mask has no slab pixels. User retakes.
|
||||||
|
|
||||||
User approves the mask when only the slab remains. That mask is the footprint for Length axis, measurements, and the inventory PNG.
|
User approves the mask when only the slab remains. That mask is the footprint for Length axis, measurements, and the inventory PNG.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user