C# で Vision API を使用する

1. 概要

Google Cloud Vision API を使用すると、デベロッパーはアプリケーション内に画像検出機能を簡単に統合できます。この機能の例としては、画像ラベリング、顔やランドマークの検出、光学式文字認識(OCR)、不適切なコンテンツへのタグ付けがあります。

この Codelab では、C# で Vision API を使用する方法に重点を置きます。テキスト検出、ランドマーク検出、顔検出を実行する方法を学びます。

学習内容

  • Cloud Shell を使用する方法
  • Google Cloud Vision API を有効にする方法
  • API リクエストを認証する方法
  • C# 用 Vision API クライアント ライブラリをインストールする方法
  • ラベル検出を行う方法
  • テキスト検出を行う方法
  • ランドマーク検出を行う方法
  • 顔検出を行う方法

必要なもの

  • Google Cloud Platform プロジェクト
  • ChromeFirefox などのブラウザ
  • C# の使用経験

アンケート

このチュートリアルをどのように使用されますか?

通読するのみ 通読し、演習を行う

C# の使用感をどのように評価されますか。

初心者 中級者 上級者

Google Cloud Platform サービスのご利用経験についてどのように評価されますか?

<ph type="x-smartling-placeholder"></ph> 初心者 中級 上達 をご覧ください。

2. 設定と要件

セルフペース型の環境設定

  1. Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。いつでも更新できます。
  • プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は PROJECT_ID と識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ ID になります。
  • なお、3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
  1. 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクトを削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。

Cloud Shell を起動する

Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。

Cloud Shell をアクティブにする

  1. Cloud Console で、[Cloud Shell をアクティブにする] d1264ca30785e435.png をクリックします。

cb81e7c8e34bc8d.png

Cloud Shell を初めて起動する場合は、内容を説明する中間画面が表示されます。中間画面が表示されたら、[続行] をクリックします。

d95252b003979716.png

Cloud Shell のプロビジョニングと接続に少し時間がかかる程度です。

7833d5e1c5d18f54.png

この仮想マシンには、必要なすべての開発ツールが読み込まれます。5 GB の永続的なホーム ディレクトリが用意されており、Google Cloud で稼働するため、ネットワークのパフォーマンスと認証が大幅に向上しています。この Codelab での作業のほとんどはブラウザを使って行うことができます。

Cloud Shell に接続すると、認証が完了し、プロジェクトに各自のプロジェクト ID が設定されていることがわかります。

  1. Cloud Shell で次のコマンドを実行して、認証されたことを確認します。
gcloud auth list

コマンド出力

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Cloud Shell で次のコマンドを実行して、gcloud コマンドがプロジェクトを認識していることを確認します。
gcloud config list project

コマンド出力

[core]
project = <PROJECT_ID>

上記のようになっていない場合は、次のコマンドで設定できます。

gcloud config set project <PROJECT_ID>

コマンド出力

Updated property [core/project].

3. Vision API を有効にする

Vision API を使用するには、その前に API を有効にする必要があります。Cloud Shell で次のコマンドを使用して API を有効にできます。

gcloud services enable vision.googleapis.com

4. C# 用 Google Cloud Vision API クライアント ライブラリをインストールする

まず、Vision API サンプルの実行に使用するシンプルな C# コンソール アプリケーションを作成します。

dotnet new console -n VisionApiDemo

アプリケーションが作成され、依存関係が解決されたことがわかります。

The template "Console Application" was created successfully.
Processing post-creation actions...
...
Restore succeeded.

次に、VisionApiDemo フォルダに移動します。

cd VisionApiDemo/

次に、Google.Cloud.Vision.V1 NuGet パッケージをプロジェクトに追加します。

dotnet add package Google.Cloud.Vision.V1
info : Adding PackageReference for package 'Google.Cloud.Vision.V1' into project '/home/atameldev/VisionApiDemo/VisionApiDemo.csproj'.
log  : Restoring packages for /home/atameldev/VisionApiDemo/VisionApiDemo.csproj...
...
info : PackageReference for package 'Google.Cloud.Vision.V1' version '1.2.0' added to file '/home/atameldev/VisionApiDemo/VisionApiDemo.csproj'.

これで Vision API を使用する準備が整いました。

5. ラベル検出を実行する

Vision API の基本機能の一つは、ラベル アノテーションと呼ばれる、画像内のオブジェクトやエンティティを識別することです。ラベル検出では、一般的な物体、場所、活動、動物の種類、商品などを識別します。Vision API は入力画像を受け取り、その画像に適用されている可能性が最も高いラベルを返します。最も一致するラベルと、画像との一致の信頼スコアが返されます。

この例では、上海の街並みの画像に対してラベル検出を行います。Cloud Shell の右上からコードエディタを開きます。

92ea233083f961c5.png

VisionApiDemo フォルダ内の Program.cs ファイルに移動し、コードを次のように置き換えます。

using Google.Cloud.Vision.V1;
using System;

namespace VisionApiDemo
{
    class Program
    {   
        static void Main(string[] args)
        {
            var client = ImageAnnotatorClient.Create();
            var image = Image.FromUri("gs://cloud-samples-data/vision/using_curl/shanghai.jpeg");
            var labels = client.DetectLabels(image);

            Console.WriteLine("Labels (and confidence score):");
            Console.WriteLine(new String('=', 30));

            foreach (var label in labels)
            {
                Console.WriteLine($"{label.Description} ({(int)(label.Score * 100)}%)");
            }
        }
    }
}

