こんにちは
今回は、Google Cloud Platform(以下GCP)の画像分析サービスである、Cloud Vision API を使って、手元の画像でOCR(光学的文字認識)を試してみようと思います。
※既に、Google Cloud Platformのアカウントがあることを前提に記事を執筆しています。
Google Cloud Platforomアカウントの作成方法については別記事をご参照ください。
Contents
Vision APIとは
Google Cloud の提供するVision APIの特徴を簡単にまとめました。
Cloud Vision APIはVision AIの中に含まれる機能の1つで、他には機械学習の自動化を行うための、AutoMLVisionがあります。
今回私が使うVision APIは、既に学習が完了しているモデルに対して、画像を送り付けて、文字起こしやラベル付けなどを行ってくれるサービスになります。
https://cloud.google.com/vision?hl=ja
Vision API用のプロジェクトを作成する
まずは試験用にVision API用のプロジェクトを作成します。
GCPにログイン後、画面上部のからプロジェクト一覧を開きます。

一覧を開くと、プロジェクトを選択できる画面に遷移します。
私のアカウントは既に運用中のプロジェクトが複数あるのですが、気にせず「新しいプロジェクト」から新しいプロジェクトを作成していきます。

クリックした後は「プロジェクト名」と「場所」を入力して「作成」をクリックしていきます。
私は「Vision test」としました。
「場所」は既に作成したプロジェクトの配下に設置することができる機能で、個人で運営する分には「組織なし」で問題ないでしょう。

作成が完了した後は、画面上部のプロジェクト名が作成したもの(私は「Vision test」)になっていればOKです。
他のプロジェクト名が表示されている場合は▼からVision API用のプロジェクトに変更してください。

Vision APIの有効化
プロジェクトの作成が完了した後は、Vision APIを有効化していきましょう。
GCPの画面左側からナビゲーションを開き、「マーケットプレイス」をクリックします。
URLに直接遷移してもOKです。
https://console.cloud.google.com/marketplace

マーケットプレイスを開いた後は、検索欄に「Vision」など検索に引っ掛かりそうなワードをテキトーに入力します。

「Vision」と検索をかけると、「Cloud Vision API」というものが出てきました。
こちらが今回目的のAPIですのでクリックして次へ進みます。

ページを開いて「有効にする」をクリックすると、選択されたプロジェクト内でAPIを使えるようになります。

初期設定
サービスアカウントの作成
次はAPIとの接続を許可するために、認証情報を追加していきます。
この記事では、「サービスアカウントの作成」→JSONキーの発行の手順で行っていきます。
再びナビゲーションメニューから、「IAMと管理」の中の「サービスアカウント」をクリックします。

サービスアカウントの一覧が表示されます。
私は既に作成してしまっているので、いくつか表示されていますが、最初に開いたときは何もないはずです。
ここに「サービスアカウントを作成」でアカウントを追加していきます。

テキトーにサービスアカウント名を入力し、「作成して続行」をクリックします。
※サービスアカウントの部分は自動で入力されます、サービスアカウントの説明の入力は任意です。

次は、作成するサービスアカウントの権限を設定します。
今回は自分しか使わないので、「オーナー」でOKです。
もし他の方に使わせたい場合は、権限を調整することで制限をかけることができるので、実際は複数のアカウントを作成する方が安全でしょう。

最後に「完了」をクリックしたら、アカウントの追加が完了します。

完了の後、このような画面に戻ることができたら、作成完了です。

JSONキーの発行
次は作成したアカウント用のカギを発行していきます。
最終的にはプログラムからAPIにアクセスして、機能を使うことになるのですが、そのプログラムが信頼できるものか(機能を使うことが許可されているのか)認証をする必要があります。
その認証に必要なプロジェクトIDやアクセスキー、機能制限(権限)をまとめて保有しているのが、今から発行するJSONファイルです。
それぞれのプログラムに記入するか、JSONファイルを読み込んでから、Googleに送り付けることで、APIを使うことが可能になります。
前置きはこのくらいにして、キーを発行していきます。
先ほどのサービスアカウントを作成したページの上部にある「キー」をクリックすると下のような画面になります。
「鍵を追加」をクリックします。

クリックすると、鍵の形式を選択する画面が出てきます。
ここでは「JSON」を選択し、「作成」をクリックすると、鍵を含んだJSONファイルがダウンロードされます。

お使いのパソコンのエクスプローラーのダウンロードファイルにJSONが保存されます。
ブラウザでは、「秘密鍵なんで大切に保管してくださいね。」的な文章が出てきますので、大事に保管してください。
後ほどのPythonコードで、ファイルパスを指定するので、Pythonコードを保存するディレクトリに保存しておくのがおすすめです。(不用意に消してしまうことを防ぎます)
ここまで来たら準備完了です。
いよいよコードを書いてVison APIの威力を体感してみましょう。

ローカルの画像をOCRする
私はJupyterLabを使っていますが、VSCodeでもなんでも構いません。
任意のコードエディタを起動し、まずは、Cloud Visionクライアントライブラリをインストールします。
下記のpipを実行します。
pip install --upgrade google-cloud-vision
クライアントライブラリをインストールできたら、次は読み込みたい画像を用意します。
今回は、Google Cloud のトップページである、下記のような画像を用意しました。
こいつを、Pythonファイルがあるディレクトリに「sample.png」で保存します。
※JSONファイルも忘れず保存しておいてください。

サンプルコードは下記です。
基本コピペで使えるようになっていますが、”JSONファイルのパス”と、”読み込みたい画像”の部分だけ、お使いの環境に応じて変更してください。
from google.cloud import vision
# service accountのjsonからclientの生成
client = vision.ImageAnnotatorClient.from_service_account_json(
'保存したJSONファイルのパス.json')
# 対象画像の読み込み
with open('読み込みたい画像.png', 'rb') as image_file:
content = image_file.read()
image = vision.Image(content=content)
# APIにアクセス
response = client.document_text_detection(image=image)
document = response.full_text_annotation
# テキストの取得
result = document.text
print(result)
JupyterLab上で実行した結果が下記です。
さすがのAI OCR…
同じ高さに書いてある文字についても、「Googleを選ぶ理由」と「ソリューション」のように別々のテキストエリアであることを認識して、文字起こし出来ています!

使い込むと当然料金が発生してきますので注意が必要ですが、業務内で、「手書きのものを文字起こしして記録する」みたいな作業がある方は使ってみてはいかがでしょうか。
プロジェクトの削除
最後に、プロジェクトの削除方法も案内して終了したいと思います。
※GCPでは「シャットダウン」=「プロジェクトの削除」なので注意してください。
「IAMと管理」から、「設定」に行きます。
プロジェクト名が削除したいプロジェクトになっていることを確認し、「シャットダウン」をクリックします。

「本当にシャットダウンするよ?」という画面が出てきますので、確認のプロジェクトIDを入力して、シャットダウンをします。
