【Python】画像から文字を読み取る方法|OCR(Tesseract)で自動テキスト化

【Python】画像から文字を読み取る方法|OCR(Tesseract)で自動テキスト化 Python

紙の書類やスクリーンショット、写真に含まれる文字情報を自動で抽出できたら便利だと思いませんか?PythonとOCRエンジン「Tesseract」を使えば、画像から文字を自動で読み取り、テキストとして利用することが可能です。

この記事では、Tesseract OCRをPythonから操作して画像をテキスト化する方法を紹介します。

Tesseract OCRとは?

TesseractはGoogleが開発している高性能なオープンソースのOCR(光学式文字認識)エンジンです。日本語を含む多言語対応、手書き以外の印刷文字に強く、精度も高いため、業務利用にも耐えます。

インストール手順

1. Tesseract本体のインストール

  • Windows:以下のURLからインストーラを入手
    Tesseract for Windows(日本語対応済)
  • macOS:brew install tesseract
  • Linux:sudo apt install tesseract-ocr

2. Pythonライブラリのインストール

pip install pytesseract Pillow

基本スクリプト:画像から文字を抽出

from PIL import Image
import pytesseract

# Tesseract実行ファイルのパス(Windows環境など)
# pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

# 対象の画像を開く
img = Image.open("sample.png")

# テキストを抽出(日本語の場合はlang='jpn')
text = pytesseract.image_to_string(img, lang='jpn')

print("抽出結果:")
print(text)

日本語対応のための言語データ追加(必要な場合)

日本語を扱うには、Tesseractにjpn.traineddataが入っている必要があります。インストール済みでもうまくいかない場合は以下で手動追加可能です。

https://github.com/tesseract-ocr/tessdata/blob/main/jpn.traineddata

ファイルを tessdata ディレクトリに置き、環境変数 TESSDATA_PREFIX を指定します。

応用:複数ファイルを一括OCR処理

import os

folder = "./images"
for file in os.listdir(folder):
    if file.endswith(".png") or file.endswith(".jpg"):
        img = Image.open(os.path.join(folder, file))
        text = pytesseract.image_to_string(img, lang='jpn')
        print(f"[{file}] のテキスト:\n{text}\n---")

注意点と補正テクニック

  • 解像度が低い画像や手書き文字は精度が下がります
  • ノイズ除去やグレースケール化など、前処理(OpenCVなど)を行うと精度向上が期待できます
  • 文字化けする場合は画像の拡大や言語指定を見直しましょう

まとめ

PythonとTesseract OCRを組み合わせることで、画像からの文字抽出を自動化できます。名刺情報の読み取り、紙帳票の電子化、スクリーンショットの文字解析など、あらゆる場面で活用できる強力なツールです。

より精度を高めたい場合は、OpenCVによる前処理やLayout-aware OCR(例:EasyOCR、Document AIなど)への発展も検討してみてください。