前回の(1)はこちらから。
今回のシステム構成
今回は、HTTPリクエストで指定された画像URLから人物の顔を認識し、性別と年齢の判定結果をJSONで返すシステムを作ります。
ここからは、Azureのアカウントを取得している前提で説明します。Azureのアカウントをお持ちではない場合、無料アカウントを取得しておいてください。
システム構成は図3となります。AzureではFunctionsやFace APIなどの各サービスをシステムに組み込むとき、それらを指してリソースと呼びます。たとえばリソースとしてのFunctionsを指す場合、Functionsリソースと呼びます。Functions、Face APIについては次項以降で説明します。
また、Azureでは複数のリソースを内包したプロジェクト単位の入れ物として、リソースグループがあります。リソースどうしはリソースグループを越えて相互にアクセスできます(図4)。
Functions── プログラム実行部分を担当
今回Functionsは、HTTPリクエストを受け関数を実行し、HTTPレスポンスを返す部分を担当します。クエリパラメータにimage
という名前で画像URLが渡されることを期待します。
関数で利用されるPerlスクリプトでは、後述するFace APIに対して画像URLを引き渡し、顔認識の結果を受け取ります。そして受け取ったデータを整形し、クライアントへのレスポンスとして出力します。
Face API ── 顔認識を担当
Face APIは、Azure Cognitive Servicesで提供されるAPIの一つです。Azure Cognitive Serviceは、AI(Artificial Intelligence、人工知能)やデータサイエンスの恩恵を受けたアプリケーション向けに用意されたサービス群です。Face APIは次のことができます。
- 画像から人物の顔に関する情報(年齢、性別、表情、座標、幅や高さなど)を抽出する
- 2つの人物画像から、同一人物であるか否かを判断する
- あらかじめ学習した人物を、画像から特定する
今回は簡単な例として、画像から人物の顔を認識し、年齢と性別を抽出する役割を担当します。
Azure CLI環境の準備
Azureの操作手段は、Azure Portalでブラウザから操作する方法と、Azure CLI v2(執筆時点ではv2.0.52)でターミナルから操作する方法があります。
どちらで操作しても同じ結果となりますが、AzurePortalは日々改善されており、ある日を境にレイアウトなどが変わる可能性があります。そこで本稿では、Azure CLI v2の利用を強く推奨します[1]。
Azure CLIを利用するもう一つの大きなメリットは、リソース構成管理の自動化です。Azure CLIを使ったbashスクリプトを用意しておくと、スクリプトを起動するだけで毎回同じ構成を再現できます。Azure CLIをAnsible経由で利用することもできます。
Azure CLI v2のインストール
公式ドキュメントのインストール方法に沿って、Azure CLI v2をインストールします。
Windowsの場合、MSI形式のインストーラにしたがってインストールを進めてください。
macOSの場合、先にHomebrewをインストールしてから、次のコマンドでAzure CLIをインストールしてください。
インストールが完了すると、ターミナルからaz
コマンドが利用可能となります。
英語版のみとなりますが、Azure CLIのコマンドリファレンスが公開されています。詳細な使い方はこちらを確認してください。
Azure CLIでAzureにログイン
Azure CLIでAzureを操作するためには、次のコマンドでAzureにログインする必要があります。
az login
を実行するとブラウザが開き、Azureアカウントでのログインを尋ねられます。アカウントとパスワードを入力してログインしてください。az
では処理成功時に、標準出力にJSONを出力します。ターミナルにJSONが出力されればログイン成功です。
Azureリソースの設定
それでは、図3で示したシステム構成をAzure上に設定します。
リソースグループの作成
始めにリソースグループを作成します。次のコマンドを実行すると、Azureの東日本リージョンにfacedetect
リソースグループが作成されます。
ストレージアカウントの作成
次はストレージアカウントを作成します。図3にはストレージアカウントが描かれていませんが、Functionsを動作させるために必要です。ストレージアカウントは、次のコマンドで作成できます。
--resource-group
には先ほど作成したリソースグループ名を、--name
には新規作成するストレージアカウント名を指定します。--sku
はStock Keeping Unitの略で、ここではストレージアカウントのパフォーマンスレベルとレプリケーションオプションの組み合わせを意味します。FunctionsではパフォーマンスレベルがStandardかつ、レプリケーションオプションがLRS(ローカル冗長ストレージ)の組み合わせだけが利用可能ですので、この組み合わせを意味するStandard_LRS
を指定しておいてください。
Functionsリソースの作成
続いてFunctionsリソースを作成します。
--resource-group
にはリソースグループ名を、--storage-account
にはストレージアカウント名を、--consumption-plan-location
にはリソースグループと同じリージョンを指定します。
重要なのは--name
です。ここにはリソース名を指定します。ここで指定した名前はhttps://リソース名.azurewebsites.net/
の形式でURLに影響し、Azure全体でグローバルな名称となりますので、ほかと衝突しない名称に適宜置き換えてください。
ランタイムバージョンをv1に変更
できたばかりのFunctionsリソースは、ランタイムバージョンがv2ですのでv1に変更します。
ランタイムバージョンは、Functionsリソースのアプリケーション設定にある設定値FUNCTIONS_EXTENSION_VERSION
で定義されています。デフォルトでは~2
となっていますので、~1
に変更します。
Functionsリソースにおけるアプリケーション設定値の変更は、次のコマンドで行います。
--resource-group
にはリソースグループ名を、--name
にはリソース名を指定します。
--settings
は設定値の変更内容です。ここではFUNCTIONS_EXTENSION_VERSION=~1
を指定してください。
Face APIの設定
Face APIの設定では、Cognitive Servicesアカウントが必要です。
次のコマンドで、Cognitive Servicesアカウントの作成とFace APIの設定を行います。
--resource-group
にはリソースグループ名を、--name
にはCognitive Servicesアカウント名を指定します。--sku
にはFace APIの価格プランを指定します。価格プランはF0(無料プラン)とS0(スタンダードプラン)を選ぶことができますが、ここでは無料プランのF0
を指定します。--location
にはリソースグループと同じリージョンを指定します。
--kind
がCognitive Serviceアカウントで利用するサービスの種類の設定です。今回はFace APIを利用したいのでFace
とします。
これで、Azureリソースの設定は完了です。
<続きの(3)はこちら。>
- 特集1
イミュータブルデータモデルで始める
実践データモデリング
業務の複雑さをシンプルに表現!
- 特集2
いまはじめるFlutter
iOS/Android両対応アプリを開発してみよう
- 特集3
作って学ぶWeb3
ブロックチェーン、スマートコントラクト、NFT