Извлечение таблиц из изображений может быть утомительной и трудоемкой задачей, особенно если вам нужно обработать большое количество изображений. Однако с помощью правильных инструментов и методов вы можете автоматизировать этот процесс и быстро и легко извлекать таблицы из изображений.

В этой статье мы рассмотрим, как извлекать таблицы из изображений с помощью Python. Мы рассмотрим библиотеку (img2table), которую можно использовать для идентификации и извлечения таблиц из изображений, а также пример кода и пояснения. Независимо от того, работаете ли вы с отсканированными документами, фотографиями или другими типами изображений, эта статья предоставит вам инструменты и знания, необходимые для эффективного и точного извлечения таблиц.

Что такое img2table?

Img2Table — это простая и удобная библиотека Python для извлечения и идентификации таблиц, основанная на обработке изображений OpenCV и поддерживающая файлы PDF в дополнение к большинству популярных форматов файлов изображений.

Благодаря своему дизайну он предлагает полезную и менее тяжелую альтернативу решениям на основе нейронных сетей, особенно для использования ЦП.

Он поддерживает следующие форматы файлов:

  • Файлы JPEG — .jpeg,.jpg, *.jpe
  • Портативная сетевая графика — *.png
  • Файлы JPEG 2000 — *.jp2
  • Растровые изображения Windows — .bmp,.dib
  • WebP — *.webp
  • Формат переносимого изображения — .pbm,.pgm, .ppm.pxm, *.pnm
  • Файлы PFM — *.pfm
  • Файлы изображений OpenEXR — *.exr

img2table Возможности

  • Ограничительные рамки на уровне ячейки таблицы и идентификация таблицы для изображений и PDF-файлов.
  • Работа со сложными структурами таблиц, такими как объединенные ячейки.
  • Извлечение заголовков таблиц.
  • Извлечение содержимого таблицы с поддержкой инструментов и сервисов OCR.
  • Возвращается представление Pandas DataFrame и простой объект, представляющий извлеченные таблицы.
  • Сохраняйте исходную структуру извлеченных таблиц, экспортируя их в файл Excel.

Пакет прост (по сравнению с решениями для глубокого обучения) и практически не требует обучения. Однако все еще существуют некоторые ограничения, поскольку более сложная идентификация таблиц без полей еще не поддерживается и может потребовать подходов на основе CNN.

Выполнение

Монтаж

Как и любой другой пакет Python, img2table можно установить через pip .

pip install img2table

Работа с изображениями

from img2table.document import Image
image = Image(src,dpi=200, detect_rotation=False)

Создаем экземпляр Image , где src — путь к изображению (обязательно), dpi используется для адаптации параметров алгоритма OpenCV, необязателен с типом int (по умолчанию 200 >), detect_rotation обнаруживает и исправляет перекос или поворот изображения, это логический тип и по умолчанию False.

Давайте рассмотрим пример.

from img2table.document import Image

# Instantiation of the image
img = Image(src="image.jpg")

# Table identification
imgage_tables = img.extract_tables()

# Result of table identification
imgage_tables

#output
[ExtractedTable(title=None, bbox=(10, 8, 745, 314),shape=(6, 3)),
 ExtractedTable(title=None, bbox=(936, 9, 1129, 111),shape=(2, 2))]

Работа с PDF

from img2table.document import PDF
pdf = PDF(src, dpi=200, pages=[0, 2])

Это так же, как мы работаем с изображениями, только у нас есть новый параметр pages, который представляет собой список индексов страниц PDF для обработки. Но если в списке pages нет указанных индексов, обрабатываются все страницы.

Работа с распознаванием текста

Для анализа содержимого таблиц img2table предлагает интерфейс для различных инструментов и сервисов OCR.

from img2table.ocr import TesseractOCR
ocr = TesseractOCR(n_threads=1, lang="eng", tessdata_dir="...")

Где n_threads — это количество параллельных потоков, используемых для вызова Tesseract с типом int, и значение по умолчанию — 1, lang используется в Tesseract для извлечения текста, и это необязательно, наконец, tessdata_dir — это каталог, содержащий файлы обученных данных Tesseract.

Примечание.Использование Tesseract-OCR требует предварительной установки.

Давайте посмотрим на пример.

from img2table.document import PDF
from img2table.ocr import TesseractOCR

# Instantiation of the pdf
pdf = PDF(src="tablesfile.pdf")

# Instantiation of the OCR, Tesseract, which requires prior installation
ocr = TesseractOCR(lang="eng")

# Table identification and extraction
pdf_tables = pdf.extract_tables(ocr=ocr)

# We can also create an excel file with the tables
pdf.to_xlsx('tables.xlsx', ocr=ocr)

Извлечение нескольких таблиц

Метод документа extract_tables позволяет одновременно извлекать несколько таблиц из страницы PDF или изображения.

from img2table.ocr import TesseractOCR
from img2table.document import Image

# Instantiation of OCR
ocr = TesseractOCR(n_threads=1, lang="eng")

# Instantiation of document, either an image or a PDF
doc = Image(src, dpi=200)

# Table extraction
extracted_tables = doc.extract_tables(ocr=ocr,
                                      implicit_rows=True,
                                      borderless_tables=False,
                                      min_confidence=50)

Большинство параметров обсуждались ранее при работе с изображениями и PDF, но есть и новые параметры. ocr — это экземпляр, используемый для анализа текста документа, implicit_rows — это логический тип, указывающий, следует ли идентифицировать неявные строки, borderless_tables указывает, извлекаются ли таблицы без полей, и, наконец, min_confidence — это минимальный уровень достоверности от OCR для обработки текста с 0 ( худшее) до 99 (лучшее).

Заключение

Библиотека OpenCV-python и OpenCV используются для всей обработки изображений. В основе алгоритма лежит преобразование Хафа, которое распознает линии на изображении. Это позволяет нам распознавать горизонтальные и вертикальные линии изображения. В библиотеке на самом деле не так много всего, потому что целью было сделать ее как можно более простой, чтобы избежать любых потенциальных осложнений, которые могут возникнуть при использовании других подходов.

Посмотреть документацию проекта на GitHub.

Подключаемся в Твиттере и в LinkedIn. Вы также можете подписаться на мой канал YouTube.

Удачного программирования!