PHPで Google Cloud Vision APIを使ってOCR

(1/1)
PHPで Google Cloud Vision APIを使ってOCR
書類や書籍をデジタイズする際、テキスト情報を付加することで検索や2次利用が楽になる。こうしたときに使う OCR(Optical Character Reader)だが、GoogleクラウドのOCR機能の精度がとても高い。そこで今回は、GoogleクラウドのOCR機能をAPIとして呼び出せる Google Cloud Vision APIを利用し、PHPでOCRプログラムを作ってみることにする。なお、Google Cloud Vision APIは、毎月の使用料が一定値を超えると課金されるのでご留意願いたい。
上図の実行例は、「PHP 8:Windows版のイントール/Apacheと連携/特長」の画像スナップショットをとって、それをサンプル・プログラムに流し込んだものである。

目次

サンプル・プログラム

圧縮ファイルの内容
GoogleOCR.phpサンプル・プログラム本体
pahooInputData.phpデータ入力に関わる関数群。
使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。
GoogleOCR.php 更新履歴
バージョン 更新日 内容
1.0.0 2023/12/29 初版
pahooInputData.php 更新履歴
バージョン 更新日 内容
1.4.1 2023/09/30 コメントの訂正
1.4.0 2023/09/09 $_GET, $_POST参照をfilter_input()関数に置換
1.3.0 2023/07/11 roundFloat() 追加
1.2.0 2023/04/22 exitIfLessVersion() 追加
1.1.2 2023/02/05 validString() 修正

準備:Google Cloud Vision APIの有効化

Google Cloud Platformの登録がお済みで無い方は、「Google Cloud Platform - 各種WebAPIの登録方法」を参考に登録していただきたい。
それが済んだら、以下の手順でGoogle Cloud Vision APIを有効化する。
Google Cloud Vision APIの有効化
Google Cloud Vision APIを有効化したい APIキーを選択する。
Google Cloud Vision APIの有効化
「キー」タブを選択し、「鍵を追加」を選ぶ。
Google Cloud Vision APIの有効化
キーのタイプとしてJSONを選択し秘密鍵を作成すると、JSONファイルがダウンロードされる。ダウンロードしたJSONファイルがAPIアクセスのために必要な秘密鍵となるので、公開せず、大切に保管する。

準備:Vision Clientライブラリのダウンロード

PHPからGoogle Cloud Vision APIを利用するには、Googleが用意している Vision Clientライブラリをインストールする必要がある。インストールは Composer を用いて行う。

Windowsで Composer を利用するには、Installation - Windows から Windows用の Composer-Setup.exe をダウンロードし、実行する。
Composerphp.exe を必要とする。インストール中に php.exe のパス名を聞いてくるので入力する。

Composerをインストールしたら、今回のサンプルプログラムを配置するパスへ移動し、コマンドプロンプトを開き、下記のコマンドを実行する。
composer require google/apiclient
composer require google/cloud-vision
これで Vision Clientライブラリが、\vendor サブディレクトリにインストールされたのだが、実際に動かしてみたところ、SSL証明書の認証がうまく行かないケースがあった。そこで、\vendor サブディレクトリ以下のPHPファイルを検索し、CURLOPT_SSL_VERIFYPEERFALSE に変更する。
こちらの環境では、"/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php" および "/vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php" の2つのファイルに、各々1カ所ずつ変更箇所が見つかった。

解説:テキストの検出

 245: // メイン・プログラム ======================================================
 246: 
 247: //Google API クライアントライブラリ
 248: require __DIR__ . '/vendor/autoload.php';
 249: use Google\Cloud\Vision\V1\ImageAnnotatorClient;
 250: //認証情報へのパスを設定
 251: putenv('GOOGLE_APPLICATION_CREDENTIALS=' . __DIR__ . '/credentials.json');
 252: 
 253: //パラメータ
 254: $imageFileName = isset($_FILES['upload']['tmp_name']) ? $_FILES['upload']['tmp_name': '';
 255: $description = $errmsg = '';
 256: 
 257: //画像形式変換
 258: if ($imageFileName !'') {
 259:     $resource = file_get_contents($imageFileName);
 260:     if ($resource == FALSE) {
 261:         $errmsg = '指定した画像ファイルが見つかりません.';
 262:     }
 263:     //Google Cloud Vision APIクライアントを作成する.
 264:     $imageAnnotatorClient = new ImageAnnotatorClient();
 265:     //テキストを検出する.
 266:     $response = $imageAnnotatorClient->textDetection($resource);
 267:     $text = $response->getTextAnnotations();
 268:     $description = $text[0]->getDescription();
 269:     $imageAnnotatorClient->close();
 270: }

まず、先ほどダウンロードした Vision Clientライブラリを  require  する。秘密鍵が入ってJSONファイルは、環境変数 GOOGLE_APPLICATION_CREDENTIALS に設定する。

OCR機能は、ImageAnnotatorClient クラスを利用する。getDescriptionメソッドを使い、その画像に含まれる全てのテキストを取得することができる。
なお、$textオブジェクトには、画像内のワードの位置情報なども格納されており、フォームの特定位置のテキストだけ検出するような場合に利用できるだろう。

JavaScript部分で、ファイルをドロップする処理は、解説:ファイルのドロップ - PHPで画像ファイルを読み込んでimgタグに埋め込む」を、テキストのコピーは「JavaScriptでクリップボードを使う」を参照願いたい。

参考サイト

(この項おわり)
header