Лучшие 7 библиотек Python OCR для извлечения текста из изображений

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

В этой статье рассматриваются семь лучших библиотек OCR в Python, выделяя их преимущества, уникальные особенности и примеры кода, чтобы помочь вам начать.

1. Tesseract OCR (pytesseract)

Tesseract безусловно является самой популярной и широко используемой библиотекой OCR в экосистеме Python. Изначально разработанный HP и в настоящее время поддерживаемый Google, Tesseract обеспечивает высококачественные возможности OCR для более чем 100 языков.

Основные функции:

  • Открытый и бесплатный в использовании.
  • Поддерживает несколько языков, включая нелатинские алфавиты.
  • Распознает текст на изображениях, отсканированных документах и PDF-файлах.
  • Может быть настроен с помощью пользовательских обучающих данных для специализированных случаев использования.
  • Хорошо работает с инструментами предварительной обработки, такими как OpenCV, для улучшения точности.

Для установки Tesseract OCR на Linux выполните следующие шаги в зависимости от вашего дистрибутива:

sudo apt install tesseract-ocr     [On Debian, Ubuntu and Mint]
sudo yum install tesseract         [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo emerge -a sys-apps/tesseract  [On Gentoo Linux]
sudo apk add tesseract             [On Alpine Linux]
sudo pacman -S tesseract           [On Arch Linux]
sudo zypper install tesseract      [On OpenSUSE]    
sudo pkg install tesseract         [On FreeBSD]

После установки Tesseract, если вы хотите использовать его с Python, вам нужно установить пакет pytesseract, используя менеджер пакетов pip.

pip3 install pytesseract
OR
pip install pytesseract

Вот пример кода на Python для использования Tesseract OCR с библиотекой pytesseract для извлечения текста из изображения.

import pytesseract
from PIL import Image

# Load an image
img = Image.open("image_sample.png")

# Use Tesseract to extract text
text = pytesseract.image_to_string(img)

# Print the extracted text
print(text)

2. EasyOCR

EasyOCR – еще одна отличная библиотека Python OCR, поддерживающая более 80 языков и простая в использовании для начинающих. Она построена на технологиях глубокого обучения, что делает ее отличным выбором для тех, кто хочет использовать современные технологии OCR.

Основные особенности:

  • Высокая точность с моделями глубокого обучения.
  • Поддерживает широкий спектр языков.
  • Может обнаруживать текст на вертикальных и многоязычных изображениях.
  • Простой и понятный API.

Для установки EasyOCR на Linux вы можете использовать следующую команду pip в зависимости от вашего дистрибутива.

pip3 install easyocr
OR
pip install easyocr

После завершения установки вы можете использовать EasyOCR для извлечения текста из изображения.

import easyocr

# Initialize the OCR reader
reader = easyocr.Reader(['en'])

# Extract text from an image
result = reader.readtext('image_sample.png')

# Print the extracted text
for detection in result:
    print(detection[1])

3. OCRopus

OCRopus – это система оптического распознавания символов с открытым исходным кодом, разработанная Google. Хотя она в основном используется для исторических документов и книг, OCRopus также может применяться к широкому спектру задач по извлечению текста.

Основные функции:

  • Специализируется на анализе макета документа и извлечении текста.
  • Построен с учетом модульности, обеспечивая легкую настройку.
  • Может работать с многостраничными документами и большими наборами данных.

Вот пример кода на Python для извлечения текста из изображения.

import subprocess

# Use OCRopus to process an image
subprocess.run(['ocropus', 'identify', 'image_sample.png'])

4. PyOCR

PyOCR – это оболочка Python для нескольких OCR-движков, включая Tesseract и CuneiForm. Он предоставляет простой интерфейс для интеграции функций OCR в приложения Python.

Основные функции:

  • Может взаимодействовать с несколькими OCR-движками.
  • Предоставляет простой API для извлечения текста.
  • Может быть объединен с библиотеками предварительной обработки изображений для улучшения результатов.

PyOCR требует Tesseract (OCR-движок) и Pillow (библиотека обработки изображений). Вы можете установить их, используя следующие команды:

sudo apt install tesseract-ocr     [On Debian, Ubuntu and Mint]
sudo yum install tesseract         [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo emerge -a sys-apps/tesseract  [On Gentoo Linux]
sudo apk add tesseract             [On Alpine Linux]
sudo pacman -S tesseract           [On Arch Linux]
sudo zypper install tesseract      [On OpenSUSE]    
sudo pkg install tesseract         [On FreeBSD]

Теперь вы можете установить библиотеки pyocr и pillow, используя pip:

pip3 install pyocr pillow
OR
pip install pyocr pillow

Вот пример на Python, который извлекает текст из изображения с использованием PyOCR и Tesseract:

import pyocr
from PIL import Image

# Choose the OCR tool (Tesseract or CuneiForm)
tool = pyocr.get_available_tools()[0]

# Load the image
img = Image.open('image_sample.png')

# Extract text from the image
text = tool.image_to_string(img)

# Print the extracted text
print(text)

5. PaddleOCR

PaddleOCR – это библиотека OCR, разработанная PaddlePaddle, фреймворком глубокого обучения. Она поддерживает более 80 языков и обеспечивает высокую точность благодаря использованию моделей глубокого обучения.

Основные функции:

  • Высокая производительность, особенно для изображений с сложными фонами.
  • Поддержка обнаружения текста, распознавания и анализа макета.
  • Включает предварительно обученные модели для различных языков.

Чтобы установить PaddleOCR в Linux, используйте:

pip3 install paddlepaddle paddleocr
OR
pip install paddlepaddle paddleocr

Вот пример на Python, который извлекает текст из изображения с использованием библиотеки paddleocr:

from paddleocr import PaddleOCR

# Initialize the OCR
ocr = PaddleOCR(use_angle_cls=True, lang='en')

# Perform OCR on an image
result = ocr.ocr('image_sample.png', cls=True)

# Print the extracted text
for line in result[0]:
    print(line[1])

6. Kraken

Kraken – это высокопроизводительная библиотека OCR, специально разработанная для работы с историческим и многоязычным текстом. Она построена на основе OCRopus и предоставляет дополнительные функции для сложных макетов и извлечения текста.

Основные функции:

  • Наилучшим образом подходит для старых книг и многоязычного OCR.
  • Обрабатывает сложные текстовые макеты и исторические шрифты.
  • Использует машинное обучение для повышения точности распознавания.

Для установки Kraken в Linux используйте:

pip3 install kraken
OR
pip install kraken

Вот пример на Python, извлекающий текст из изображения с использованием библиотеки kraken:

import kraken

# Load the model and recognize text
text = kraken.binarize("image_sample.png")

# Print the recognized text
print(text)

7. Textract (AWS)

AWS Textract – это облачный сервис OCR от Amazon, который может анализировать документы и формы, извлекая текст с высокой точностью. Он интегрируется без проблем с другими сервисами AWS.

Основные функции:

  • Облачное OCR с масштабируемыми решениями.
  • Поддержка анализа структуры документов, включая таблицы и формы.
  • Интеграция с сервисами AWS для дальнейшей обработки данных.

Для установки Textract в Linux используйте:

pip3 install boto3
OR
pip install boto3

Вот пример Python-скрипта, использующий AWS Textract для извлечения текста из документа (например, отсканированного PDF или изображения).

import boto3

# Initialize a Textract client
client = boto3.client('textract')

# Path to the image or PDF file you want to analyze
file_path = 'path_to_your_file.png'  # Replace with your file path

# Open the file in binary mode
with open(file_path, 'rb') as document:
    # Call Textract to analyze the document
    response = client.detect_document_text(Document={'Bytes': document.read()})

# Print the extracted text
for item in response['Blocks']:
    if item['BlockType'] == 'LINE':
        print(item['Text'])
Заключение

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

Для начинающих Tesseract и EasyOCR отлично подходят как отправная точка благодаря своей простоте использования и широкому использованию. Однако для более продвинутых или специализированных задач библиотеки, такие как PaddleOCR, OCRopus и Kraken, предлагают большую гибкость и точность.

Source:
https://www.tecmint.com/python-text-extraction-from-images/