2023年5月16日 【Google Cloud】Vision APIで画像に写っているモノを検出してみよう! 検索する Popular tags 生成AI(Generative AI) Looker Studio BigQuery AlloyDB Google Workspace 事例紹介 Cloud SQL Category Google Cloud Author みやてつ SHARE 目次 Cloud Vision APIを試してみよう! Cloud Vision APIを使う準備をしよう! Cloud ShellからCloud Vision APIを実行してみよう! PHPを使ってCloud Vision APIを実行してみよう! まとめ Content こんにちは。みやてつです。 みなさん、Cloud Vision APIというサービスをご存知でしょうか? 事前にトレーニングされたAIを使用して、気軽に画像を解析できるAPIサービスです。 例えば、看板の文字や人物の顔、物や建物などを検出したりできます。 具体的には、以下の機能があります。(2023年02月現在) 機能 概要 テキスト検出 画像内の文字を検出して抽出できます。 ドキュメント検出 ドキュメントファイル(PDFやTIFF)のテキストを検出して抽出できます。 ランドマーク検出 画像から地理的に目印となる建物やモノを検出して場所を取得できます。 ロゴ検出 画像からロゴを検出して抽出できます。 ラベル検出 画像に含まれる複数の物体や場所、動物、モノなどから画像のカテゴリを抽出できます。 画像プロパティ 画像の色の情報(ドミナントカラー)を抽出できます。 オブジェクトのローカライズ 画像に含まれる複数のモノを検出して抽出できます。 クロップヒント検出 画像を切り抜きするときの領域を抽出できます。 ウェブとエンティティとページ 画像に関連するウェブページを抽出できます。 不適切なコンテンツの検出 不適切なコンテンツ(adult、spoof、medical、violence、racy)に該当するか評価できます。 顔検出 画像から人物の顔や感情を検出できます。 たくさんありますね。 詳細は、公式ドキュメント(機能リスト)に記載されています。 今回は、オブジェクトのローカライズ機能を使って、画像に写っているモノを検出してみようと思います。 Cloud Vision APIを試してみよう! 公式ページにAPIを試すデモがあります。 試しに画像をアップロードしてみましょう。 ちょっと変わった「だるま」と普通の「はさみ」を撮ってアップロードしてみました。 Objectsタブでは、Scissors(はさみ)が検出されています。 この機能が「オブジェクトのローカライズ」です。 「だるま」は、検出されていませんね。残念。 Labelsタブでは、Snips、Tableware、Wood、Hand Tool・・・が検出されています。 この機能は「ラベル検出」です。 Textタブでは、「合格」という文字が検出されています。 この機能は「テキスト検出」です。 Propertiesタブでは、写真の色の情報(ドミナントカラー)が表示されています。 この機能は「画像プロパティ」です。 Safe Searchタブでは、不適切な写真かどうかのレベルが表示されています。 この機能は「不適切なコンテンツの検出」です。 上記の画像は不適切なコンテンツには該当しないとなっていますね。 Cloud Vision APIを使う準備をしよう! それでは、公式ドキュメントを参考に、Cloud Vision APIを利用できるようにしてみましょう。 詳細な手順は省きますが、以下の通り操作します。 1.Google Cloudのプロジェクトを準備します。 2.プロジェクトに請求先アカウントが設定されていることを確認します。 3.Cloud Vision API を有効にします。 4.任意のサービスアカウントを作成します。 公式ドキュメントでは、使用するサービスアカウントのロールは不要と記載されています。 Vision API 自体にはサービス アカウントが必要ですが、使用するロールを作成する必要はありません。有効なサービス アカウントであれば、Vision API が有効になっているプロジェクトで Vision API を呼び出すことができます。 次の章でCloud ShellからAPIを実行して試したところ、ロール「roles/serviceusage.serviceUsageConsumer」が必要というエラーになりました。 そのため、今回は「Service Usage ユーザー」を設定しました。 5.サービスアカウントの認証キーを作成します。 Cloud Vision APIを実行する準備ができました。 Cloud ShellからCloud Vision APIを実行してみよう! それでは、Cloud ShellからCloud Vison APIを実行します。 1.Cloud Vison APIにアクセスするための、サービスアカウントで認証します。 $ gcloud auth activate-service-account --key-file=サービスアカウントの認証キー.json Activated service account credentials for: [cloud-vision-api-user@vison-api-XXXXXX.iam.gserviceaccount.com] 2.認証したサービスアカウントがアクティブになっていることを確認します。 $ gcloud auth list Credentialed Accounts ACTIVE: * ACCOUNT: cloud-vision-api-user@vison-api-XXXXXX.iam.gserviceaccount.com ACTIVE: ACCOUNT: miyatetsu@XXXXXX.XX.XX To set the active account, run: $ gcloud config set account `ACCOUNT` 3.Cloud Vision APIへのリクエストを作成します。今回は、オブジェクトのローカライズ機能のリクエストを作成します。 公式ドキュメントより、以下のJSONファイルを作成します。 { "requests": [ { "image": { "content": "BASE64でエンコードした画像データ" }, "features": [ { "maxResults": 最大結果数, "type": "OBJECT_LOCALIZATION" }, ] } ] } BASE64でエンコードした画像データは、公式ドキュメントに記載の通り、コマンドで作成しました。 $ base64 画像ファイル -w 0 > テキストファイル 4.Cloud Vison APIにリクエストを送信します。 $ curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: プロジェクトID" \ -H "Content-Type: application/json; charset=utf-8" \ -d @上記で作成したリクエストファイル.json \ "https://vision.googleapis.com/v1/images:annotate" 5.結果です。 画像データは、デモ画面で使用した「だるま」と「はさみ」の写真を使用しました。 また、最大結果数は10を設定しました。 { "responses": [ { "localizedObjectAnnotations": [ { "mid": "/m/01lsmm", "name": "Scissors", "score": 0.86188644, "boundingPoly": { "normalizedVertices": [ { "x": 0.13141711, "y": 0.18253087 }, { "x": 0.9785101, "y": 0.18253087 }, { "x": 0.9785101, "y": 0.9103911 }, { "x": 0.13141711, "y": 0.9103911 } ] } } ] } ] } デモ画面と同じように、Scissors(はさみ)が検出されていますね。 オブジェクトの位置は、4つの座標で取得できます。 画像の左上を(0,0)、右上を(1,0)、右下を(1,1)、左下を(0,1)とした場合のオブジェクトの位置が復帰します(ピクセル座標ではありません)。 下記の画像のように4つの座標を線で結ぶことで検出したモノを四角く切り抜くことができます。 PHPを使ってCloud Vision APIを実行してみよう! 次に、プログラムからCloud Vison APIを実行してみましょう。 今回は、PHPで実装してみました。PHPのバージョンは、8.1を利用しました。 1.PHPのライブラリ管理ツールであるComposerを使用して、Cloud Vision APIのライブラリを追加します。 $ composer require google/cloud-vision 2.Cloud Vision APIを実行するPHPプログラムです。 <?php require_once "vendor/autoload.php"; use Google\Cloud\Vision\V1\ImageAnnotatorClient; // サービスアカウントを使用して、ImageAnnotatorClientを生成します。 $option = []; $option['credentials'] = 'サービスアカウントの認証キー.json'; $imageAnnotatorClient = new ImageAnnotatorClient($option); // Cloud Vision API に オブジェクトのローカライズ機能のリクエストを行います。 // 画像ファイルは、PHPプログラムと同じフォルダに格納しています。 $imageContent = file_get_contents('daruma_to_hasami.jpg'); $response = $imageAnnotatorClient->objectLocalization($imageContent); // 結果を表示します。 foreach($response->getLocalizedObjectAnnotations() as $object){ $name = $object->getName(); $score = $object->getScore(); $vertices = $object->getBoundingPoly()->getNormalizedVertices(); echo 'name=' . $name . ' score=' . $score; echo PHP_EOL; foreach ($vertices as $vertex) { echo ' x=' . $vertex->getX() . ' y=' . $vertex->getY(); echo PHP_EOL; } print(PHP_EOL); } // ImageAnnotatorClientを閉じます。 $imageAnnotatorClient->close(); 3.実行結果です。 $ php vision.php name=Scissors score=0.86188644170761 x=0.13141711056232 y=0.1825308650732 x=0.97851008176804 y=0.1825308650732 x=0.97851008176804 y=0.91039109230042 x=0.13141711056232 y=0.91039109230042 Cloud ShellからCloud Vision APIを実行と同じように結果を取得することができました。 今回はPHPで作成しましたが、さまざまな言語でライブラリが提供されています。 いろいろなアプリケーションに組み込むことができそうですね。 他の言語(Go、Java、Node.js、Python、C#、Ruby)は、公式ドキュメントを参照してください。 まとめ 今回は、Cloud Vision APIのオブジェクトのローカライズ機能を試してみました。 事前にトレーニングされたAIを利用しているため、一般的な形のモノは識別できますが、特殊な形のモノは識別できませんでした。 しかしながら、小難しいAIの知識がなくても、APIを実行するだけでなので、気軽に利用できます。 また、オブジェクトのローカライズ機能以外にも、たくさんの機能があります。 画像から何かを抽出したいときなど、とても便利に利用できるのではないでしょうか。 みなさんも是非、使ってみてくださいね。 最後まで、ご覧いただきありがとうございました。 当社、システムサポートは、Google Cloudの導入・移行・運営支援を行っています。 お問い合わせは以下よりお願いいたします。 Google Cloud導入についてのお問い合わせはこちら 関連コンテンツ 頂きましたご意見につきましては、今後のより良い商品開発・サービス改善に活かしていきたいと考えております。 よく分かった もっと知りたい 参考になった 使ってみたい よく分からなかった Cloud Visionすごい だるまが認識されず残念 Author みやてつ 2012年に新卒で入社して約10年になりました。JavaやPHPなど、レガシーなアプリケーションを中心に開発してきましたが、現在は、AzureやGoogle Cloudなどクラウド技術について勉強中。 2023年5月16日 【Google Cloud】Vision APIで画像に写っているモノを検出してみよう! Category Google Cloud 前の記事を読む 【Google Cloud】使えると便利!一般公開データセットとは?(使い方あり)【BigQuery】 次の記事を読む 【Google Cloud】BIツール徹底比較!地図編 Recommendation オススメ記事 2023年9月5日 Google Cloud 【Google Cloud】Looker Studio × Looker Studio Pro × Looker を徹底比較!機能・選び方を解説 2023年8月24日 Google Cloud 【Google Cloud】Migrate for Anthos and GKEでVMを移行してみた(1:概要編) 2022年10月10日 Google Cloud 【Google Cloud】AlloyDB と Cloud SQL を徹底比較してみた!!(第1回:AlloyDB の概要、性能検証編) BigQuery ML ワークショップ開催のお知らせ 生成AI導入支援パッケージ Discovery AI導入支援パッケージ Google Cloud ホワイトペーパー 新着記事 2024年9月30日 Google Cloud 【Google Cloud】サーバレスでマネージドなサービス「Cloud Run」でアプリケーションを走らせよう! 2024年9月27日 技術開発 モブレビューを導入して分かったメリットとデメリットについて 2024年9月26日 Google Cloud 自然言語でデータを可視化できるLookerのExplore Assistantを試してみた HOME Google Cloud 【Google Cloud】Vision APIで画像に写っているモノを検出してみよう! ご意見・ご相談・料金のお見積もりなど、お気軽にお問い合わせください。 お問い合わせはこちら HOME Categories お知らせ イベント・セミナー Google Cloud Google Workspace モバイル インフラ 技術開発 ブログ 4koma Tags 生成AI(Generative AI) Looker Studio BigQuery AlloyDB Google Workspace 事例紹介 Cloud SQL STSエンジニアリングマガジン 「サイタル」