Zapcopy QA Single-photo OCR

Single-photo OCR

User snaps or picks a photo → on-device Vision pre-check → presigned PUT → S3 upload → moderation + Gemini OCR → persistence + credit deduction.

Cloud pipeline

Click any node for URL, handler file, IAM notes, and iOS call site. Every AWS service touched at every step is rendered — Lambda URLs, S3 buckets, Rekognition, DynamoDB, SNS → APNS — plus the external Gemini API.

Prompts used

photo_ocr

gemini-2.5-flash
qr_reader_v1/EXTENDED_LAMBDA_OCR.py:108 · temp 0 sha256 48496a3017a2…
Can you please OCR this image? Please OCR and do not modify the content and try and generate the OCR result with the same exact formatting as the input image. Please focus in ensuring the OCR process flawlessly retains the source's formatting. I aim to go line-by-line, capturing every detail, including special characters, comments, and those crucial line breaks, indentations, and case differences, thus guaranteeing the output mirrors the original. However, please remove any items from an editor or parts of the IDE/word processor that are shown in any potential screenshot to as just show only the content instead. (For instance removing the list of windows open/ line numbers, file name etc.)
Model mix last 30 runs · 30 post-F1
gemini-2.5-pro 15 · 50%
gemini-2.5-flash 15 · 50%

Model attribution comes from the Lambda's self-reported modelId (post-F1). Older runs fall back to runSettings.geminiModel from app_defaults.yaml.

Recent runs for this flow
Strict-mode notes

Gemini's would-have-corrected list suppressed by strict mode. Tag color = concern tier: pink = fidelity (silent source edits), yellow = determinism (variant picks between runs), green = neutral (stylistic cleanup). Tag rules live in scripts/polish_notes_categorize.py.

2026-04-25T16-06-50Z__iter_03 2026-04-25 16:06 91 chars
uncategorized
Would have added 'import math' at the top of the file for the 'math.sqrt' function to work.
2026-04-25T16-06-19Z__iter_02 2026-04-25 16:06 91 chars
uncategorized
Would have added 'import math' at the top of the file for the 'math.sqrt' function to work.
2026-04-25T16-05-47Z__iter_01 2026-04-25 16:05 91 chars
uncategorized
Would have added 'import math' at the top of the file for the 'math.sqrt' function to work.
2026-04-25T16-03-15Z__iter_03 2026-04-25 16:03 173 chars
uncategorized
Would have corrected '盘放' to '摆放' in the first line of the Chinese text, as '摆放' (bǎifàng) is more commonly used for 'to place' or 'to arrange' items for collection/display.
2026-04-25T16-02-55Z__iter_02 2026-04-25 16:02 173 chars
uncategorized
Would have corrected '盘放' to '摆放' in the first line of the Chinese text, as '摆放' (bǎifàng) is more commonly used for 'to place' or 'to arrange' items for collection/display.
2026-04-25T16-02-38Z__iter_01 2026-04-25 16:02 173 chars
uncategorized
Would have corrected '盘放' to '摆放' in the first line of the Chinese text, as '摆放' (bǎifàng) is more commonly used for 'to place' or 'to arrange' items for collection/display.
2026-04-25T13-35-04Z__iter_03 2026-04-25 13:35 59 chars
uncategorized
Text on the warning label is small and partially illegible.
2026-04-25T13-34-39Z__iter_02 2026-04-25 13:34 59 chars
uncategorized
Text on the warning label is small and partially illegible.
2026-04-25T13-34-13Z__iter_01 2026-04-25 13:34 102 chars
uncategorized
The text on the treadmill warning label is very blurry and the transcription is a best-effort attempt.
2026-04-25T13-33-34Z__iter_02 2026-04-25 13:33 141 chars
uncategorized
Some text on the warning sticker (specifically 'feet', 'moving belt', 'pets', and 'machine') is blurry, but readable with careful inspection.
2026-04-24T22-47-09Z__iter_01 2026-04-24 22:47 173 chars
uncategorized
Would have corrected '盘放' to '摆放' in the first line of the Chinese text, as '摆放' (bǎifàng) is more commonly used for 'to place' or 'to arrange' items for collection/display.
2026-04-24T22-45-36Z__iter_01 2026-04-24 22:45 173 chars
uncategorized
Would have corrected '盘放' to '摆放' in the first line of the Chinese text, as '摆放' (bǎifàng) is more commonly used for 'to place' or 'to arrange' items for collection/display.