PHPで実現するCloud Vision API OCR入門:画像からテキスト抽出の基本
作成日:2025.09.30
Google Cloud Vision API を利用して、PHP で画像からテキストを抽出する OCR 処理の基本的な実装方法を解説します。API の有効化や認証情報の取得、PHP クライアントライブラリのインストール手順から、実際のコード例に基づいた OCR 処理の流れを紹介。
error この記事は最終更新日から1年以上が経過しています。
目次
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制作会社様向け業務案内、一般企業様向け業務案内もご覧くださいね。
XAMPPのPHP更新時にphp.iniをどう移行する? 引き継ぐ設定と確認方法
2026.11.12
XAMPPでPHPを更新する際のphp.iniの移行方法を解説します。旧設定と新しい設定例を比較し、引き継ぐ項目や変更が必要な項目を整理。拡張・パス・エラー出力・アップロード・セッションなどの注意点と、CLI・Apacheそれぞれで設定の反映を確認する方法を紹介します。
PHPでフリガナ欄の入力を検証する:全角ハイフン・長音・カタカナの扱い
2026.11.11
住所のフリガナ欄で、全角ハイフンを入力したつもりなのにエラーになることがあります。見た目が似たハイフンや長音の違いを確認し、PHPでカナや英数字を変換してから検証する方法を紹介します。入力を保持したエラー表示や、変換後の値を確認する方法も解説します。
ChatGPTからPHP製MCPへOAuth接続する:Auth0・XServerでつまずいた点と対処法
2026.11.10
PHP製MCPにAuth0のOAuth認証を追加し、ChatGPTから接続した際の記録です。OAuth設定の検出、APIへの権限付与、ログイン後のツール検出失敗を順に切り分け、最後に原因となったAuthorizationヘッダーの伝達問題と対処法を紹介します。
mPDFでPDFが開けない・出力できないときの確認方法:BOM・空白・警告を切り分ける
2026.11.07
mPDFで出力済みエラーが出たり、PDFが開けなかったりするときに、生成処理とHTTPでの返却を分けて原因を調べる方法を紹介します。BOM・空白・デバッグ出力・PHP警告の混入を比較し、出力バッファーやdebug設定による違い、ログで出力元を特定する手順を解説します。