Spaces:
Running
Running
Commit History
9 days ago
-
Sync from GitHub main bdecb04: European receipts (LT, DE, FR, NL, PL, ES, IT) read their total, payment, VAT and date lines; 1.234,56 amounts read in full Running
sinful199217bd204 -
Sync from GitHub main 586a5c7: a tilted scan no longer merges an item with the line above it, pack sizes like "Crisps 165g" are kept
sinful1992eac46c0
12 days ago
-
Sync from GitHub main b79d477: till names in capitals are kept, a one-item receipt's item no longer merges with the column header
sinful199273442bb
13 days ago
-
Sync from GitHub main 7a262c7: implausible hint prices are dropped instead of crashing the scan
sinful19920d82ed2 -
Sync from GitHub main 5cf13d1: sum check corrects only to an exact fit, never double-counts a split discount line
sinful19927bf227f
14 days ago
-
Sync from GitHub main 72ea727 (v1.2.0): arithmetic self-check and shopping-list hints
sinful19922798b63
17 days ago
-
Sync from GitHub main 240f73b (v1.1.0): PP-OCRv6 on an unwarped image, single pass; parser fixes for joined lines, line pitch, quantities and Co-op
sinful1992ef74d55
-
Sync from GitHub main 999b071: stop a joined row emitting its description twice
sinful1992The dual-pass merge keeps a whole-line block alongside the fragments that spell it out whenever the fragments outscore it, so a description came back doubled with the price text inside it. _drop_joined_rows drops the joined block, but only when the rest of its row accounts for all but a character or two — a prefix-only fragment leaves it holding words nothing else has, so it stays. _is_desc_block now takes plain alphabetic words out to 75% of the width, since long product names split past the old cutoff and the joined block had been carrying the overrun.15b5df0
-
Sync from GitHub main 955be71: dual-pass merge fix + Costco receipt support
sinful1992fix(ocr): the dual-pass merge ranked candidates by confidence and treated any horizontal overlap as a duplicate, so a short high-confidence fragment was selected before the complete line and then suppressed it — "1 Guylian Seashells Boxed Chocolates" came out as "Chocolates". A candidate is now a duplicate only when a selected block covers most of its width. Every price was already correct, so this only ever showed up in the description text. feat(parser): Costco prints the product name on the line above its item code and price, which shifted every description onto the wrong item; and its "TOTAL(INCL VAT)" is under a redaction bar, so "AMOUNT:" is now accepted as a total, anchored on the colon so "VAT Amount" cannot match. Measured on the 15-receipt corpus added in the GitHub repo (eval/, not synced here — the Dockerfile only copies main.py, ocr/ and utils/): description word recall 64.7% -> 90.0% line-item price accuracy 89.4% -> 97.2% totals 13/15 -> 15/15…bfba334
-
Sync from GitHub main 5f78bef: price-column drift correction
sinful1992Curled/warped receipts drift the price column away from the description column down the page (11px to 32px on the receipt that exposed this, against a 34px line pitch), so fixed-tolerance row banding paired prices with the wrong item and glued price-less description rows onto the item above. _realign_price_column re-bands the item section by tracking the drift, with the starting offset chosen by scoring three hypotheses against the ends of the item list. All 8 existing test fixtures parse byte-identically.2f4c0b3
-
Retrigger build: previous build stuck in RUNNING_BUILDING
sinful19924b81946 -
Sync from GitHub main cf55aeb: merchant fallback for unknown shops, qty-column extraction, amount-due totals vocab, mojibake currency tolerance, skewed-photo totals fix (labelled TOTAL beats standalone price; negative subtotal recovered from row above)
sinful19929bdf7a8
-
Sync from GitHub main: parser fixes (SUB-TOTAL, 2-digit qty, barcode strip), ISO dates, conditional second OCR pass, non-blocking model load, OCR_SHARED_SECRET gate + 15MB cap, TIMING behind env var
sinful1992a821617
-
Reconcile with GitHub repo (diverged since 2026-05-20)
sinful1992 +1: Claude Sonnet 5Bring in changes made on GitHub that never reached this Space: - anomalies/needs_review on parse_blocks() output — flags per-item and receipt-level parse problems (no description, no price, no items, no total) in the API response itself, not just logs - Lidl lone-total-before-keyword absorption fix, per-unit-price exclusion, OCR-glyph-tolerant inline-qty regex - "/" root redirect endpoint The new anomaly reporting in main.py uses print(flush=True), matching this Space's existing TIMING-log convention (logger.info wasn't reliably reaching the HF log viewer), rather than reintroducing the logging-module approach GitHub had used. This Space's own unique fixes (Co-op tagline detection, BALANCE DUE keyword, credit/debit payment filter, async background warm-up, timing instrumentation) are unchanged and have also been ported back to GitHub so the two stop diverging again. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>ee66b5c
-
fix(parser): detect Co-op via tagline, BALANCE DUE as total, strip inline qty, filter CREDIT/DEBIT
bb788ea -
fix(logging): use print(flush=True) for TIMING lines so they appear in HF logs
3a00f27
-
perf(ocr): raise image cap to 4096px for higher quality
sinful1992dcfbd2e -
revert(ocr): remove invalid det_model parameter
sinful1992212b6c3 -
perf(ocr): switch to mobile detection model for faster CPU inference
sinful1992b7073b7 -
perf(ocr): cap image at 2048px for dual-pass speed improvement
sinful1992695fa82 -
fix(ocr): run warm-up in background so server accepts connections immediately
sinful19927ae5e53 -
revert(ocr): restore dual-pass and 4096px, keep timing logs
sinful1992b010bd2 -
chore(ocr): add per-step timing logs to identify bottleneck
sinful1992d3ab1b0 -
perf(ocr): increase max image size to 2048px for better accuracy
sinful1992b364fa7 -
perf(ocr): halve inference time on free CPU tier
sinful1992- Drop max image size from 4096 to 1500px — receipts don't need 4K resolution - Remove dual-pass OCR strategy; single CLAHE pass is sufficient and halves inference time (was 160s, target <45s on HF free CPU)a5789fa -
fix(ocr): warm up inference engine at startup and add /warmup endpoint
sinful1992- Run dummy OCR pass in lifespan before accepting traffic so JIT compilation happens at startup, not on the first user request - Add GET /warmup endpoint for keepalive cron to exercise actual inference (vs /health which only checks process liveness)346a300
-
feat: initial OCR server deploy
sinful1992619b919 -
initial commit
Verified signature45b29af