unstructured bug/supplement_element_with_table_extraction正在对裁剪后的图像调用OCR,

v7pvogib  于 2个月前  发布在  其他
关注(0)|答案(1)|浏览(42)

Bug描述

从附加的 acciona.pdf 文件中提取表格信息的结果令人失望,而通过 tesseractpdfminer 在整页上进行 OCR 的结果相当好。经过一些调试后,发现以下代码在第281行对页面的裁剪图像运行了另一个 OCR 步骤,使用 tesseract
这是不幸的,因为:

  • 该函数已经拥有页面上的所有 LayoutElement
  • 使用 tesseract 进行的额外 OCR 操作可能会产生额外的处理时间
  • 对裁剪图像进行 tesseract 的结果不如在整个页面上进行的结果好。

unstructured/unstructured/partition/pdf_image/ocr.py
第256行至第289行 in daaf177
| | defsupplement_element_with_table_extraction( |
| | elements: List["LayoutElement"], |
| | image: PILImage, |
| | tables_agent: "UnstructuredTableTransformerModel", |
| | ocr_languages: str="eng", |
| | ocr_agent: OCRAgent=OCRAgent.get_instance(OCR_AGENT_TESSERACT), |
| | extracted_regions: Optional[List["TextRegion"]] =None, |
| | ) ->List["LayoutElement"]: |
| | """Supplement the existing layout with table extraction. Any Table elements |
| | that are extracted will have a metadata field "text_as_html" where |
| | the table's text content is rendered into an html string. |
| | """ |
| | |
| | table_elements= [elforelinelementsifel.type==ElementType.TABLE] |
| | forelementintable_elements: |
| | padding=env_config.TABLE_IMAGE_CROP_PAD |
| | padded_element=pad_element_bboxes(element, padding=padding) |
| | cropped_image=image.crop( |
| | ( |
| | padded_element.bbox.x1, |
| | padded_element.bbox.y1, |
| | padded_element.bbox.x2, |
| | padded_element.bbox.y2, |
| | ), |
| | ) |
| | table_tokens=get_table_tokens( |
| | table_element_image=cropped_image, |
| | ocr_languages=ocr_languages, |
| | ocr_agent=ocr_agent, |
| | extracted_regions=extracted_regions, |
| | table_element=padded_element, |
| | ) |
| | element.text_as_html=tables_agent.predict(cropped_image, ocr_tokens=table_tokens) |
| | returnelements |

重现

acciona.pdf 文件放入您的检出文件夹的 example-docs 文件夹中。

from unstructured.partition.pdf import partition_pdf

elements = partition_pdf(
    filename="./example-docs/acciona.pdf",
    strategy="hi_res",
    infer_table_structure=True,
)
tables = [el for el in elements if el.category == "Table"]
print(tables[0].metadata.text_as_html)

或者查看以下 Colab 笔记本:
https://colab.research.google.com/drive/1KLtF8A_sA3cZChSvqV1cqbR4pcxXTg45?usp=sharing
该问题也存在于 Unstructured API 中。请查看以下 Colab 笔记本:
https://colab.research.google.com/drive/1fqJtUo9OIvsbEeZTgoIrJ0NrvjcHLni4?usp=sharing

相关问题