画像からテキストを抽出するためのトップ7のPython OCRライブラリ

光学的文字認識OCR)は、画像、スキャンされた文書、さらには手書きのメモから読み取れるテキストを抽出する技術です。Pythonでは、OCRツールは年々進化し、最新バージョンではこれらのライブラリがさらに強力で効率的なソリューションを提供しています。

この記事では、Pythonでトップの7つのOCRライブラリを取り上げ、それぞれの強み、ユニークな機能、およびコード例を紹介し、始めるのに役立ちます。

1. Tesseract OCR(pytesseract)

Tesseractは、間違いなくPythonエコシステムで最も人気で広く使用されているOCRライブラリです。もともとはHPによって開発され、現在はGoogleが管理しており、Tesseractは100以上の言語に対応した高品質のOCR機能を提供しています。

主な特徴:

  • オープンソースで無料利用可能。
  • 非ラテン系アルファベットを含む複数の言語に対応。
  • 画像、スキャンされた文書、PDF内のテキストを認識。
  • 特殊なユースケースにカスタムトレーニングデータを使用してカスタマイズ可能。
  • OpenCVなどの前処理ツールと組み合わせて精度を向上させる。

Linux に Tesseract OCR をインストールするには、ディストリビューションに応じて 以下の手順に従います。

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

以下は、画像からテキストを抽出するために pytesseract ライブラリを使用した Tesseract OCR を使用するための Python コードの例です。

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 は、80以上の言語をサポートし、初心者向けに使いやすい優れた Python OCR ライブラリです。深層学習技術に基づいて構築されており、現代のOCR技術を活用したい人には優れた選択肢です。

主な特徴:

  • 深層学習モデルによる高い精度。
  • 幅広い言語のサポート。
  • 縦書きや多言語画像でのテキスト検出が可能。
  • シンプルでわかりやすいAPI。

Linux に EasyOCR をインストールするには、ディストリビューションに基づいて以下の 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によって開発されたオープンソースのOCRシステムです。主に歴史的な文書や書籍に使用されますが、OCRopusはさまざまなテキスト抽出タスクにも適用できます。

主な特徴:

  • 文書のレイアウト分析とテキスト抽出に特化しています。
  • モジュール性を重視して構築されており、簡単にカスタマイズできます。
  • 複数ページのドキュメントや大規模なデータセットとも連携できます。

以下は画像からテキストを抽出するためのPythonコードの例です。

import subprocess

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

4. PyOCR

PyOCRは、TesseractCuneiFormを含む複数のOCRエンジンをラップするPythonラッパーです。PythonアプリケーションにOCR機能を統合するためのシンプルなインターフェースを提供します。

主な特徴:

  • 複数の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]

今、pyocrpillowライブラリをpipを使用してインストールできます。

pip3 install pyocr pillow
OR
pip install pyocr pillow

以下は、PyOCRTesseractを使用して画像からテキストを抽出するPythonの例です。

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は、深層学習フレームワークであるPaddlePaddleによって開発されたOCRライブラリです。80以上の言語をサポートし、深層学習モデルを使用することで最先端の精度を提供します。

主な特徴:

  • 複雑な背景を持つ画像に特に適した高いパフォーマンス。
  • テキストの検出、認識、およびレイアウト解析をサポート。
  • さまざまな言語向けの事前トレーニング済みモデルを含む。

PaddleOCRをLinuxにインストールするには、次のコマンドを使用します。

pip3 install paddlepaddle paddleocr
OR
pip install paddlepaddle paddleocr

以下は、paddleocrライブラリを使用して画像からテキストを抽出するPythonの例です。

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に最適。
  • 複雑なテキストレイアウトや歴史的フォントを処理します。
  • 機械学習を使用して認識精度を向上させます。

LinuxにKrakenをインストールするには、次のコマンドを使用します:

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は、AmazonのクラウドベースのOCRサービスであり、高い精度で文書やフォームを解析しテキストを抽出できます。他のAWSサービスとシームレスに統合されています。

主な機能:

  • スケーラブルなソリューションを備えたクラウドベースのOCR。
  • 表やフォームを含む文書構造の分析をサポート。
  • AWSサービスとの統合による追加のデータ処理。

LinuxにTextractをインストールするには、次のコマンドを使用します:

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'])
結論

Pythonで適切なOCRライブラリを選択することは、特定のユースケース、言語要件、および処理する文書の複雑さに依存します。歴史的文書、多言語テキスト、または単純なスキャンされたPDFを処理している場合でも、これらのライブラリはテキスト抽出の強力なツールを提供します。

初心者には、TesseractEasyOCRは使用しやすさと広く採用されている点から優れた出発点です。しかし、より高度または特殊なタスクには、PaddleOCROCRopusKrakenなどのライブラリがより柔軟性と精度を提供しています。

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