Audit fixes: mis-framed crops, GPT cost 2.2x low, camera button losing photos
1. detail_crops had no equivalent of the margin guard the measurements got. When box detection fails (card still in a case), every crop is cut relative to the wrong rectangle -- verified the 'TOP-LEFT CORNER' close-up of the cased Ohtani is actually the CASE's corner bracket. The measurements refuse and explain; the crops kept being produced and captioned authoritatively, and the prompt tells the model to judge corners/edges/surface *from* them. Now surfaces a framing caveat telling the model to locate the real card edge inside each crop and say cannot_assess rather than grade the holder. 2. gpt-5.6-sol's approx_image_tokens was a pre-launch guess (1500) that advertised ~2.2x under true cost across all 9 real calls. Recalibrated to 3560 against median real usage, and added a per-model output estimate since GPT writes ~1.2k tokens of verdict vs Sonnet's ~0.9k. Both models now advertise within ~3% of observed cost. 3. 'Take photo' didn't reset after a completed grade, unlike 'Choose from library'. The result view has no photo strip, so new photos piled up invisibly behind the old verdict, silently, to the 6-photo cap. Also fixed the cap itself being a silent no-op with no explanation.
This commit is contained in:
parent
deabe74593
commit
6c612c1f4a
3 changed files with 79 additions and 12 deletions
25
cardimage.py
25
cardimage.py
|
|
@ -287,6 +287,31 @@ def _box_margin_reason(box, img_size):
|
|||
return None
|
||||
|
||||
|
||||
def framing_warning(image_bytes):
|
||||
"""The margin problem described in _box_margin_reason, or None.
|
||||
|
||||
Public because the CROPS have the same exposure to it as the pixel
|
||||
measurements do, and worse consequences. When box detection can't find
|
||||
the card's real boundary, every crop is cut relative to the wrong
|
||||
rectangle — a "TOP-LEFT CORNER" close-up of a cased card shows the
|
||||
CASE's corner bracket, with the card's actual corner off to one side.
|
||||
The measurements at least refuse and say why; the crops keep being
|
||||
produced and keep being captioned authoritatively, and the grading
|
||||
prompt tells the model to judge corners/edges/surface *from* them. So
|
||||
the caller needs to be able to warn about the framing rather than
|
||||
silently pass off plastic as cardstock.
|
||||
"""
|
||||
if Image is None:
|
||||
return None
|
||||
try:
|
||||
img = Image.open(io.BytesIO(image_bytes))
|
||||
img.load()
|
||||
box = _detect_card_box(img) or (0, 0, img.width, img.height)
|
||||
return _box_margin_reason(box, img.size)
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
|
||||
def _surface_map(piece):
|
||||
"""A band-pass view that isolates surface texture from the artwork.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue