Cloud Vision APIでおためしマンガの吹き出しテキスト取得
Cloud Vision API でマンガ系の画像からテキストを取りたいが、良く分からないので、全部丸投げしてみる。
「GCPのクラウドビジョンAPIを使って漫画の吹き出しを認識させたいのですが、どうやっていいのか分かりません。私から何をしたいのかをヒアリングして全部ガイドしてもらえませんか?」
相談相手:Claude 3.5 Sonnet
もちろんです。GCPのCloud Vision APIを使って漫画の吹き出しを認識するプロジェクトについて、step by stepでガイドしていきます。まずは、あなたの具体的な目標や現在の状況について、いくつか質問させてください。
-
このプロジェクトの最終的な目標は何ですか?(例:吹き出しの位置を検出する、吹き出し内のテキストを抽出するなど)
-
使用する漫画の画像はどのような形式で、どのように入手しますか?(例:スキャンしたJPEG画像、デジタル形式のPNG画像など)
-
プログラミング経験はありますか?もしあれば、どの言語に慣れていますか?
-
GCPのアカウントはすでに持っていますか?プロジェクトのセットアップは済んでいますか?
-
ローカル環境で開発するつもりですか、それともクラウド上で作業しますか?
-
このプロジェクトで特に挑戦したい、または学びたい技術的な側面はありますか?
これらの質問にお答えいただけると、あなたの状況に合わせたより具体的なガイダンスを提供できます。お答えをお聞かせください。
優しいな、この子
こちらの回答
「
1.画像で1枚1枚の漫画の吹き出しを呼んで、漫画のページにある全てのテキストを抽出するプログラムをAPIで利用したいです
2.スキャンしたpngがあります
3.言語は日本語ですよ
4.はいアカウントは持っていてプロジェクトは作っています。
5.ローカル環境で開発する予定です
6.どれくらい日本語のテキストをCloudvisoinAPIが利用できるか知りたいです
」
ありがとうございます。ご提供いただいた情報を基に、具体的なガイダンスを提供します。
まず、Cloud Vision APIを使って日本語の漫画の吹き出しからテキストを抽出するプログラムを作成するための手順を説明します。
環境設定:
Python(バージョン3.7以上)をインストールします。
Google Cloud SDKをインストールし、認証を設定します。
必要なライブラリのインストール:
pip install google-cloud-vision
プログラムの作成:
以下のPythonスクリプトを作成します。このスクリプトは、指定されたディレクトリ内の全てのPNG画像を処理し、各画像から検出されたテキストを抽出します。
import os
from google.cloud import vision
import io
def detect_text(path):
"""Detects text in the file."""
client = vision.ImageAnnotatorClient()
with io.open(path, 'rb') as image_file:
content = image_file.read()
image = vision.Image(content=content)
response = client.text_detection(image=image)
texts = response.text_annotations
if texts:
return texts[0].description
return ""
def process_directory(directory):
for filename in os.listdir(directory):
if filename.endswith(".png"):
filepath = os.path.join(directory, filename)
print(f"Processing {filename}:")
text = detect_text(filepath)
print(text)
print("-" * 50)
プログラムの実行:
スクリプト内の manga_directory 変数を、実際の漫画画像が保存されているディレクトリのパスに変更します。
コマンドラインで以下のコマンドを実行します:
python manga_text_extraction.py
このプログラムは、指定されたディレクトリ内の全てのPNG画像を処理し、各画像から検出されたテキストを出力します。
Cloud Vision APIの日本語テキスト認識能力について:
Cloud Vision APIは日本語を含む多くの言語のテキスト認識をサポートしています。
一般的に、印刷された日本語テキストの認識精度は非常に高いです。
手書きの文字や特殊なフォントの場合、精度が低下する可能性があります。
漫画特有の表現(擬音語や効果音など)は、正確に認識できない場合があります。
プログラムを実行する際の注意点:
画像の品質:高解像度でクリアな画像ほど、認識精度が高くなります。
画像のサイズ:APIには画像サイズの制限があるため、大きすぎる画像は事前にリサイズする必要があるかもしれません。
APIの利用制限:無料枠を超えると課金が発生するため、利用量に注意してください。
このプログラムを実行してみて、結果を確認してください。日本語のテキスト認識の精度や、どのような種類のテキストが正確に認識されるかを観察できます。結果に基づいて、必要に応じてプログラムを調整したり、前処理(画像の前処理など)を追加したりすることができます。
何か質問や、さらに詳しく知りたい点がありましたら、お気軽にお聞きください。
なるほど、プログラムは分かった。もう少しCloud Vision API を使うための設定とかを知りたいな。
「ありがとうございます。GCPのGoogleアカウントは持っていますがCloudeVisionAPIをどうやって利用するのか分からなくて、このプログラムで動作させるにはGCP側でどんな設定が必要なのか教えてもらえますか?又必要であればヒアリングしてください。」
Sonnet氏の回答
はい、もちろんです。Cloud Vision APIを利用するためのGCP側の設定について、step by stepで説明します。
プロジェクトの作成と選択:
Google Cloud Console (https://console.cloud.google.com/) にアクセスします。
既存のプロジェクトを選択するか、新しいプロジェクトを作成します。
Cloud Vision APIの有効化:
コンソールの左側のメニューから「APIとサービス」 > 「ライブラリ」を選択します。
検索バーで「Cloud Vision API」を検索し、クリックします。
「有効にする」ボタンをクリックしてAPIを有効化します。
サービスアカウントの作成:
左側のメニューから「IAMと管理」 > 「サービスアカウント」を選択します。
「サービスアカウントを作成」をクリックします。
サービスアカウント名を入力し(例:vision-api-user)、「作成して続行」をクリックします。
ロールとして「Cloud Vision API 使用者」を選択し、「完了」をクリックします。
キーの作成:
作成したサービスアカウントの行の右端にある三点リーダーをクリックし、「鍵を作成」を選択します。
キーのタイプとして「JSON」を選択し、「作成」をクリックします。
JSONキーファイルがダウンロードされます。このファイルは安全な場所に保存してください。
環境変数の設定:
ダウンロードしたJSONキーファイルのパスを環境変数として設定します。
Windowsの場合:
setx GOOGLE_APPLICATION_CREDENTIALS "C:\path\to\your\service-account-key.json"
Mac/Linuxの場合:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/your/service-account-key.json"
Google Cloud SDKのインストール(オプション):
Google Cloud SDK (https://cloud.google.com/sdk/docs/install) をダウンロードしてインストールします。
インストール後、以下のコマンドで認証を行います:
gcloud auth application-default login
これらの手順を完了すると、先ほど提供したPythonスクリプトを実行できるようになります。
追加のヒアリング項目:
Google Cloud SDKをインストールする予定はありますか?それとも環境変数の設定だけで進めますか?
プロジェクトの請求先アカウントは設定済みですか?(APIの使用には課金が発生する可能性があります)
開発に使用しているオペレーティングシステムは何ですか?(Windows、Mac、Linuxなど)
Pythonの開発環境(IDEやエディタ)は何を使用していますか?
これらの情報を教えていただけると、より具体的なガイダンスを提供できます。
追加の質問に回答します。
1.Google Cloud SDKをインストールする予定はありますか?それとも環境変数の設定だけで進めますか?
インストールしないでできるならそれがいいです
2.プロジェクトの請求先アカウントは設定済みですか?(APIの使用には課金が発生する可能性があります)
設定済みです
3.開発に使用しているオペレーティングシステムは何ですか?(Windows、Mac、Linuxなど)
開発もwindowsです
4.Pythonの開発環境(IDEやエディタ)は何を使用していますか?
pythonは基本vscodeかsakuraエディタのようなテキストエディタです
ありがとうございます。回答いただいた情報を基に、Google Cloud SDKをインストールせずに進める方法をご案内します。
サービスアカウントキーの設定:
前回の説明で作成したJSONキーファイルを、安全な場所に保存してください。
Windowsの環境変数を設定します:
a. スタートメニューで「環境変数」と検索し、「システム環境変数の編集」を選択します。
b. 「環境変数」ボタンをクリックします。
c. 「新規」ボタンをクリックし、以下のように入力します:
変数名: GOOGLE_APPLICATION_CREDENTIALS
変数値: C:\path\to\your\service-account-key.json
(実際のJSONファイルのパスに置き換えてください)
d. 「OK」をクリックして保存します。
Pythonの設定:
Python(バージョン3.7以上)がインストールされていることを確認してください。
コマンドプロンプトで以下のコマンドを実行して、必要なライブラリをインストールします:
pip install google-cloud-vision
VSCodeでの開発:
VSCodeを開き、新しいPythonファイルを作成します(例:manga_text_extraction.py)。
前回提供したPythonスクリプトをこのファイルにコピーします。
スクリプト内の manga_directory 変数を、実際の漫画画像が保存されているディレクトリのパスに変更します。
スクリプトの実行:
VSCodeの統合ターミナルを開きます(Ctrl + `)。
以下のコマンドでスクリプトを実行します:
python manga_text_extraction.py
注意点:
環境変数を設定した後、VSCodeを再起動してください。
請求先アカウントが設定済みとのことですが、APIの使用量に注意してください。必要に応じて予算アラートを設定することをお勧めします。
追加のアドバイス:
エラーハンドリング: スクリプトにトライ/エクセプトブロックを追加して、エラーを適切に処理することをお勧めします。
ログ記録: 処理結果をログファイルに記録する機能を追加すると、後で結果を確認しやすくなります。
画像の前処理: 必要に応じて、PIL(Python Imaging Library)を使用して画像の前処理(リサイズ、コントラスト調整など)を行うことで、テキスト認識の精度を向上させることができます。
これらの手順で作業を進めていただき、何か問題が発生したり、さらに詳しい説明が必要な部分があれば、お気軽にお聞きください。
できたもの
import os
from google.cloud import vision
import io
def detect_text(path):
"""Detects text in the file."""
client = vision.ImageAnnotatorClient()
with io.open(path, 'rb') as image_file:
content = image_file.read()
image = vision.Image(content=content)
response = client.text_detection(image=image)
texts = response.text_annotations
if response.error.message:
raise Exception(
'{}\nFor more info on error messages, check: '
'https://cloud.google.com/apis/design/errors'.format(
response.error.message))
if texts:
return texts[0].description
return ""
def process_directory(directory):
for filename in os.listdir(directory):
if filename.endswith(".png"):
filepath = os.path.join(directory, filename)
print(f"Processing {filename}:")
try:
text = detect_text(filepath)
print(text)
except Exception as e:
print(f"Error processing {filename}: {str(e)}")
print("-" * 50)
# 画像が保存されているディレクトリのパスを指定
manga_directory = "D:\\path"
process_directory(manga_directory)