今回はPythonのプログラムで写真やキャプチャ画像からテキストを簡単に抽出できる方法を紹介します。
光学式文字認識にはGoogleがオープンソースで公開しているTesseract OCRエンジンを使用します。画像処理やデータ分析、事務処理業務の自動化など、様々な場面で役立ちますので、ぜひ活用してみてください。
使用するPythonライブラリ
pytesseract
pytesseractは、GoogleのTesseract OCRエンジンをPythonプログラムから簡単に利用できるようにするラッパーライブラリです。Tesseract OCRは、光学式文字認識(OCR)のためのオープンソースエンジンで、多くの言語に対応しています。pytesseractを使用することで、画像からテキストを抽出するプロセスを簡単かつ効率的に実行できます。このライブラリは、画像処理、文書スキャン、自動化などのさまざまなアプリケーションで利用されています。
Pillow (PIL Fork)
Pillowは、画像の読み込み、変換、フィルタリング、描画などの機能を提供しています。さまざまな画像フォーマットに対応し、高速な画像操作が可能です。Pillowは、ウェブアプリケーションやデータ分析、画像処理などの幅広い分野で利用されています。
今回紹介するプログラムでは、pytesseractに入力する画像をRGBモードに変換するために使用します。
ライブラリのインストール
コマンドプロンプトで以下のコマンドを実行してください。
pip install pytesseract
pip install Pillow
日本語データをダウンロード
日本語の言語ファイルをダウンロード
Tesseractに日本語を認識させるためには、日本語の学習データファイルが必要です。
日本語の学習データファイルをダウンロードし、適切な場所に配置します。その後、環境変数TESSDATA_PREFIX
を設定して、Tesseractが学習データファイルを参照できるようにします。
言語ファイルのダウンロードページ(https://github.com/tesseract-ocr/tessdata)にアクセスします。「jpn.traineddata」という日本語の言語ファイルをダウンロードし、tessdataactのディレクトリに配置します。
(Anacondaを使用した場合のディレクトリの例です)
C:/Users/(ユーザー名)/anaconda3/pkgs/tesseract-5.3.0-hcb5f61f_0/share/tessdata
使用できる言語を確認する
言語ファイルの配置が完了したら、コマンドプロンプトで以下のコマンドを実行すると使用できる言語ファイルを確認することができます。
tesseract --list-langs
作成したPythonコード
ここからは実際にpytesseractを使った光学文字認識処理の実装方法について解説します。
Pythonコード解説
読み込む画像ファイルの指定
読み込む画像ファイルのパスを変数 IMG_FILE_PATH
に設定します。
#読み込む画像ファイルのパスを設定
IMG_FILE_PATH = "ocrtest.jpg"
環境変数の設定
Tesseract OCRの言語ファイルが格納されているパスを変数 tessdata_dir
に設定し、環境変数 TESSDATA_PREFIX
にこれを設定します。これにより、Tesseract OCRが言語ファイルを正しく読み込めるようになります。
#言語ファイルのパスを環境変数に設定
tessdata_dir = "C:/Users/(ユーザー名)/anaconda3/pkgs/tesseract-5.3.0-hcb5f61f_0/share/tessdata"
os.environ["TESSDATA_PREFIX"] = tessdata_dir
RGBモードへ変換
image.convert('RGB')
を使って画像をRGBモードに変換します。これにより、画像が異なるモード(例:CMYKやグレースケール)であっても、Tesseract OCRが処理できる形式に変換されます。(RGBモード以外だと読み込み時にエラーが発生する場合があります)
#画像をRGBモードに変換
image = image.convert('RGB')
光学文字認識処理を実行
pytesseract.image_to_string()
関数を使って、画像から文字列データを抽出します。この関数には、処理対象の画像オブジェクトと、使用する言語(ここでは日本語)を指定します。
#画像から文字列データを抽出
text = pytesseract.image_to_string(image, lang='jpn')
全体のソースコード
作成したPythonの全体のソースコードは以下の通りです。
from PIL import Image
import pytesseract
import os
#読み込む画像ファイルのパスを設定
IMG_FILE_PATH = "ocrtest.jpg"
#言語ファイルのパスを環境変数に設定
tessdata_dir = "C:/Users/(ユーザー名)/anaconda3/pkgs/tesseract-5.3.0-hcb5f61f_0/share/tessdata"
os.environ["TESSDATA_PREFIX"] = tessdata_dir
#画像ファイルを開く
image = Image.open(IMG_FILE_PATH)
#画像をRGBモードに変換
image = image.convert('RGB')
#画像から文字列データを抽出
text = pytesseract.image_to_string(image, lang='jpn')
#結果を出力
print(text)
実行結果
認識させる画像
今回は動作テストに使用する画像として以下のページで公開している芥川 龍之介の「魚河岸」の一部をスクリーンショットしたものを使用します。
実際のスクリーンショットがこちらです。
pytesseractの出力
先ほどのプログラムを実行し、Tesseract OCRで文字認識した結果が以下となります。
発生したエラー
実行時に発生したエラーです。
raise TesseractError(proc.returncode, get_errors(error_string))
pytesseract.pytesseract.TesseractError: (1, 'Error opening data file ./jpn.traineddata Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory. Failed loading language \'jpn\' Tesseract couldn\'t load any languages! Could not initialize tesseract.')
言語ファイルが正しい場所に配置されていないと、環境変数を設定していても発生するようです。デフォルトの言語ファイルが配置されているディレクトリを検索し、同じ場所に配置してみてください。
まとめ
今回は、Tesseract OCRを使った画像からの文字抽出プログラムを作成しました。このプログラムは、OCR技術を利用して画像内のテキストを瞬時に取得できます。気になったWebサイトや書籍、雑誌などの情報もOCRを活用することで効率的にストック、利用できますのでぜひ活用してみてください。
Tesseract OCRで検出した文章をChatGPTで要約する方法についても以下の記事で解説しています。
また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。
スキルアップや副業にぜひ活用してみてください。
スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。
講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。
それでは、また次の記事でお会いしましょう。
コメント