preprocess() rechnet rein (Graustufen, Kontrastspreizung, Schwellwert) ohne DOM-Zugriff und ist damit ohne Browser testbar. runOcr() ist der Browser- Adapter, cacht den Tesseract-Arbeiter und laesst isOcrAvailable() sich nach einem Fehlschlag wieder erholen statt dauerhaft einzufrieren - analog zum ensureReady()-Muster in barcode.js.