Compute
Run vision observations across an image set
Run declared vision observations across an image set and keep the region evidence with every result. Confidence is reported, and a face region is never an identity.
What you get
Observations, each tied to the part of the image it came from.
- One row per image per observation in
data/part-*, with the region inlithi_evidenceand a score inlithi_confidence. - Artifact outputs where the observation produces one: a cropped region, a segmentation mask or a set of keypoints.
- Images the run declined to judge in
abstentions/part-*, and images it could not read infailures/part-*. metrics.json, so you can see how many images produced no observation at all.
An observation with no region is not checkable. Region evidence is what lets a person confirm a label in a second instead of squinting at a thumbnail.
What you need
Twenty images, a manifest, and a decision about which observations you actually want.
image_id,path,width,height,source
IMG-0001,catalog/chair-front.jpg,2400,1600,studio
IMG-0002,catalog/chair-detail.jpg,2400,1600,studio
IMG-0003,catalog/label-barcode.jpg,1200,900,studio
IMG-0004,field/warehouse-dim.jpg,1600,1200,phone
IMG-0005,field/blurred.jpg,800,600,phone
Declare image_id as your item_id_field. Image four is badly lit and image five is out of focus. Together they show what low confidence and abstention look like before you scale up.
Declare the observations you want rather than asking for everything. A workflow descriptor states which it supports. Those typically include labels, detected objects with regions, captions, barcodes, saliency, segmentation masks, pose keypoints and image similarity.
Run it
- Inspect locally:
lithi media inspect ./vision-fixture. It reports formats, dimensions, color profiles and files that are not really images. - Read the workflow:
lithi workflow explain <workflow-id>, and read exactly which observations and artifact outputs it declares. - Pin the output schema you want, with types, so a caption and a label never share an untyped column: how output schemas are declared.
- Quote it:
lithi quote --workflow <workflow-id> --input ./vision-fixture/manifest.csv. The quote gives a maximum charge and an expiry, and authorizes nothing. - Approve the quote separately, then submit with
lithi batch submitand track withlithi status <job-id>.
Read the result
Open result-manifest.json first, then check the image evidence before anything else.
Take five detections and open the cited region against the original image. If the region does not contain what the label claims, the observation is wrong however high the score is. Do the same for one mask and one keypoint set, because those fail in ways a bounding box does not.
Read the two hard images deliberately. Lower confidence on a blurred photo is correct behavior, and an abstention there is better than a confident guess. Look at how many images produced no observation, and decide whether that is the set or the thresholds.
Treat confidence as a comparison within one run, not as a probability you can quote. Set your own threshold against images you have labeled yourself.
Where it stops
You get observations and artifacts. Nothing is published, filed, tagged in your own library or written back anywhere.
Detecting a face region is not recognizing a person. The run reports where a face appears in the frame. It does not name anyone, match anyone across images, or infer who they are. Do not build an identity on top of a region.
Send only images you are permitted to send, and choose the profile that matches that permission: match your data profile to what you may send.
No accuracy is promised. An observation is a measurement under your parameters, and a person decides what it means before it reaches anyone.