PHPで実現するCloud Vision API OCR入門:画像からテキスト抽出の基本
作成日:2025.09.30
Google Cloud Vision API を利用して、PHP で画像からテキストを抽出する OCR 処理の基本的な実装方法を解説します。API の有効化や認証情報の取得、PHP クライアントライブラリのインストール手順から、実際のコード例に基づいた OCR 処理の流れを紹介。
目次
Google の Cloud Vision API を使って、PHP で 画像からテキストを抽出する OCR 処理を行なってみたので、その手順を紹介します。
API の有効化
まず、Google Cloud Platform のコンソールにアクセスし、プロジェクトを作成します。
次に、検索ボックスに「Vision API」と入力し、表示された「Cloud Vision API」を選択して有効化します。
サービスアカウントの作成と認証情報の取得
サービスアカウントの作成と認証情報の取得に関しては、以前 PHPでGoogle Analyticsデータを取得する初心者向けガイド:APIの設定からコード例まで の記事の「サービスアカウントの作成とAPIキーの作成」の項で詳しく説明していますので、そちらを参考にしてください。
PHP クライアントライブラリのインストール
次に、PHP クライアントライブラリをインストールします。Composer を使って以下のコマンドを実行します。
composer require google/cloud-vision
OCR 処理の実装例
以下は、PHP で Cloud Vision API を使って画像からテキストを抽出する例です。
require 'vendor/autoload.php';
use Google\Cloud\Vision\V1\Client\ImageAnnotatorClient;
use Google\Cloud\Vision\V1\AnnotateImageRequest;
use Google\Cloud\Vision\V1\BatchAnnotateImagesRequest;
use Google\Cloud\Vision\V1\Feature;
use Google\Cloud\Vision\V1\Image;
// APIキーのJSONファイルのパス(必ずブラウザではアクセスできない場所に設置すること)
putenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/credential/xxxxxxxxxx.json');
// クライアント作成
$client = new ImageAnnotatorClient();
// 画像の読み込み
$image = (new Image())
->setContent(file_get_contents('sample.jpg'));
// Feature(OCRを指定)
$feature = (new Feature())
->setType(Feature\Type::TEXT_DETECTION);
// AnnotateImageRequest
$annotateRequest = (new AnnotateImageRequest())
->setImage($image)
->setFeatures([$feature]);
// BatchAnnotateImagesRequest
$batchRequest = (new BatchAnnotateImagesRequest())
->setRequests([$annotateRequest]);
// 実行
$response = $client->batchAnnotateImages($batchRequest);
// 結果の取得
foreach ($response->getResponses() as $res) {
if ($res->getTextAnnotations()->count() > 0) {
echo "検出結果:\n";
echo $res->getTextAnnotations()[0]->getDescription();
} else {
echo "テキストが検出されませんでした。";
}
}
上記のコードでは、まずサービスアカウントの認証情報を環境変数 GOOGLE_APPLICATION_CREDENTIALS に設定します。次に、ImageAnnotatorClient クラスのインスタンスを作成し、画像ファイルを読み込みます。
次に、OCR 処理を指定するために Feature クラスのインスタンスを作成し、タイプを TEXT_DETECTION に設定します。
その後、AnnotateImageRequest クラスのインスタンスを作成し、画像とフィーチャーを設定します。さらに、BatchAnnotateImagesRequest クラスのインスタンスを作成し、リクエストを設定します。
最後に、batchAnnotateImages メソッドを呼び出して OCR 処理を実行し、結果を取得します。検出されたテキストは getTextAnnotations() メソッドで取得できます。
この例では、画像ファイル sample.jpg からテキストを抽出し、検出結果を表示します。
注意点として、Cloud Vision API の使用には料金が発生する場合がありますので、利用前に料金体系を確認してください。また、API の使用制限にも注意してください。
実行結果
試しに、以下の画像を使って OCR 処理を行なってみました。

