TachiSnap
TachiSnap — Pixel Snapper for animation pixel artists. Rust + WebAssembly client-side tool for cleaning up AI-generated…
img2table is a table identification and extraction Python Library for PDF and images, based on OpenCV image processing
git clone https://github.com/xavctn/img2table.gitxavctn/img2tableimg2table is a simple, easy to use, table identification and extraction Python Library based on OpenCV image
processing that supports most common image file formats as well as PDF files.
Thanks to its design, it provides a practical and lighter alternative to Neural Networks based solutions, especially for usage on CPU.
The library can be installed via pip:
| Command | Description |
|---|---|
pip install img2table |
Standard installation, supporting Tesseract |
pip install img2table[paddle] |
For usage with Paddle OCR |
pip install img2table[easyocr] |
For usage with EasyOCR |
pip install img2table[doctr] |
For usage with docTR |
pip install img2table[surya] |
For usage with Surya OCR |
pip install img2table[rapidocr] |
For usage with RapidOCR |
pip install img2table[gcp] |
For usage with Google Vision OCR |
pip install img2table[aws] |
For usage with AWS Textract OCR |
pip install img2table[azure] |
For usage with Azure Cognitive Services OCR |
Images are instantiated as follows :
from img2table.document import Image
image = Image(src,
detect_rotation=False)
Parameters
src : str,pathlib.Path, bytes orio.BytesIO, required Image source detect_rotation : bool, optional, defaultFalseDetect and correct skew/rotation of the image
The implemented method to handle skewed/rotated images supports skew angles up to 45° and is based on the publication by Huang, 2020.
Setting thedetect_rotationparameter toTrue, image coordinates and bounding boxes returned by other methods might not correspond to the original image.
PDF files are instantiated as follows :
from img2table.document import PDF
pdf = PDF(src,
pages=[0, 2],
detect_rotation=False,
pdf_text_extraction=True)
Parameters
src : str,pathlib.Path, bytes orio.BytesIO, required PDF source pages : list, optional, defaultNoneList of PDF page indexes to be processed. If None, all pages are processed detect_rotation : bool, optional, defaultFalseDetect and correct skew/rotation of extracted images from the PDF pdf_text_extraction : bool, optional, defaultTrueExtract text from the PDF file for native PDFs
PDF pages are converted to images with a 200 DPI for table identification.
img2table provides an interface for several OCR services and tools in order to parse table content.
If possible (i.e for native PDF), PDF text will be extracted directly from the file and the OCR service/tool will not be called.
from img2table.ocr import TesseractOCR
ocr = TesseractOCR(n_threads=1,
lang="eng",
psm=11,
tessdata_dir="...")
Parameters
n_threads : int, optional, default1Number of concurrent threads used to call Tesseract lang : str, optional, default"eng"Lang parameter used in Tesseract for text extraction psm : int, optional, default11PSM parameter used in Tesseract, runtesseract --help-psmfor details tessdata_dir : str, optional, defaultNoneDirectory containing Tesseract traineddata files. If None, theTESSDATA_PREFIXenv variable is used.
Usage of Tesseract-OCR requires prior installation.
Check documentation for instructions.
For Windows users getting environment variable errors, you can check this tutorial
PaddleOCR is an open-source OCR based on Deep Learning models.
At first use, relevant languages models will be downloaded.
from img2table.ocr import PaddleOCR
ocr = PaddleOCR(lang="en",
kw={"kwarg": kw_value, ...})
Parameters
lang : str, optional, default"en"Lang parameter used in Paddle for text extraction, check documentation for available languages kw : dict, optional, defaultNoneDictionary containing additional keyword arguments passed to the PaddleOCR constructor.
EasyOCR is an open-source OCR based on Deep Learning models.
At first use, relevant languages models will be downloaded.
from img2table.ocr import EasyOCR
ocr = EasyOCR(lang=["en"],
kw={"kwarg": kw_value, ...})
Parameters
lang : list, optional, default["en"]Lang parameter used in EasyOCR for text extraction, check documentation for available languages kw : dict, optional, defaultNoneDictionary containing additional keyword arguments passed to the EasyOCRReaderconstructor.
docTR is an open-source OCR based on Deep Learning models.
from img2table.ocr import DocTR
ocr = DocTR(detect_language=False,
kw={"kwarg": kw_value, ...})
Parameters
detect_language : bool, optional, defaultFalseParameter indicating if language prediction is run on the document kw : dict, optional, defaultNoneDictionary containing additional keyword arguments passed to the docTRocr_predictormethod.
RapidOCR is an open-source OCR based on ONNX Runtime.
from img2table.ocr import RapidOCR
ocr = RapidOCR(params={"Rec.lang_type": ..., "kwarg": kw_value, ...})
Parameters
params : dict, optional, defaultNoneDictionary containing configuration values passed to the RapidOCR constructor. IfRec.lang_typeis not provided, English is used by default.
Surya is an open-source OCR based on Deep Learning models.
At first use, relevant models will be downloaded.
from img2table.ocr import SuryaOCR ocr = SuryaOCR(langs=["en"])
Parameters
langs : list, optional, default["en"]Lang parameter used in Surya OCR for text extraction
Authentication to GCP can be done by setting the standard GOOGLE_APPLICATION_CREDENTIALS environment variable.
If this variable is missing, an API key should be provided via the api_key parameter.
from img2table.ocr import VisionOCR ocr = VisionOCR(api_key="api_key", timeout=15)
Parameters
api_key : str, optional, defaultNoneGoogle Vision API key timeout : int, optional, default15API requests timeout, in seconds
When using AWS Textract, the DetectDocumentText API is exclusively called.
Authentication to AWS can be done by passing credentials to the TextractOCR class.
If credentials are not provided, authentication is done using environment variables or configuration files.
Check boto3 documentation for more details.
from img2table.ocr import TextractOCR
ocr = TextractOCR(aws_access_key_id="***",
aws_secret_access_key="***",
aws_session_token="***",
region="eu-west-1")
Parameters
aws_access_key_id : str, optional, defaultNoneAWS access key id aws_secret_access_key : str, optional, defaultNoneAWS secret access key aws_session_token : str, optional, defaultNoneAWS temporary session token region : str, optional, defaultNoneAWS server region
from img2table.ocr import AzureOCR
ocr = AzureOCR(endpoint="abc.azure.com",
subscription_key="***")
Parameters
endpoint : str, optional, defaultNoneAzure Cognitive Services endpoint. If None, inferred from theCOMPUTER_VISION_ENDPOINTenvironment variable. subscription_key : str, optional, defaultNoneAzure Cognitive Services subscription key. If None, inferred from theCOMPUTER_VISION_SUBSCRIPTION_KEYenvironment variable.
Multiple tables can be extracted at once from a PDF page/ an image using the extract_tables method of a document.
from img2table.ocr import TesseractOCR
from img2table.document import Image
# Instantiation of OCR
ocr = TesseractOCR()
# Instantiation of document, either an image or a PDF
doc = Image(src)
# Table extraction
extracted_tables = doc.extract_tables(ocr=ocr,
implicit_rows=False,
implicit_columns=False,
borderless_tables=False,
min_confidence=50,
max_workers=1)
Parameters
ocr : OCRInstance, optional, defaultNoneOCR instance used to parse document text. If None, cells content will not be extracted implicit_rows : bool, optional, defaultFalseBoolean indicating if implicit rows should be identified - check related example implicit_columns : bool, optional, defaultFalseBoolean indicating if implicit columns should be identified - check related example borderless_tables : bool, optional, defaultFalseBoolean indicating if borderless tables are extracted on top of bordered tables. min_confidence : int, optional, default50Minimum confidence level from OCR in order to process text, from 0 (worst) to 99 (best) max_workers : int, optional, default1Number of concurrent workers used for table extraction. Mainly useful for multi-page PDFs.
The ExtractedTable class is used to model extracted tables from documents.
Attributes
bbox :BBoxTable bounding box, with absolute coordinates and normalized coordinates available viabbox.relativetitle : str Extracted title of the table content :OrderedDictDict with row indexes as keys and list ofTableCellobjects as values df :pd.DataFramePandas DataFrame representation of the table html :strHTML representation of the table
In order to access bounding boxes at the cell level, you can use the following code snippet :
for id_row, row in enumerate(table.content.values()):
for id_col, cell in enumerate(row):
x1 = cell.bbox.x1
y1 = cell.bbox.y1
x2 = cell.bbox.x2
y2 = cell.bbox.y2
value = cell.value
Normalized coordinates (in percentage of image height / width) are also available on the same object:
relative_bbox = cell.bbox.relative x1 = relative_bbox.x1 y1 = relative_bbox.y1 x2 = relative_bbox.x2 y2 = relative_bbox.y2
extract_tables method from the Image class returns a list of ExtractedTable objects.
output = [ExtractedTable(...), ExtractedTable(...), ...]
extract_tables method from the PDF class returns an OrderedDict object with page indexes as keys and lists of ExtractedTable objects.
output = {
0: [ExtractedTable(...), ...],
1: [],
...
last_page: [ExtractedTable(...), ...]
}
Tables extracted from a document can be exported to a xlsx file. The resulting file is composed of one worksheet per extracted table.
Method arguments are mostly common with the extract_tables method.
from img2table.ocr import TesseractOCR
from img2table.document import Image
# Instantiation of OCR
ocr = TesseractOCR()
# Instantiation of document, either an image or a PDF
doc = Image(src)
# Extraction of tables and creation of a xlsx file containing tables
doc.to_xlsx(dest=dest,
ocr=ocr,
implicit_rows=False,
implicit_columns=False,
borderless_tables=False,
min_confidence=50,
max_workers=1)
Parameters
dest : str,pathlib.Pathorio.BytesIO, required Destination for xlsx file ocr : OCRInstance, optional, defaultNoneOCR instance used to parse document text. If None, cells content will not be extracted implicit_rows : bool, optional, defaultFalseBoolean indicating if implicit rows should be identified - check related example implicit_columns : bool, optional, defaultFalseBoolean indicating if implicit columns should be identified - check related example borderless_tables : bool, optional, defaultFalseBoolean indicating if borderless tables are extracted. min_confidence : int, optional, default50Minimum confidence level from OCR in order to process text, from 0 (worst) to 99 (best) max_workers : int, optional, default1Number of concurrent workers used for table extraction. Mainly useful for multi-page PDFs.Returns
If aio.BytesIObuffer is passed as dest arg, it is returned containing xlsx data
Several Jupyter notebooks with examples are available :
implicit_rows/implicit_columns of the extract_tables method
more like this
search projects, people, and tags