このチュートリアルでは、画像をAzure Blob Storageにアップロードし、Azure FunctionsとComputer Visionを使用して処理する方法について説明します。 また、Azure関数のトリガーとバインドをこのプロセスの一部として実装する方法についても説明します。 これらのサービスを一緒に使用して、テキストを含むアップロードされた画像を分析し、テキストを抽出してから、その後の分析などの目的のためにデータベース行にテキストを格納します。
Azure Blob Storageは、クラウド向けの Microsoft の非常にスケーラブルなオブジェクト ストレージ ソリューションです。 Blob Storageは、イメージとドキュメントの格納、メディア ファイルのストリーミング、バックアップとアーカイブのデータの管理などを目的として設計されています。 Blob Storageの詳細については、overview ページを参照してください。
Azure Functionsは、高度にスケーラブルな、サーバーレスなイベント ドリブン関数としてコードの小さなブロックを記述して実行できるサーバーレス コンピューター ソリューションです。 Azure Functionsの詳細については、overview ページを参照してください。
このチュートリアルでは、以下の内容を学習します。
- 画像とファイルをBlob Storageにアップロードする
- Azure関数イベント トリガーを使用して、Blob Storageにアップロードされたデータを処理する
- Foundry Tools を使用して画像を分析する
- Azure関数の出力バインドを使用して Table Storage にデータを書き込む
Prerequisites
- アクティブなサブスクリプションを持つAzure アカウント。 無料でアカウントを作成できます。
- Visual Studio 2022
ストレージ アカウントとコンテナーを作成する
最初の手順では、アップロードされた BLOB データを保持するストレージ アカウントを作成します。このシナリオでは、テキストを含むイメージです。 ストレージ アカウントにはいくつかの異なるサービスが用意されていますが、このチュートリアルではBlob Storageと Table Storage を利用します。
Azure ポータルにサインインします。
ポータルの上部にある検索バーで、''ストレージ'' を検索し、ストレージ アカウントというラベルの付いた結果を選択します。
[ストレージ アカウント] ページで、左上にある [+ 作成] を選択します。
[ストレージ アカウントの作成] ページで、次の値を入力します。
- サブスクリプション: 目的のサブスクリプションを選びます。
- リソース グループ: [新規作成] を選択し、 の名前を入力してから、[OK] を選択します。
- ストレージ アカウント名: の値を入力します。 ストレージ アカウント名はAzure全体で一意である必要があるため、
msdocsstoragefunction123など、名前の後に番号を追加する必要がある場合があります。 - リージョン: 最も近いリージョンを選択します。
- パフォーマンス: [Standard] を選びます。
- 冗長性: 既定値を選択したままにします。
下部にある Review + Create を選択し、入力した情報Azure検証します。 設定が検証されたら、Create を選択し、ストレージ アカウントのプロビジョニングを開始Azure。しばらく時間がかかる場合があります。
コンテナーの作成
ストレージ アカウントがプロビジョニングされた後、[リソースに移動] を選択します。 次の手順では、アカウント内にストレージ コンテナーを作成し、アップロードされた画像を分析のために保持します。
ナビゲーション パネルで、[コンテナー] を選びます。
[コンテナー] ページで、上部にある [+ コンテナー] を選択します。 スライド式のパネルで、[名前] に「imageanalysis」と入力し、[パブリック アクセス レベル] が [BLOB (BLOB 専用の匿名読み取りアクセス)] に設定されていることを確認します。 [作成] を選択します。
新しいストレージ コンテナーを作成する方法を示すスクリーンショット。
新しいコンテナーがコンテナーのリストに表示されるはずです。
接続文字列を取得する
最後の手順では、ストレージ アカウントの接続文字列を取得します。
左側のナビゲーション パネルで、[アクセス キー] を選択します。
[アクセス キー] ページで、[キーの表示] を選択します。 key1 セクションの下にある接続文字列の値をコピーし、後で使用するために使用するキーをどこかに貼り付けます。 後で使用するために、ストレージ アカウント名 も書き留めておきます。
ストレージ コンテナーにアクセスする方法を示すスクリーンショット。
これらの値は、Azure関数をこのストレージ アカウントに接続する必要がある場合に必要です。
Computer Vision サービスを作成する
次に、アップロードしたファイルを処理するComputer Vision サービス アカウントを作成します。 Computer Visionは Foundry Tools の一部であり、画像からデータを抽出するためのさまざまな機能を提供します。 Computer Visionの詳細については、overview ページを参照してください。
ポータルの上部にある検索バーで、Computer を検索し、Computer Vision というラベルの付いた結果を選択します。
[Computer Vision] ページで、[+ 作成] を選択します。
Create Computer Vision ページで、次の値を入力します。
- サブスクリプション: 目的のサブスクリプションを選びます。
- リソース グループ: 前に作成した リソース グループを使用します。
- リージョン: 最も近いリージョンを選択します。
- 名前: の名前を入力します。
- 価格レベル: 利用可能な場合は [Free] を選び、それ以外の場合は [Standard S1] を選択します。
- 条件に同意する場合は、[責任ある AI 通知] ボックスをオンにします
下部にある [確認と作成] を選択します。 Azureは、入力した情報を検証するのに少し時間がかかります。 設定が検証されたら、Create を選択し、AzureがComputer Vision サービスのプロビジョニングを開始します。しばらく時間がかかる場合があります。
操作が完了したら、[ リソースに移動] を選択します。
キーを取得する
次に、Azure Function アプリで使用するComputer Vision サービスのシークレット キーとエンドポイント URL を見つける必要があります。
Computer Vision概要ページで、Keys と Endpoint を選択します。
[キーとエンドポイント] ページで、[キー 1] の値と [エンドポイント] の値をコピーし、後で使用する場所に貼り付けます。
サンプル プロジェクトをダウンロードして構成する
このチュートリアルで使用するAzure関数のコードは、こちらのGitHubリポジトリにあります。 次のコマンドを使用して、プロジェクトを複製することもできます。
git clone https://github.com/Azure-Samples/msdocs-storage-bind-function-service.git \
cd msdocs-storage-bind-function-service/dotnet
サンプル プロジェクト コードでは次のタスクを実行します。
- ストレージ アカウントと Computer Vision サービスに接続する環境変数を取得します。
- アップロードされたファイルを BLOB パラメーターとして受け入れる
- Computer Vision サービスを使用して BLOB を分析します
- 出力バインドを使用して、分析された画像テキストを新しいテーブル行に送信する
プロジェクトをダウンロードして開くと、次に示す主要な 方法で理解する必要がある重要な概念がいくつかあります。 Azure関数は、Run メソッド シグネチャの属性を使用して適用される Trigger バインドと Output バインドを利用します。
属性では 2 つのパラメーターを使用します。 最初のパラメーターでは、関数によって返される解析された画像テキスト値を書き込むためのテーブルの名前が指定されます。 2 番目の Connection パラメーターは、Azure関数がアクセスできるように、環境変数から Table Storage 接続文字列をプルします。
BlobTrigger属性は、Blob Storageのアップロード イベントに関数をバインドするために使用され、アップロードされた BLOB を Run 関数に提供します。 BLOB トリガーには、アップロードを監視する BLOB コンテナーの名前用と、ストレージ アカウントの接続文字列用の 2 つのパラメーターがあります。
// Azure Function name and output Binding to Table Storage
[FunctionName("ProcessImageUpload")]
[return: Table("ImageText", Connection = "StorageConnection")]
// Trigger binding runs when an image is uploaded to the blob container below
public async Task<ImageContent> Run([BlobTrigger("imageanalysis/{name}",
Connection = "StorageConnection")]Stream myBlob, string name, ILogger log)
{
// Get connection configurations
string subscriptionKey = Environment.GetEnvironmentVariable("ComputerVisionKey");
string endpoint = Environment.GetEnvironmentVariable("ComputerVisionEndpoint");
string imgUrl = $"https://{ Environment.GetEnvironmentVariable("StorageAccountName")}
.blob.core.windows.net/imageanalysis/{name}";
ComputerVisionClient client = new ComputerVisionClient(
new ApiKeyServiceClientCredentials(subscriptionKey)) { Endpoint = endpoint };
// Get the analyzed image contents
var textContext = await AnalyzeImageContent(client, imgUrl);
return new ImageContent {
PartitionKey = "Images",
RowKey = Guid.NewGuid().ToString(), Text = textContext
};
}
public class ImageContent
{
public string PartitionKey { get; set; }
public string RowKey { get; set; }
public string Text { get; set; }
}
このコードでは、ストレージ アカウントの接続文字列やComputer Vision キーなど、環境変数から重要な構成値も取得します。 これらの環境変数は、デプロイ後に Azure Function 環境に追加します。
関数は、と呼ばれる 2 つ目のメソッドも利用します。 このコードでは、Computer Vision アカウントの URL エンドポイントとキーを使用して、イメージを処理するようにそのサーバーに要求します。 要求は、イメージで検出されたすべてのテキストを返します。このテキストは、 メソッドの出力バインドを使用して Table Storage に書き込まれます。
static async Task<string> ReadFileUrl(ComputerVisionClient client, string urlFile)
{
// Analyze the file using Computer Vision Client
var textHeaders = await client.ReadAsync(urlFile);
string operationLocation = textHeaders.OperationLocation;
Thread.Sleep(2000);
// Complete code omitted for brevity, view in sample project
return text.ToString();
}
ローカルでの実行
プロジェクトをローカルで実行する場合は、local.settings.json ファイルを使用して環境変数を設定できます。 このファイル内で、プレースホルダーの値に、Azure リソースの作成時に前に保存した値を入力します。
Azure関数コードはローカルで実行されますが、ローカル エミュレーターを使用するのではなく、Azure上のライブ サービスに引き続き接続します。
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"StorageConnection": "your-storage-account-connection-string",
"StorageAccountName": "your-storage-account-name",
"ComputerVisionKey": "your-computer-vision-key",
"ComputerVisionEndPoint": "your-computer-vision-endpoint"
}
}
Azure Functionsにコードをデプロイする
これで、Visual Studioを使用してアプリケーションをAzureにデプロイする準備ができました。 デプロイ プロセスの一環として、AzureでAzure Functions アプリを同時に作成することもできます。
作業を開始するには、ProcessImage プロジェクト ノードを右クリックし、[発行] を選択します。
Publish ダイアログ画面で、Azureを選択し、Next を選択します。
次の画面で Azure Function App (Windows) または Azure Function App (Linux) を選択し、もう一度 Next を選択します。
[Functions インスタンス] ステップで、デプロイ先のサブスクリプションを必ず選択してください。 次に、ダイアログの右側にある緑色の 記号を選択します。
新しいダイアログが開きます。 新しい関数アプリに対して次の値を入力します。
- 名前: msdocsprocessimage などと入力します。
- サブスクリプション名: 使用する任意のサブスクリプションを選びます。
- リソース グループ: 前に作成した リソース グループを選びます。
- プランの種類: [従量課金] を選択します。
- 場所: 最も近いリージョンを選びます。
- Azure Storage: 前に作成したストレージ アカウントを選択します。
これらの値をすべて入力したら、[ 作成] を選択します。 Visual Studioし、Azure要求されたリソースのプロビジョニングを開始します。完了するまでに少し時間がかかります。
プロセスが完了したら、[ 完了] を選択してダイアログ ワークフローを閉じます。
Azure関数をデプロイする最後の手順は、画面の右上にある Publish を選択することです。 関数の公開も完了するまでに少し時間がかかる場合があります。 完了すると、アプリケーションはAzureで実行されます。
サービスへの接続
Azure関数は正常にデプロイされましたが、ストレージ アカウントとComputer Vision サービスにまだ接続できません。 正しいキーと接続文字列は、まず、Azure Functions アプリの構成設定に追加する必要があります。
Azure ポータルの上部で、function を検索し、結果から Function App を選択します。
Function App 画面で、Visual Studioで作成した関数アプリを選択します。
関数アプリの概要ページで、左側のナビゲーションで [構成] を選択して、アプリのさまざまな種類の構成設定を管理できるページを開きます。 現時点では、[アプリケーションの設定] セクションに関心があります。
次の手順では、ストレージ アカウント名と接続文字列、Computer Visionシークレット キー、およびComputer Vision エンドポイントの設定を追加します。
[アプリケーションの設定] タブで、[+ 新しいアプリケーション設定] を選択します。 表示されるポップアップに、次の値を入力します。
- 名前: ComputerVisionKey の値を入力します。
- Value: 前に保存したComputer Vision キーを貼り付けます。
[ OK] を 選択して、この設定をアプリに追加します。
Azure Function に新しいアプリケーション設定を追加する方法を示すスクリーンショット
次に、次の値を使用して、Computer Vision サービスのエンドポイントに対してこのプロセスを繰り返します。
- 名前: ComputerVisionEndpoint の値を入力します。
- 値: 以前に保存したエンドポイント URL を貼り付けます。
次の値を使用して、ストレージ アカウント接続に対してこの手順をもう一度繰り返します。
- 名前: StorageConnection の値を入力します。
- Value: 前に保存した接続文字列に貼り付けます。
最後に、次の値を使用して、ストレージ アカウント名に対してこのプロセスをもう一度繰り返します。
- 名前: StorageAccountName の値を入力します。
- 値: 作成したストレージ アカウントの名前を入力します。
これらのアプリケーション設定を追加したら、構成ページの上部にある [保存] を選択してください。 保存が完了したら、[更新] をクリックして、設定が選択されていることを確認することもできます。
Azure関数をさまざまなサービスに接続するために必要なすべての環境変数が用意されています。
Blob Storageに画像をアップロードする
これで、アプリケーションをテストする準備ができました。 BLOB をコンテナーにアップロードしてから、画像内のテキストが Table Storage に保存されたことを確認できます。
まず、Azure ポータルの上部で、Storage を検索し、storage アカウントを選択します。 [ストレージ アカウント] ページで、前に作成したアカウントを選択します。
次に、左側のナビゲーションで [コンテナー] を選択し、前に作成した ImageAnalysis コンテナーに移動します。 ここから、ブラウザー内でテスト画像をアップロードできます。
ストレージ コンテナーに移動する方法を示すスクリーンショット。
ダウンロード可能なサンプル プロジェクトのルートにある images フォルダーに含まれるいくつかのサンプル画像を見つけることができます。独自のものを使用することもできます。
ImageAnalysis ページの上部にある [アップロード] を選択します。 開いたポップアップで、フォルダー アイコンを選択してファイル ブラウザーを開きます。 アップロードする画像を選んでから、[アップロード] を選択します。
ストレージ コンテナーに BLOB をアップロードする方法を示すスクリーンショット。
ファイルは BLOB コンテナー内に表示されるはずです。 次に、アップロードによってAzure関数がトリガーされたこと、およびイメージ内のテキストが分析され、Table Storage に正しく保存されたことを確認できます。
ページの上部にある階層リンクを使用して、ストレージ アカウントの 1 つ上のレベルに移動します。 左側のナビゲーションで [ストレージ ブラウザー] を見つけて選択し、[テーブル] を選択します。
これで ImageText テーブルを使用できるはずです。 テーブルを選択して、その中のデータ行をプレビューします。 アップロードの処理済み画像テキストのエントリが表示されるはずです。 これは、タイムスタンプを使用するか、[テキスト] 列の内容を表示することで確認できます。
Congratulations! Azure FunctionsとComputer Visionを使用して、Blob Storageにアップロードされたイメージの処理に成功しました。
リソースをクリーンアップする
このアプリケーションを引き続き使用しない場合は、リソース グループを削除して作成したリソースを削除することができます。
- メイン ナビゲーションから、[リソース グループ] を選択します
- 一覧から リソース グループを選択します。
- リソース グループの概要ページの上部にある [リソース グループの削除] ボタンを選択します。
- 確認ダイアログにリソース グループ名 msdocs-storage-function を入力します。
- [削除] を選択します。 リソース グループを削除するプロセスが完了するまでに数分かかる場合があります。