PythonでOCR(文字認識)を実装する方法|Tesseract・OpenCV・EasyOCRを徹底解説

Pythonを使えば、画像やPDFに含まれる文字を自動的に読み取る「OCR(光学文字認識)」を比較的簡単に実装できます。
OCRを活用すると、紙の書類をテキスト化したり、画像内の文字をデータとして取得したり、領収書や名刺の情報を自動入力したりできます。
この記事では、PythonでOCR(文字認識)を実装する方法について、初心者にもわかりやすく解説します。Tesseract OCR、OpenCV、EasyOCRなどの代表的な方法や、実際のPythonコードも紹介します。
PythonのOCRとは?
OCRとは、Optical Character Recognition(光学文字認識)の略です。
画像やPDFなどに含まれている文字をコンピューターが認識し、編集可能なテキストデータに変換する技術です。
例えば、次のような画像があるとします。
Python入門講座
テックジム
OCRを利用すると、この画像から次のような文字列を自動的に取得できます。
Python入門講座
テックジム
つまりOCRは、「画像 → 文字データ」への変換を自動化する技術と考えるとわかりやすいでしょう。
PythonでOCRを実装するメリット
PythonでOCRを実装するメリットには、次のようなものがあります。
- OCR処理を自動化できる
- 大量の画像を一括処理できる
- 画像処理と組み合わせられる
- AI・機械学習と組み合わせやすい
- WebアプリにOCR機能を追加できる
- 業務システムに組み込める
特にPythonは、画像処理ライブラリやAI関連ライブラリが豊富なため、OCRとの相性が良いプログラミング言語です。
PythonでOCRを実装する代表的な方法
PythonからOCRを利用する方法はいくつかあります。代表的なのは以下の3つです。
| 方法 | 特徴 | 難易度 |
|---|---|---|
| Tesseract OCR | 定番のOCRエンジン | ★★☆ |
| EasyOCR | Pythonから簡単に利用できる | ★☆☆ |
| クラウドOCR API | 高精度なOCRを利用しやすい | ★★☆ |
さらに、OpenCVを組み合わせることで、OCRの認識精度を高められる場合があります。
Tesseract OCRとは?
Tesseract OCRは、オープンソースのOCRエンジンです。
画像から文字を認識するための代表的なOCRエンジンとして広く利用されています。
Pythonでは、pytesseractというライブラリを利用することでTesseract OCRを呼び出せます。
構成としては、次のようになります。
Python
↓
pytesseract
↓
Tesseract OCR
↓
認識結果
Tesseract OCRをPythonでインストールする
まずPython側のライブラリをインストールします。
pip install pytesseract pillow
画像処理にOpenCVを利用する場合は、次のコマンドも実行します。
pip install opencv-python
ただし、pytesseractだけをインストールしてもTesseract本体がインストールされるわけではありません。
OSにTesseract OCR本体をインストールする必要があります。
PythonでTesseract OCRを実装する
基本的なコードは次のようになります。
import pytesseract
from PIL import Image
image = Image.open("sample.png")
text = pytesseract.image_to_string(
image,
lang="jpn"
)
print(text)
画像ファイルとしてsample.pngを読み込み、OCRによって文字を認識しています。
認識結果はtextに格納されます。
日本語OCRを利用する場合
日本語を認識するには、日本語用の言語データが必要です。
Tesseractでは、lang="jpn"を指定します。
text = pytesseract.image_to_string(
image,
lang="jpn"
)
英語と日本語を同時に認識したい場合は、次のように指定します。
text = pytesseract.image_to_string(
image,
lang="jpn+eng"
)
OpenCVと組み合わせてOCRの精度を高める
OCRでは、画像をそのまま読み込むよりも、事前に画像処理を行ったほうが認識しやすくなるケースがあります。
例えば、次のような処理です。
- グレースケール化
- 二値化
- ノイズ除去
- リサイズ
- 傾き補正
- コントラスト調整
PythonではOpenCVを利用できます。
グレースケール化する
カラー画像をグレースケール画像に変換します。
import cv2
image = cv2.imread("sample.png")
gray = cv2.cvtColor(
image,
cv2.COLOR_BGR2GRAY
)
cv2.imwrite("gray.png", gray)
カラー情報をなくすことで、文字と背景を区別しやすくなる場合があります。
二値化してOCRする
さらに画像を白黒に変換します。
import cv2
import pytesseract
image = cv2.imread("sample.png")
gray = cv2.cvtColor(
image,
cv2.COLOR_BGR2GRAY
)
_, binary = cv2.threshold(
gray,
0,
255,
cv2.THRESH_BINARY + cv2.THRESH_OTSU
)
text = pytesseract.image_to_string(
binary,
lang="jpn"
)
print(text)
cv2.THRESH_OTSUを使うことで、画像の状態に応じてしきい値を自動的に決定できます。
EasyOCRを使ってPythonでOCRする
より簡単にOCRを試したい場合は、EasyOCRも選択肢になります。
EasyOCRは、Pythonから利用できるOCRライブラリです。
インストールします。
pip install easyocr
基本的な使い方は次の通りです。
import easyocr
reader = easyocr.Reader(["ja", "en"])
result = reader.readtext("sample.png")
for detection in result:
print(detection[1])
detection[1]には認識された文字列が入ります。
EasyOCRで認識結果の位置も取得できる
EasyOCRの便利な点の一つが、文字だけでなく、その文字が画像のどこにあるのかも取得できることです。
import easyocr
reader = easyocr.Reader(["ja", "en"])
result = reader.readtext("sample.png")
for box, text, confidence in result:
print("文字:", text)
print("信頼度:", confidence)
認識文字と信頼度を確認できます。
帳票などから文字を読み取る場合には、文字の位置情報も重要になります。
OCRの認識精度を高めるポイント
OCRは「画像を渡せば必ず正確に文字を読み取れる」という技術ではありません。
画像の状態によって認識精度が大きく変わります。
1. 解像度を高くする
小さな文字はOCRで認識しにくくなります。
可能であれば、文字が十分に大きく写っている画像を使用します。
2. ノイズを減らす
画像に汚れやノイズがあると文字認識の精度が低下することがあります。
OpenCVによるノイズ除去が有効な場合があります。
3. 文字と背景のコントラストを高くする
白い背景に黒い文字のように、文字と背景が明確に分かれている画像は認識しやすくなります。
4. 傾きを補正する
斜めに撮影された書類では、文字認識が難しくなる場合があります。
5. 不要な部分を切り取る
画像全体をOCRするのではなく、文字が存在する領域だけを切り出すことで精度が改善することがあります。
PDFをPythonでOCRする
OCRは画像だけでなく、PDFの文字認識にも利用できます。
例えば、次のような処理を行います。
PDF
↓
画像化
↓
画像処理
↓
OCR
↓
テキスト
PDFのページを画像として取り出し、それぞれのページにOCRを実行する方法です。
PDFが「画像PDF」の場合、通常のテキスト抽出では文字を取得できないため、OCRが有効です。
OCRを業務で活用する例
領収書の読み取り
領収書を撮影して、会社名、日付、金額などを自動取得できます。
名刺のデータ化
名刺の画像から、会社名、氏名、電話番号、メールアドレス、住所などを読み取ってデータベースに登録することも可能です。
書類のデジタル化
紙の書類をスキャンし、OCRでテキスト化することで検索可能なデータにできます。
画像内の文字検索
画像から文字を取得してデータベースに保存すれば、画像内の文字を検索するシステムも構築できます。
Python OCRの処理フロー
一般的なOCRシステムでは、次のような処理を行います。
画像を読み込む
↓
画像を前処理する
↓
OCRエンジンに渡す
↓
文字を認識する
↓
認識結果を取得する
↓
必要に応じてデータを整形する
↓
データベースなどに保存
単純なOCRなら数行のPythonコードで実装できますが、実際の業務システムでは画像前処理と認識結果の後処理が重要になります。
TesseractとEasyOCRはどちらを使うべき?
それぞれに特徴があります。
| 比較項目 | Tesseract | EasyOCR |
|---|---|---|
| オープンソース | ○ | ○ |
| Pythonから利用 | ○ | ○ |
| 日本語対応 | ○ | ○ |
| 導入の簡単さ | △ | ○ |
| 画像中の文字位置 | △ | ○ |
| カスタマイズ | ○ | ○ |
| 初心者向け | ○ | ◎ |
まずPythonでOCRを試したいならEasyOCR、定番のOCRエンジンを使いたいならTesseractという選び方ができます。
PythonでOCRを実装するときの注意点
OCRでは、認識結果が必ず正しいとは限りません。
例えば、次のように似た形の文字を間違えることがあります。
0 → O
1 → I
5 → S
日本語では、次のような誤認識が発生する可能性があります。
ソ → ン
シ → ツ
そのため、重要なデータをOCRで取得する場合は、認識結果をそのまま信用せず、チェック処理を入れることが重要です。
例えば金額なら、次のようなバリデーションを追加できます。
if price.isdigit():
print("金額として利用できます")
else:
print("確認が必要です")
AIを使ったOCRという選択肢
近年は、従来型のOCRエンジンだけでなく、AIを利用した画像認識・文字認識サービスも増えています。
特に次のような用途では、AIを利用したOCRサービスが有力な選択肢になります。
- 手書き文字
- 複雑な帳票
- 表形式の書類
- 領収書
- 請求書
- 複数レイアウトの文書
PythonからAPIを呼び出せるサービスも多いため、次のようなシステムを構築できます。
Python
↓
画像アップロード
↓
AI OCR API
↓
文字・構造化データ
↓
Pythonで処理
Python OCRでよくある質問
PythonだけでOCRはできますか?
はい。EasyOCRなどのライブラリを利用すれば、PythonからOCRを実装できます。
ただし、Tesseractを利用する場合はPythonライブラリとは別にOCRエンジンのインストールが必要です。
日本語のOCRはできますか?
できます。TesseractやEasyOCRなど、日本語に対応したOCRライブラリ・エンジンがあります。
ただし、画像の品質やフォント、文字サイズなどによって認識精度は変わります。
OCRは無料で使えますか?
オープンソースのOCRエンジンやライブラリを利用すれば、基本的に無料でOCRシステムを構築できます。
一方、クラウド型OCRサービスでは、利用量に応じて料金が発生する場合があります。
手書き文字も認識できますか?
手書き文字にも対応するOCR技術はありますが、印刷された文字と比較すると認識が難しくなります。
手書き文字を高精度に認識したい場合は、AIを利用したOCRサービスなども検討するとよいでしょう。
まとめ:PythonならOCRを比較的簡単に実装できる
Pythonでは、TesseractやEasyOCRなどのライブラリ・OCRエンジンを利用することで、画像から文字を自動的に読み取るシステムを構築できます。
特に基本的なOCRであれば、次のようなコードから始められます。
import easyocr
reader = easyocr.Reader(["ja", "en"])
result = reader.readtext("sample.png")
for box, text, confidence in result:
print(text)
より高い認識精度を求める場合は、OpenCVによる画像処理を組み合わせることがポイントです。
Python × OCR × OpenCV × AIを組み合わせれば、単純な文字認識だけでなく、領収書・請求書・名刺・帳票などを自動処理する業務システムにも発展させられます。
まずはEasyOCRやTesseractを使って簡単な画像から文字を読み取るところから始めると、OCRの仕組みを理解しやすいでしょう。