1 ~ 2 分かけてコードを学習し、Vision API C# ライブラリを使用してラベル検出を実行する方法を確認してください。

Cloud Shell に戻り、アプリを実行します。

dotnet run 

次の出力が表示されます。

Labels (and confidence score):
==============================
Wheel (97%)
Tire (97%)
Photograph (94%)
Bicycle (94%)
Motor vehicle (89%)
Infrastructure (89%)
Vehicle (86%)
Mode of transport (84%)
Bicycle wheel (83%)
Asphalt (81%)

概要

このステップでは、中国のストリート シーンの画像に対してラベル検出を実行し、その画像に関連付けられた可能性が最も高いラベルを表示することができました。ラベル検出の詳細を確認する。

6. テキスト検出を実行する

Vision API のテキスト検出は、光学式文字認識を実行します。画像内のテキストを検出して抽出します。幅広い言語に対応しています。言語の自動識別機能も備えています。

この例では、システム ソフトウェアの更新画面の画像に対してテキスト検出を行います。

VisionApiDemo フォルダ内の Program.cs ファイルに移動し、コードを次のように置き換えます。

using Google.Cloud.Vision.V1;
using System;

namespace VisionApiDemo
{
    class Program
    {   
        static void Main(string[] args)
        {
            var client = ImageAnnotatorClient.Create();
            var image = Image.FromUri("gs://cloud-samples-data/vision/text/screen.jpg");
            var response = client.DetectText(image);
            foreach (var annotation in response)
            {
                if (annotation.Description != null)
                {
                    Console.WriteLine(annotation.Description);
                }
            }
        }
    }
}

1 ~ 2 分かけてコードを学習し、Vision API C# ライブラリを使用してテキスト検出を実行する方法を確認してください。

Cloud Shell に戻り、アプリを実行します。

dotnet run 

次の出力が表示されます。

System Software Update
Back
Preparing to install...
After preparation is complete, the PS4 will automatically restart and the update file will be
installed.
37%
gus class
System
Software
Update
Back
Preparing
to
install
...
After
preparation
is
complete
,
the
PS4
will
automatically
restart
and
the
update
file
will
be
installed
.
37
%
gus
class

概要

このステップでは、カワウソの交差点の画像に対してテキスト検出を行い、画像から認識されたテキストを出力することができました。テキスト検出の詳細を確認する。

7. ランドマーク検出を実行する

Vision API のランドマーク検出は、よく知られている自然のランドマークや人工の建造物を画像から検出します。

この例では、エッフェル塔の画像に対してランドマーク検出を行います。

VisionApiDemo フォルダ内の Program.cs ファイルに移動し、コードを次のように置き換えます。

using Google.Cloud.Vision.V1;
using System;

namespace VisionApiDemo
{
    class Program
    {   
        static void Main(string[] args)
        {
            var client = ImageAnnotatorClient.Create();
            var image = Image.FromUri("gs://cloud-samples-data/vision/eiffel_tower.jpg");
            var response = client.DetectLandmarks(image);
            foreach (var annotation in response)
            {
                if (annotation.Description != null)
                {
                    Console.WriteLine(annotation.Description);
                }
            }
        }
    }
}

1 ~ 2 分ほどかけてコードを学習し、Vision API C# ライブラリを使用してランドマーク検出を実行する方法を確認してください。

Cloud Shell に戻り、アプリを実行します。

dotnet run

次の出力が表示されます。

Eiffel Tower

概要

このステップでは、エッフェル塔の画像に対してランドマーク検出を実行できました。詳しくは、ランドマーク検出をご覧ください。

8. 感情に訴える顔検出を行う

顔検出は、感情や帽子など、関連する主な顔属性とともに、画像に含まれる複数の顔を検出します。

この例では、喜び、怒り、悲しみ、驚きという 4 種類の感情の可能性から感情の状態の可能性を検出します。

VisionApiDemo フォルダ内の Program.cs ファイルに移動し、コードを次のように置き換えます。

using Google.Cloud.Vision.V1;
using System;

namespace VisionApiDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = ImageAnnotatorClient.Create();

            var image = Image.FromUri("gs://cloud-samples-data/vision/face/face_no_surprise.jpg");
            var response = client.DetectFaces(image);
            foreach (var annotation in response)
            {
                Console.WriteLine($"Picture: {image}");
                Console.WriteLine($" Surprise: {annotation.SurpriseLikelihood}");
            }
        }
    }
}

1 ~ 2 分ほどかけてコードを学習し、Vision API の C# ライブラリを使用して感情的な顔検出を実行する方法を確認してください。

アプリを実行します。

dotnet run

face_no_surprise の例の場合、次の出力が表示されます。

Picture: { "source": { "imageUri": "gs://cloud-samples-data/vision/face/face_no_surprise.jpg" } }
 Surprise: Likely

概要

このステップでは、顔検出を実行できました。詳しくは、顔検出についての説明をご覧ください。

9. 完了

C# で Vision API を使用し、画像に対してさまざまな検出を行う方法を学びました。

クリーンアップ

このクイックスタートで使用するリソースに対して Google Cloud Platform アカウントに課金されないようにするには:

  • Cloud Platform コンソールに移動します。
  • シャットダウンするプロジェクトを選択し、[削除] をクリックしますプロジェクトの削除がスケジュールされます。

詳細

ライセンス

この作業はクリエイティブ・コモンズの表示 2.0 汎用ライセンスにより使用許諾されています。