Fix OCR failure when erroneous lang data is in cache (#16386)

Fixes #15472

If the Tesseract worker fails at any point, re-try with cache settings that
overwrite the cache. It is difficult to catch more precise errors as those
are pretty opaque and do not occur when loading lang data but when trying to
detect text.
signup-info-prompt
Claire 2021-06-15 22:11:07 +02:00 committed by GitHub
parent ee91c8a3a1
commit 8428faa085
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 13 additions and 2 deletions

View File

@ -219,6 +219,10 @@ class FocalPointModal extends ImmutablePureComponent {
} }
handleTextDetection = () => { handleTextDetection = () => {
this._detectText();
}
_detectText = (refreshCache = false) => {
const { media } = this.props; const { media } = this.props;
this.setState({ detecting: true }); this.setState({ detecting: true });
@ -235,6 +239,7 @@ class FocalPointModal extends ImmutablePureComponent {
this.setState({ ocrStatus: 'preparing', progress }); this.setState({ ocrStatus: 'preparing', progress });
} }
}, },
cacheMethod: refreshCache ? 'refresh' : 'write',
}); });
let media_url = media.get('url'); let media_url = media.get('url');
@ -247,14 +252,20 @@ class FocalPointModal extends ImmutablePureComponent {
} }
} }
(async () => { return (async () => {
await worker.load(); await worker.load();
await worker.loadLanguage('eng'); await worker.loadLanguage('eng');
await worker.initialize('eng'); await worker.initialize('eng');
const { data: { text } } = await worker.recognize(media_url); const { data: { text } } = await worker.recognize(media_url);
this.setState({ description: removeExtraLineBreaks(text), dirty: true, detecting: false }); this.setState({ description: removeExtraLineBreaks(text), dirty: true, detecting: false });
await worker.terminate(); await worker.terminate();
})(); })().catch((e) => {
if (refreshCache) {
throw e;
} else {
this._detectText(true);
}
});
}).catch((e) => { }).catch((e) => {
console.error(e); console.error(e);
this.setState({ detecting: false }); this.setState({ detecting: false });