ChatGPT×Tesseract-OCR 画像に写った文章の要約文を自動生成する方法

  • URLをコピーしました!

※本ページはアフィリエイト広告を利用しています

今回は、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円程度~)に学ぶことができます。私も受講しているおすすめの講座を以下の記事でまとめていますので、ぜひ参考にしてみてください。

それでは、また次の記事でお会いしましょう。

著:Steven Bird, 著:Ewan Klein, 著:Edward Loper, 翻訳:萩原 正人, 翻訳:中山 敬広, 翻訳:水野 貴明
¥4,170 (2023/09/18 22:14時点 | Amazon調べ)
よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次