技術資料

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を活用した業務効率化ツールの開発など、実務に沿った形でサポートいたします。お気軽にご相談ください。

mail ご相談・お問い合わせはこちらから 

この記事を書いた人

※上が私です。

奈良市を拠点に、27年以上の経験を持つフリーランスWebエンジニア、阿部辰也です。

これまで、ECサイトのバックエンド開発や業務効率化システム、公共施設の予約システムなど、多彩なプロジェクトを手がけ、企業様や制作会社様のパートナーとして信頼を築いてまいりました。

【制作会社・企業様向けサポート】
  • 専任エンジニアのいない企業様に対するシステム面の不安を解消
  • 柔軟な契約形態や短納期での対応により、急なニーズにも迅速にサポート
  • システムの企画段階から運用まで、ワンストップでのサービスを提供

Webシステムの開発やサイト改善でお困りの際は、どうぞお気軽にご相談ください。小さな疑問から大規模プロジェクトまで、最適なご提案を心を込めてさせていただきます。

ぜひ、プロフィールWeb制作会社様向け業務案内一般企業様向け業務案内もご覧くださいね。

Laravel Pintの使い方:PHPコードの書式を整えてCIで検査する

2026.09.15

Laravel Pintを使ってPHPコードの書式を整える方法を紹介します。ローカルでの自動修正、CIで書式違反だけを検査する--test、対象範囲の指定、pint.jsonの設定、Bladeファイルを扱う際の注意点を整理し、Pintを導入する判断基準も説明します。

CI/CD Laravel PHP

PHPUnitでPHPのテストを始める:正常系・例外・モックの基本

2026.09.14

PHP 8.3とPHPUnit 12.5を使い、フレームワークやデータベースに依存しないPHPの例で、テストの考え方からComposerによる導入、基本的なアサーション、データプロバイダー、例外、モックまでを解説し、PHPUnitの基本を整理します。

PHP 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のバージョン管理についても整理します。

CI/CD GitHub Laravel PHP

PHPでXMLを読み込む:SimpleXMLで要素・属性・名前空間を取得する

2026.09.11

PHPのSimpleXMLを使ってXMLファイルを読み込み、要素や属性、繰り返し要素、名前空間付きの要素を取得する方法を解説します。XPathによる検索結果を配列へ変換する処理に加え、解析失敗、欠損値、文字コード、外部XMLを扱う場合の注意点も紹介します。

PHP

阿部辰也へのお仕事の依頼・お問い合わせ

軽いご相談もお気軽にどうぞ!

個人情報の取り扱いについて *必須 プライバシーポリシーをご確認いただき、同意いただける場合は「同意する」にチェックをしてください。

keyboard_double_arrow_up
TOP