Python EasyOCR: 画像の文字起こし、まだ手作業で消耗してる?

📝 TL;DR (3行要約)
- 何?: 画像に含まれるテキストを、驚くほど簡単に抽出できるPythonライブラリです。
- いつ使う?: 書類のスキャン、看板の翻訳、スクリーンショットからの情報収集など、画像内の文字をデータ化したいあらゆる場面で活躍します。
- 利点: 複雑な機械学習の知識は不要!数行のコードで、日本語を含む80以上の言語を高精度に認識できます。
1. 🤔 一体EasyOCRとは何?(核心的な役割と主な使用例)
プログラミングの世界には、面倒な作業を自動化してくれる魔法のようなツールがたくさんあります。その中でも「EasyOCR」は、「画像の文字を読む魔法のメガネ」だと考えてみてください。

私たちは普段、画像や写真を見れば、そこに書かれている文字を自然に読み取ることができますよね。しかし、コンピュータにとって画像はただの色のついた点(ピクセル)の集まりでしかなく、そこに「文字」が書かれているとは認識できません。
この「ただの点の集まり」から、人間のように文字を読み取り、コンピュータが扱えるテキストデータに変換する技術をOCR (Optical Character Recognition / 光学文字認識)と呼びます。EasyOCRは、このOCR技術を、その名の通り驚くほど「Easy(簡単)」に使えるようにしてくれるライブラリなのです。
核心的な役割: 優秀な多言語対応アシスタント
EasyOCRをもう少し具体的に例えるなら、「80以上の言語をマスターした、超優秀なアシスタント」です。
あなたがこのアシスタントに「この画像ファイルをお願い!」と渡すだけで、アシスタントは画像の中を隅々までチェックし、文字が書かれている部分を正確に見つけ出し、それを綺麗なテキストデータに書き起こして報告してくれます。
本来、このようなアシスタントを育てる(AIモデルを学習させる)には、膨大なデータと専門知識、そして多大な時間が必要です。しかし、EasyOCRは、すでに訓練済みの非常に賢いアシスタントを提供してくれているため、私たちは難しいことを一切考える必要がありません。ただ「お願い!」と頼むだけで、その強力な能力の恩恵を受けられるのです。
では、この優秀なアシスタントは、具体的にどのような場面で私たちを助けてくれるのでしょうか?主な使用例をいくつか見ていきましょう。
主な使用例
📄 書類やレシートのデータ化 大量の紙の書類や、財布に溜まったレシートを整理するのは大変ですよね。一枚一枚手でPCに入力するのは、時間もかかるし、入力ミスも起こりがちです。 EasyOCRを使えば、スマホでこれらの書類を撮影するだけで、日付、金額、品名といった必要な情報を自動でテキストとして抽出できます。抽出したデータを使えば、経費精算システムへの自動入力や、家計簿アプリへのデータ連携といった、業務や生活の劇的な効率化が実現できます。
🏙️ 街中の看板やメニューの翻訳サポート 海外旅行中、読めない言語で書かれた看板やレストランのメニューを見て困った経験はありませんか? そんな時、その看板を写真に撮ってEasyOCRにかければ、書かれている文字をテキストデータとして取り出せます。そのテキストをGoogle翻訳などの翻訳サービスに渡せば、すぐに意味を理解することができます。まさに、あなたのポケットに入るパーソナル翻訳アシスタントの誕生です。
💻 スクリーンショットからの情報収集 Webサイトを見ていて、後で使いたい情報(例えば、商品のスペック、エラーメッセージ、ユーザーのレビューなど)をスクリーンショットで保存することはよくあります。しかし、画像として保存されたテキストは、後からコピー&ペーストしたり、検索したりすることができません。 EasyOCRを使えば、フォルダに保存された大量のスクリーンショットから一括でテキストを抽出し、検索可能なデータベースを構築できます。これにより、過去の情報を探し出す手間が大幅に削減され、情報の再利用が格段に楽になります。
このように、EasyOCRは「画像」と「テキスト」という、これまで分断されていた世界の架け橋となり、私たちのアイデア次第で無限の可能性を秘めたライブラリなのです。
2. 💻 インストール方法
EasyOCRのインストールは非常に簡単です。ターミナル(WindowsならコマンドプロンプトやPowerShell)を開いて、以下のコマンドを実行しましょう。
EasyOCRは、内部でPyTorchという有名な機械学習ライブラリを利用しています。そのため、先にPyTorchをインストールしてからEasyOCRをインストールするのが最も確実で推奨されている方法です。
# ステップ1: まず、AIの心臓部であるPyTorchをインストールします # (もし既にインストールされている場合は、このステップは不要です) pip install torch torchvision torchaudio # ステップ2: 次に、主役のEasyOCRをインストールします pip install easyocr # ステップ3: サンプルコードで画像処理を行うためのライブラリも入れておきましょう pip install opencv-python-headless matplotlib
たったこれだけです!これで、あなたのPython環境に「画像の文字を読む魔法のメガネ」がセットアップされました。
3. 🛠️ 実際に動作するサンプルコード
さあ、いよいよEasyOCRの魔法を体験してみましょう! 以下のコードは、インターネット上にあるサンプル画像(日本語と英語が混在した看板)を読み込み、そこに書かれているテキストを検出して、結果をコンソールに表示し、さらにどの部分が認識されたかを画像上で可視化する、という一連の流れを体験できる完全なサンプルです。
このコードをコピーして、ocr_test.pyのような名前で保存し、実行してみてください。
import easyocr import cv2 import matplotlib.pyplot as plt import urllib.request import numpy as np # --- 1. 準備フェーズ --- print("🚀 EasyOCRの準備を開始します...") # サンプル画像のURL # この画像には日本語と英語のテキストが含まれています IMAGE_URL = 'https://raw.githubusercontent.com/JaidedAI/EasyOCR/master/examples/japanese.jpg' IMAGE_FILENAME = 'japanese_example.jpg' # URLから画像をダウンロードして保存 try: urllib.request.urlretrieve(IMAGE_URL, IMAGE_FILENAME) print(f"✅ 画像 '{IMAGE_FILENAME}' のダウンロードが完了しました。") except Exception as e: print(f"❌ 画像のダウンロードに失敗しました: {e}") exit() # --- 2. OCRリーダーの初期化フェーズ --- # 日本語('ja')と英語('en')を読み取るためのリーダーを準備します # 初回実行時は、モデルのダウンロードに数分かかることがあります print("📖 OCRリーダーを初期化中... (初回はモデルをダウンロードするため時間がかかります)") reader = easyocr.Reader(['ja', 'en'], gpu=False) # GPUがない場合は gpu=False を指定 print("✅ OCRリーダーの準備が完了しました。") # --- 3. OCR実行フェーズ --- # 画像を読み込み、テキストを抽出します print("🔍 画像からテキストを読み取っています...") # readtext()関数が、画像からテキストを抽出する中心的な役割を担います result = reader.readtext(IMAGE_FILENAME) print("✅ テキストの読み取りが完了しました。") # --- 4. 結果の表示フェーズ --- print("\n--- 抽出結果 ---") if not result: print("テキストが見つかりませんでした。") else: for (bbox, text, prob) in result: # bbox: 検出されたテキストの四角い領域の座標 [[左上], [右上], [右下], [左下]] # text: 抽出されたテキスト文字列 # prob: 信頼度スコア (0.0から1.0の値) print(f"テキスト: '{text}', 信頼度: {prob:.4f}") print("-----------------\n") # --- 5. 結果の可視化フェーズ --- print("🎨 結果を画像上で可視化します...") # OpenCVで画像を読み込む img = cv2.imread(IMAGE_FILENAME) # 検出された各テキストに四角形とテキストを描画 for (bbox, text, prob) in result: # 信頼度が低い結果は表示しない (例: 0.2未満) if prob < 0.2: continue # バウンディングボックスの座標を取得 (top_left, top_right, bottom_right, bottom_left) = bbox top_left = tuple(map(int, top_left)) bottom_right = tuple(map(int, bottom_right)) # 四角形を描画 (緑色) cv2.rectangle(img, top_left, bottom_right, (0, 255, 0), 2) # 抽出したテキストを描画 (白色の背景に黒文字) # 日本語フォントがないと文字化けするため、ここではテキスト描画は省略し、矩形のみ表示 # cv2.putText(img, text, (top_left[0], top_left[1] - 10), # cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 0), 2) # OpenCVはBGR、matplotlibはRGBの色空間を使うため、変換が必要 img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 結果を画面に表示 plt.figure(figsize=(10, 10)) plt.imshow(img_rgb) plt.axis('off') # 軸は非表示 plt.title('EasyOCR Detection Result') plt.show() print("🎉 全ての処理が完了しました!")
4. 🔍 コードの詳細説明
上記のサンプルコード、無事に動きましたか? 一見すると少し長く感じるかもしれませんが、やっていることは非常にシンプルです。コードを意味のある塊(チャンク)に分けて、それぞれの役割を見ていきましょう。
【チャンク1】 準備フェーズ (1〜18行目)
import easyocr import cv2 import matplotlib.pyplot as plt import urllib.request import numpy as np IMAGE_URL = 'https://raw.githubusercontent.com/JaidedAI/EasyOCR/master/examples/japanese.jpg' IMAGE_FILENAME = 'japanese_example.jpg' urllib.request.urlretrieve(IMAGE_URL, IMAGE_FILENAME)
ここは、いわば料理の下ごしらえの部分です。
まず、今回使う道具(ライブラリ)をimportで全て揃えます。easyocrが主役で、urllib.requestはインターネットから画像をダウンロードするため、cv2(OpenCV)とmatplotlib.pyplotは結果を画像として表示するために使います。
次に、OCRを試すためのサンプル画像のURLを定義し、urllib.request.urlretrieveを使って、そのURLから画像をダウンロードし、japanese_example.jpgという名前で保存しています。
これで、テキストを読み取る対象の準備が整いました。
【チャンク2】 OCRリーダーの初期化フェーズ (20〜25行目)
reader = easyocr.Reader(['ja', 'en'], gpu=False)
ここがEasyOCRの心臓部です。easyocr.Reader()という命令で、「文字を読む専門家(リーダー)」を呼び出しています。
引数に注目してください。['ja', 'en']というリストを渡していますね。これは、「これから日本語と英語のテキストを読み取りたいので、その準備をお願いします!」と専門家に伝えているのです。EasyOCRのすごいところは、このように複数の言語を同時に指定できる点です。
gpu=Falseは、「計算にはCPUを使ってください」という指定です。もし高性能なNVIDIA製のグラフィックボード(GPU)がPCに搭載されていれば、ここをTrueにすると処理速度が劇的に向上します。初心者のうちは、まずはFalseで問題ありません。
【重要】 この行が初めて実行されるとき、EasyOCRは指定された言語(この場合は日本語と英語)を読み取るために必要なAIモデルを、インターネットから自動でダウンロードします。そのため、初回実行時だけ少し時間がかかりますが、2回目以降はダウンロード済みのモデルを使うので、すぐに処理が始まります。
【チャンク3】 OCR実行フェーズ (28〜32行目)
result = reader.readtext(IMAGE_FILENAME)
魔法が起きるのは、このたった1行です。
先ほど準備した専門家(reader)に、readtext()メソッドを使って、ダウンロードした画像ファイル(IMAGE_FILENAME)を渡しています。
これだけで、EasyOCRが画像内の文字をすべて探し出し、その結果を変数resultに返してくれます。複雑な処理はすべてライブラリが裏側で担当してくれるので、私たちはこの1行を書くだけで良いのです。
【チャンク4】 結果の表示フェーズ (35〜45行目)
for (bbox, text, prob) in result: print(f"テキスト: '{text}', 信頼度: {prob:.4f}")
readtext()が返してくれたresultは、検出されたテキスト情報のリストになっています。forループを使って、その中身を一つずつ取り出して見ていきましょう。
各要素は、3つの情報のセットになっています。
- bbox: 検出されたテキストが画像のどの位置にあるかを示す座標情報(バウンディングボックス)です。四角形の四隅の[x, y]座標が格納されています。
- text: 実際に読み取られたテキスト文字列です。
- prob: この認識結果がどれくらい確かかを示す信頼度スコアです。0から1までの値をとり、1に近いほどAIが「この認識に自信があります!」と思っていることを示します。
ここでは、これらの情報を分かりやすく整形して、コンソール画面に表示しています。
【チャンク5】 結果の可視化フェーズ (48行目以降)
img = cv2.imread(IMAGE_FILENAME) for (bbox, text, prob) in result: # (中略) cv2.rectangle(img, top_left, bottom_right, (0, 255, 0), 2) img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(img_rgb) plt.show()
コンソールにテキストが表示されるだけでも便利ですが、「画像のどの部分が認識されたのか」を視覚的に確認できると、もっと分かりやすいですよね。
このチャンクでは、まずcv2.imread()で再度画像を読み込みます。そして、先ほどのresultの中から座標情報(bbox)を取り出し、cv2.rectangle()という関数を使って、認識されたテキストの部分を緑色の四角形で囲んでいます。
最後に、matplotlibライブラリを使って、四角形が描画された画像を表示しています。これにより、EasyOCRがどこを文字として認識したのかが一目瞭然になります。
5. ⚠️ 注意点またはヒント
EasyOCRは非常に強力で使いやすいライブラリですが、初心者が陥りがちな罠や、知っておくと便利なヒントがいくつかあります。
1. 罠:「固まった?」と慌てないで!初回実行時のモデルダウンロード ⏳
前述の通り、easyocr.Reader()を特定の言語で初めて実行する際、その言語を認識するためのAIモデル(数MB〜数十MB)をインターネットから自動でダウンロードします。お使いのネットワーク環境によっては、これに数分かかることがあります。
この間、プログラムは何も出力せずに沈黙するため、初心者は「プログラムがフリーズした!」「何か間違えたかな?」と不安になりがちです。
これは正常な動作です。 初回だけは、コーヒーでも淹れて気長に待ちましょう。ダウンロードが完了すれば、~/.EasyOCR/modelのようなフォルダにモデルが保存され、2回目以降の実行は非常に高速になります。
2. ヒント: 認識精度を上げるには「綺麗な画像」が一番の近道 ✨
EasyOCRは非常に賢いですが、万能ではありません。認識精度は、入力する画像の品質に大きく左右されます。もし「うまく文字を読み取ってくれないな」と感じたら、以下の点を確認してみてください。
- ピントは合っていますか?: ピンボケした画像から文字を読み取るのは、人間にとっても難しいですよね。AIも同じです。できるだけシャープでクリアな画像を使いましょう。
- 明るさは十分ですか?: 暗すぎたり、逆に光が反射して白飛びしている画像は、文字の輪郭が不鮮明になり、認識率が低下します。
- 文字は水平ですか?: 極端に傾いていたり、歪んでいたりするテキストは認識が難しくなります。可能であれば、正面から撮影し、文字が水平になるように心がけましょう。(多少の傾きはEasyOCRが自動で補正してくれます)
- 解像度は適切ですか?: 画像が小さすぎると、文字が潰れてしまい認識できません。かといって、大きすぎても処理に時間がかかります。一般的に、テキストの高さが最低でも20〜30ピクセル程度あると、安定した認識が期待できます。
まずは綺麗な画像を用意すること。これが、高価なツールや複雑なテクニックを使うよりも、ずっと効果的な精度向上のための第一歩です。
6. 🔗 一緒に見ておくと良いライブラリ
EasyOCRで画像からテキストを抽出するスキルを身につけたら、次の一歩として OpenCV (opencv-python) を学んでみることを強くお勧めします。
OpenCV (Open Source Computer Vision Library) は、画像処理やコンピュータビジョン(コンピュータに人間のような視覚を与える技術)のための、非常に強力で定番のライブラリです。
なぜOpenCVなのか? サンプルコードでも結果の可視化に少しだけ使いましたが、OpenCVの真価は「前処理」にあります。 先ほどのヒントで「綺麗な画像が大事」という話をしましたが、手元にある画像が必ずしも理想的な状態であるとは限りません。そんな時、OpenCVを使えば、EasyOCRがテキストを読み取りやすいように画像を加工(前処理)することができるのです。
例えば、以下のような処理が可能です。 - グレースケール化・二値化: 画像を白黒に変換して、文字と背景のコントラストを強調する。 - ノイズ除去: 画像のザラつきを取り除き、文字をクリアにする。 - 傾き補正: 斜めに写った書類を、まっすぐに補正する。 - リサイズ: 画像の解像度を適切な大きさに変更する。
EasyOCRとOpenCVを組み合わせることで、「OpenCVで画像を整え、EasyOCRでテキストを読む」という最強のタッグが完成し、より困難な状況でも高い精度で文字認識タスクをこなせるようになります。
7. 🎉 まとめ
今日はお疲れ様でした!Pythonライブラリ「EasyOCR」の魅力と基本的な使い方を学んできました。
- EasyOCRは「画像の文字を読む魔法のメガネ」であり、複雑な設定なしに画像からテキストを抽出できる。
- インストールは
pipコマンドで簡単に行えるが、初回実行時にはモデルのダウンロードがあることを覚えておこう。 - 基本的な使い方はたったの2ステップ。
easyocr.Reader()で専門家を呼び出し、reader.readtext()で画像を渡すだけ。 - 認識精度は入力画像の品質に大きく依存する。まずは綺麗な画像を用意することが成功の鍵。
- 次のステップとして、画像の前処理が得意なOpenCVを学ぶと、さらに応用範囲が広がる。
知識は、実際に使ってみて初めて本当のスキルになります。さあ、今日学んだことを使って、小さな冒険に出てみましょう!
【今日の挑戦課題】
1. あなたのスマートフォンで、身の回りにあるものの写真を撮ってみましょう。(例: お菓子のパッケージ、本の表紙、PCのデスクトップ画面など)
2. その画像をPCに取り込み、今回のサンプルコードのIMAGE_FILENAMEをそのファイル名に変更して実行してみてください。
3. うまくテキストを読み取れましたか? もし読み取れなかったら、なぜだろう?(暗い?ピンボケ?文字が特殊?)と考えて、別の写真で再挑戦してみましょう!
この小さな成功体験の積み重ねが、あなたをより優れた開発者へと導いてくれます。Happy Coding!