feat: add coverage_threshold to skip OCR for small images

Signed-off-by: Michele Dolfi <dol@zurich.ibm.com>
This commit is contained in:
Michele Dolfi 2024-10-18 10:11:58 +02:00
parent a00c937e19
commit ca9f940c8f
3 changed files with 27 additions and 0 deletions

View File

@ -22,6 +22,9 @@ class TableStructureOptions(BaseModel):
class OcrOptions(BaseModel): class OcrOptions(BaseModel):
kind: str kind: str
coverage_threshold: float = (
0.3 # percentage of the area which must be covered by bitmaps for triggering OCR
)
class EasyOcrOptions(OcrOptions): class EasyOcrOptions(OcrOptions):

View File

@ -68,6 +68,10 @@ class BaseOcrModel:
bitmap_rects = [] bitmap_rects = []
coverage, ocr_rects = find_ocr_rects(page.size, bitmap_rects) coverage, ocr_rects = find_ocr_rects(page.size, bitmap_rects)
# skip OCR if the bitmap area on the page is smaller than the options threshold
if coverage < self.options.coverage_threshold:
return []
# return full-page rectangle if sufficiently covered with bitmaps # return full-page rectangle if sufficiently covered with bitmaps
if coverage > BITMAP_COVERAGE_TRESHOLD: if coverage > BITMAP_COVERAGE_TRESHOLD:
return [ return [

View File

@ -42,3 +42,23 @@ def test_e2e_conversions(test_doc_path):
doc_result: ConversionResult = converter.convert(test_doc_path) doc_result: ConversionResult = converter.convert(test_doc_path)
assert doc_result.status == ConversionStatus.SUCCESS assert doc_result.status == ConversionStatus.SUCCESS
def test_ocr_coverage_threshold(test_doc_path):
pipeline_options = PdfPipelineOptions()
pipeline_options.do_ocr = True
pipeline_options.ocr_options.coverage_threshold = 1.1
converter = DocumentConverter(
format_options={
InputFormat.PDF: PdfFormatOption(
pipeline_options=pipeline_options,
)
}
)
test_doc_path = Path("./tests/data_scanned/ocr_test.pdf")
doc_result: ConversionResult = converter.convert(test_doc_path)
# this should have generated no results, since we set a very high threshold
assert len(doc_result.document.texts) == 0