This block is real DOM, not an image, so boxing it forces the capture path through
getDisplayMedia. The stream is kept alive afterwards, so the second capture
skips the picker entirely.
Targeted OCR should never touch this whole panel. It crops only the line boxes that lens-extract already mapped, stacks them into short strips and hands those to the worker pool. Watch the ocr calls meter: a dozen lines should cost two or three calls, not twelve.
If words read stays at zero while lines are detected, the vendored traineddata is missing and the loader fell back to the public tessdata host.
Nothing captured yet. Drag the reticle over a plate, or paste an image.