無印良品のお菓子のパッケージに書かれた成分表示欄です。
上記の画像を sample.jpg として保存し、先ほどのコードを実行したところ、以下のようにテキストが抽出されました。
検出結果: 無印良品 ポテトスティック 塩レモン 称 スナック菓子 名原 原材料名 フライドポテト (ばれいしょ (中 国)、植物油脂)、 レモンソルト シーズニング (麦芽糖、食塩、 デキストリン、砂糖、たん白加水 分解物、ブラックペッパー末、レ モン果汁粉末、 ジンジャーエキ スパウダー) / 調味料(アミノ 酸等)、酸味料、香料、炭酸Ca、 (一部に大豆を含む) 内容量 58g 賞味期限表面上部に記載 (開封前) 保存方法 直射日光・高温多湿の場所 を避けて保存してください。 販売者 株式会社良品計画 東京都文京区後楽2-5-1 製造所 株式会社 宮田 関東工場 茨城県常総市大生郷町中丸6127-8 本品に含まれるアレルゲン 大豆 soybean ・くるみ・小麦・卵・乳 通の
概ね、正しくテキストが抽出されていました。
続いて、縦書きの文章の抽出精度がどうか試してみたかったので、以下の画像を使って OCR 処理を行なってみました。
『屍鬼』小野不由美 より抜粋上記の画像を sample.jpg として保存し、先ほどのコードを実行したところ、以下のようにテキストが抽出されました。
検出結果: 「そりゃあ、良かった。一安心だ」 診察室には、 敏夫と静信、高見だけ。 家族はまだ来ていない。怪我をした子供の顔に、 静信は見覚えがなかった。本人が住所と名前を名乗ったものの、家に電話しても誰も出 たんぽ ない。おそらくは、田圃に出るか山に入るかしているのだろう。近所の者に連絡をして、 家族を捜してもらっているところだった。 静信は頷いた。 だんか すく 「にしても」と敏夫は肩を竦める。「解せない話だな。見覚えのない車だったって?」 「村の者じゃないと思う。見覚えのない顔だったし」 「そんな安請け合いをしていいのか? お前、茂樹くんの顔だって知らなかったんだろ う」 敏夫は笑った。 「どうやら檀家ではないようだし、檀家でも子供の顔までは覚えていないけれど。けれ どもあの車は違うと思う。黒のベンツだったから」 ははあ、と敏夫は頷いた。高見も意を得たように頷く。 「なるほど、ベンツは見かけたことがないですねえ。この村で外車っていうと、若先生 の奥さんのBMWぐらいしか思いつきませんからな」 「うちの十和田くんはゴルフに乗ってるし、看護婦の汐見くんはミニだよ」
ルビの部分が邪魔をして、一部変なところがありますが、縦書きの文章もかなり正確に抽出できていることが分かります。
以上、PHP で Google Cloud Vision API を使って画像からテキストを抽出する OCR 処理を行なう方法を紹介しました。Cloud Vision API は他にも顔認識やラベル検出など様々な機能を提供しているので、興味があればドキュメントを参照してみてください。
参考: 画像内のテキストを検出する | Cloud Vision API | Google Cloud
PHPと外部APIを組み合わせたWebアプリ開発をご検討中の方へ
本記事で紹介したCloud Vision APIのような外部サービスとの連携をはじめ、PHPによるAPI連携や画像解析処理を組み込んだWebアプリケーション開発を承っております。
OCR機能の自動化、クラウドAPIを活用した業務効率化ツールの開発など、実務に沿った形でサポートいたします。お気軽にご相談ください。
奈良市を拠点に、27年以上の経験を持つフリーランスWebエンジニア、阿部辰也です。
これまで、ECサイトのバックエンド開発や業務効率化システム、公共施設の予約システムなど、多彩なプロジェクトを手がけ、企業様や制作会社様のパートナーとして信頼を築いてまいりました。
【制作会社・企業様向けサポート】
Webシステムの開発やサイト改善でお困りの際は、どうぞお気軽にご相談ください。小さな疑問から大規模プロジェクトまで、最適なご提案を心を込めてさせていただきます。
ぜひ、プロフィールやWeb制作会社様向け業務案内、一般企業様向け業務案内もご覧くださいね。
Laravel Pintの使い方:PHPコードの書式を整えてCIで検査する
2026.09.15
Laravel Pintを使ってPHPコードの書式を整える方法を紹介します。ローカルでの自動修正、CIで書式違反だけを検査する--test、対象範囲の指定、pint.jsonの設定、Bladeファイルを扱う際の注意点を整理し、Pintを導入する判断基準も説明します。
PHPUnitでPHPのテストを始める:正常系・例外・モックの基本
2026.09.14
PHP 8.3とPHPUnit 12.5を使い、フレームワークやデータベースに依存しないPHPの例で、テストの考え方からComposerによる導入、基本的なアサーション、データプロバイダー、例外、モックまでを解説し、PHPUnitの基本を整理します。
GitHub ActionsでPHP・LaravelのCIを始める:テスト・Lint・ビルドを自動化するWorkflowの基本
2026.09.13
PHP・Laravelプロジェクトを対象に、GitHub ActionsのWorkflow、イベント、ジョブ、ステップの基本を説明します。Composerのテスト、npm ci、フロントエンドビルド、Laravel PintをCIへ組み込む方法に加え、featureブランチやPull Requestで実行される条件、失敗時のログ確認、Secrets・権限・Actionのバージョン管理についても整理します。
PHPでXMLを読み込む:SimpleXMLで要素・属性・名前空間を取得する
2026.09.11
PHPのSimpleXMLを使ってXMLファイルを読み込み、要素や属性、繰り返し要素、名前空間付きの要素を取得する方法を解説します。XPathによる検索結果を配列へ変換する処理に加え、解析失敗、欠損値、文字コード、外部XMLを扱う場合の注意点も紹介します。