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 サービスのご利用経験についてどのように評価されますか?

初心者 中級者 上級者

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

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

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 の基本機能の 1 つに、画像内のオブジェクトやエンティティを識別するラベル アノテーションがあります。ラベル検出により、一般的な物体、場所、活動、動物の種類、商品などを識別できます。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 Console に移動します。
  • シャットダウンするプロジェクトを選択し、上部の [削除] をクリックします。これにより、プロジェクトの削除がスケジュールされます。

詳細

ライセンス

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