今回は、Pythonのプログラムを使用して画像中の文字をOCRで認識し、その内容をChatGPTで要約するプログラムを作成する方法をご紹介します。ライブラリとしてTesseract-OCRとOpenAIを利用し、短いコードで実現可能です。
ぜひ仕事の業務効率化などで活用してみてください。
また、当ブログ内のChatGPTについての記事を以下のページでまとめていますので、あわせてご覧ください。
ChatGPTとは
ChatGPTは、OpenAIが提供する自然言語生成モデルです。GPT(Generative Pre-training Transformer)と呼ばれるモデルのアーキテクチャを採用しています。
GPTは、Transformerと呼ばれるニューラルネットワークを使用して、文書や言語処理タスクでのテキスト生成を行うモデルです。GPTは、大量のテキストデータを学習し、そのデータをもとに新しい文章を生成することができます。
ChatGPTは、GPTをもとにしたモデルであり、対話型システムやチャットボットなどで使われることを想定して開発されています。対話を続けることができるようになっており、ユーザーが入力するテキストに対して、自然で返答ができるようになっています。
OpenAI APIキーの取得
PythonのプログラムからChatGPTを使用するためには、OpenAIのAPIキーを取得する必要があります。
取得の手順については以下の記事で解説しています。
Tesseract-OCRによる光学文字認識
今回、作成するプログラムでは画像内に写っている文字の検出をTesseract-OCRを使って行います。
Tesseract-OCRは、オープンソースの光学文字認識(OCR)エンジンで、Googleが開発およびメンテナンスを行っています。OCRは、スキャンされた文書や画像に含まれる文字をデジタルテキストデータに変換する技術です。
コマンドラインツールとしても提供されており、画像ファイルやPDFファイルからテキストデータを抽出できます。さらに、Pythonや他のプログラミング言語からTesseract-OCRを利用するためのラッパーライブラリ(例:pytesseract)も存在し、プログラム内でOCR処理を行うことができます。
日本語の言語ファイルを入手する
Tesseract-OCRを使って日本語の文字を認識するためには、事前に日本語の言語ファイルを入手しておく必要があります。
言語ファイルの追加方法は以下の記事で解説していますので、事前に用意しておいてください。
ライブラリのインストール
必要なライブラリをインストールします。コマンドプロンプトで以下のコマンドを実行してください。
OpenAIのライブラリ
pip install openai
ORC関連のライブラリ
pip install pytesseract
pip install Pillow
作成したPythonコード
Pythonコード解説
ocr_image_to_text(img_file_path: str) -> str
関数
- 引数: 画像ファイルのパス(
img_file_path
)を文字列として受け取ります。 - 戻り値: 画像中の文字を認識した結果の文字列データを返します。
入力として受け取った画像ファイルのパスから、画像を開き、RGBモードに変換します。その後、pytesseractライブラリを使用して画像中の文字列データを抽出します。最後に抽出された文字列データを返します。
pytesseractの使い方の詳細は以下の記事で解説していますので、あわせてご覧ください。
summarize_text_with_chatgpt(ocr_text: str) -> str
関数
- 引数: OCRで抽出された文字列データ(
ocr_text
)を受け取ります。 - 戻り値: ChatGPTで要約された結果の文字列データを返します。
入力として受け取ったOCRで抽出された文字列データを、事前に設定されたテンプレート(PROMPT_BASE
)に追加してChatGPTへのプロンプトを作成します。その後、openaiライブラリを使用してChatGPTを利用して要約文を生成します。最後に要約結果の文字列データを返します。
main(img_file_path: str)
関数
この関数では、以下の一連の処理を実行します。
ocr_image_to_text
関数を使用して、指定された画像ファイルのパスから文章をOCRで読み取り、文字列データを抽出します。- 抽出された文字列データを
summarize_text_with_chatgpt
関数に渡して、ChatGPTで要約を生成します。 - 要約された文字列データを出力します。
全体のソースコード
from PIL import Image
import pytesseract
import os
import openai
# 言語ファイルのパスを環境変数に設定
tessdata_dir = "C:/Users/shinf/anaconda3/pkgs/tesseract-5.3.0-hcb5f61f_0/share/tessdata"
os.environ["TESSDATA_PREFIX"] = tessdata_dir
# OpenAIのAPIキー、プロンプトベース、GPTモデルの設定
openai.api_key = "(ここにOpenAIのAPIキーを設定)"
PROMPT_BASE = "次の文章を200字程度で要約してください。"
GPT_MODEL = "gpt-3.5-turbo"
def ocr_image_to_text(img_file_path: str) -> str:
# 画像ファイルを開く
image = Image.open(img_file_path)
# 画像をRGBモードに変換
image = image.convert('RGB')
# 画像から文字列データを抽出
text = pytesseract.image_to_string(image, lang='jpn')
return text
def summarize_text_with_chatgpt(ocr_text: str) -> str:
# ChatGPTプロンプトを作成
prompt = PROMPT_BASE + ocr_text
# 推論を実行
response = openai.ChatCompletion.create(
model=GPT_MODEL,
messages=[
{"role": "user", "content": prompt}
]
)
# ChatGPTの回答を返す
return response["choices"][0]["message"]["content"]
def main(img_file_path: str):
# OCRで画像から文字列データを抽出
ocr_text = ocr_image_to_text(img_file_path)
# 抽出した文字列データをChatGPTで要約
summary = summarize_text_with_chatgpt(ocr_text)
# 要約結果を出力
print(summary)
if __name__ == "__main__":
# 読み込む画像ファイルのパスを設定
IMG_FILE_PATH = "(ここに読み込む画像ファイルのパスを設定)"
# 画像ファイルのパスを引数としてmain関数を実行
main(IMG_FILE_PATH)
実行結果
認識させる画像
今回は動作テストに使用する画像として以下のページで公開している芥川 龍之介の「魚河岸」の一部をスクリーンショットしたものを使用します。
実際のスクリーンショットがこちらです。
出力された要約
プログラムを実行するとテンプレートの200文字程度という指示通り、以下のような要約文が生成されました。
\ Pythonを自宅で好きな時に学べる! /
まとめ
今回は、Pythonを用いて画像からテキストを抽出し、要約するプログラムを作成する方法を解説しました。Tesseract-OCRを使った文字認識と、OpenAIのChatGPTを使ったテキスト要約を組み合わせることで、効率的な文書の電子化が可能です。要約テンプレートを改良することで様々な用途に対応できますので、ぜひ活用してみてください。
また、以下の記事で効率的にPythonのプログラミングスキルを学べるプログラミングスクールの選び方について解説しています。最近ではほとんどのスクールがオンラインで授業を受けられるようになり、仕事をしながらでも自宅で自分のペースで学習できるようになりました。
スキルアップや副業にぜひ活用してみてください。
スクールではなく、自分でPythonを習得したい方には、いつでもどこでも学べる動画学習プラットフォームのUdemyがおすすめです。
講座単位で購入できるため、スクールに比べ非常に安価(セール時1200円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。
それでは、また次の記事でお会いしましょう。
コメント