Contents
1. Azure 環境の準備とリソース作成
1‑1. 無料アカウントで始める
| 手順 | 内容 |
|---|---|
| サインアップ | https://azure.microsoft.com/free/ にアクセスし、Microsoft アカウントでサインイン。クレジットカード情報は課金防止のために必要です(利用料が 0 USD を超えると請求されます)。 |
| 無料クレジット | 登録直後に 200 USD 分のクレジット が付与され、30 日間有効。無料枠として AI サービスは月 5,000 件まで料金がかかりません。 |
| サブスクリプション作成 | ポータル左メニュー > 「サブスクリプション」→「+ 作成」で名前を付けて完了。 |
1‑2. リソースグループとリージョン
|
1 2 3 |
リソースグループ名 : rg-image-ai 推奨リージョン : japaneast(東日本)または japanwest(西日本) |
同一リソースグループに Computer Vision、Custom Vision、Blob Storage をまとめると権限管理がシンプルになります。
1‑3. 必要なリソースをデプロイ
Azure ポータルまたは Azure CLI(以下の例)で作成します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# 1) リソースグループ作成 az group create -n rg-image-ai -l japaneast # 2) Computer Vision 用 Cognitive Services アカウント az cognitiveservices account create \ -g rg-image-ai -n vision2024 \ --kind ComputerVision --sku S0 --location japaneast \ --yes # 3) Custom Vision のトレーニングリソース(別途作成が必要です) az cognitiveservices account create \ -g rg-image-ai -n customvision2024 \ --kind CustomVision.Training --sku S0 --location japaneast \ --yes # 4) Blob Storage(データ保管用) az storage account create \ -g rg-image-ai -n imgstorage2024 \ -l japaneast --sku Standard_LRS |
2. Computer Vision と Custom Vision の比較ポイント
| 項目 | Azure AI Vision (Computer Vision) | Custom Vision |
|---|---|---|
| 対象 | 汎用画像解析(タグ付与、物体検出、テキスト抽出) | ユーザーが定義したクラスやオブジェクトの分類・検出 |
| 学習コスト | なし(即時利用可) | データラベリングとモデル訓練が必要 |
| 料金体系 | 従量課金+無料枠 (月 5,000 件) | 訓練回数・予測リクエストに応じた従量課金 |
| 推奨シナリオ | 商品カタログ自動タグ付け、画像検索、ドキュメント OCR | 製造ラインの不良品判別、社内文書の独自分類 |
| API エンドポイント | https://{region}.api.cognitive.microsoft.com/vision/v3.2/analyze(バージョンは随時更新) |
https://{region}.api.cognitive.microsoft.com/customvision/v3.0/Prediction/{projectId}/classify/iterations/{iterationName}/image |
| 認証方式 | サブスクリプションキーまたは Azure AD トークン(どちらか一方で統一) | 主にサブスクリプションキー(予測リソース用) |
選定の目安
- 汎用的な解析だけが必要 → Computer Vision をそのまま利用。
- 独自クラスや高精度カスタムモデルが必須 → Custom Vision でデータを集めて学習。
3. データセット作成と Custom Vision でのモデル訓練フロー
3‑1. 画像を Blob Storage に格納
|
1 2 3 4 5 6 7 8 |
# ストレージアカウントにコンテナ作成 az storage container create -n training-data --account-name imgstorage2024 # ローカルディレクトリ ./dataset の全画像を一括アップロード az storage blob upload-batch \ -d training-data -s ./dataset \ --account-name imgstorage2024 |
3‑2. 環境変数の設定(事前説明)
| 変数名 | 内容 | 設定例 |
|---|---|---|
VISION_ENDPOINT |
Computer Vision のエンドポイント URL(例: https://japaneast.api.cognitive.microsoft.com) |
export VISION_ENDPOINT=https://japaneast.api.cognitive.microsoft.com |
VISION_KEY |
Computer Vision 用サブスクリプションキー | export VISION_KEY=xxxxxxxxxxxx |
CUSTOM_VISION_PREDICTION_KEY |
Custom Vision の予測リソースキー | export CUSTOM_VISION_PREDICTION_KEY=yyyyyyyyyyyy |
AZURE_CLIENT_ID / AZURE_TENANT_ID / AZURE_CLIENT_SECRET |
Azure AD アプリ認証に使用(後述) | export AZURE_CLIENT_ID=... など |
3‑3. ラベリングとデータ品質
- Custom Vision ポータルでプロジェクト作成
- プロジェクト名、ドメイン(General Classification / Object Detection)を選択。
- 画像の追加
- 「URL から追加」ボタンで先ほど Blob に保存した画像 URL(SAS トークン付き)を貼り付け。
- ラベル付与のベストプラクティス
- クラスあたり 最低 5〜10 枚 のサンプルを確保し、全クラスでバランスが取れるようにする。
- 複数担当者がいる場合は「承認フロー」または「タグの命名規則」を設定し、ラベルの揺れを防止。
3‑4. 訓練・評価サイクル
| ステップ | 操作内容 |
|---|---|
| 1. アップロード | 画像とラベルがすべて揃ったら「アップロード」ボタンで保存。 |
| 2. 訓練開始 | 「Train」→「Standard」または「Advanced」(GPU が必要)を選択。 |
| 3. 評価指標 | 完了後に表示される Precision、Recall、mAP を確認。目標未達の場合はデータ増強やラベル修正を繰り返す。 |
| 4. パブリッシュ | 「Publish」→「Prediction Resource」を選び、エンドポイント URL とキーを取得。 |
4. Azure AI Vision と Custom Vision の統合実装例
4‑1. 認証方式の整理
- サブスクリプションキー はシンプルで Quick‑Start に適していますが、キー漏洩リスクがあります。
- Azure AD アプリ認証(クライアント ID/シークレットまたはマネージド ID)はローテーションや RBAC が可能なため、本番環境では推奨されます。
本稿のコード例は Azure AD 認証を使用 し、Computer Vision の呼び出しに
DefaultAzureCredentialを、Custom Vision の予測にはサブスクリプションキー(環境変数)を組み合わせたハイブリッド方式です。
4‑2. Python SDK(azure-ai-vision)と REST API の併用例
4‑2‑1. 前提ライブラリインストール
|
1 2 |
pip install azure-identity azure-ai-vision azure-cognitiveservices-vision-customvision |
4‑2‑2. 完全サンプルコード
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
import os from azure.identity import DefaultAzureCredential from azure.ai.vision import VisionClient, ImageAnalysisOptions from azure.cognitiveservices.vision.customvision.prediction import CustomVisionPredictionClient # ------------------------------------------------- # 1. 環境変数の取得(事前に export しておくこと) # ------------------------------------------------- VISION_ENDPOINT = os.getenv("VISION_ENDPOINT") VISION_KEY = os.getenv("VISION_KEY") # Computer Vision 用キー(代替として Azure AD でも可) CUSTOM_PREDICTION_KEY = os.getenv("CUSTOM_VISION_PREDICTION_KEY") if not all([VISION_ENDPOINT, VISION_KEY, CUSTOM_PREDICTION_KEY]): raise RuntimeError("必須環境変数が設定されていません。") # ------------------------------------------------- # 2. Azure AD 認証取得(Computer Vision の推奨方式) # ------------------------------------------------- credential = DefaultAzureCredential() # ローカルでは VS Code の認証、クラウドではマネージド ID が利用可能 # ------------------------------------------------- # 3. Computer Vision で画像解析(タグ・オブジェクト検出) # ------------------------------------------------- vision_client = VisionClient(endpoint=VISION_ENDPOINT, credential=credential) analysis_result = vision_client.analyze_image( url="https://<storage_account>.blob.core.windows.net/training-data/sample.jpg", visual_features=["Tags", "Objects"] ) print("=== Image Tags ===") for tag in analysis_result.tags: print(f"- {tag.name} ({tag.confidence:.2%})") print("\n=== Detected Objects ===") for obj in analysis_result.objects: print(f"- {obj.object_property} (confidence: {obj.confidence:.2%}) " f"at [{obj.rectangle.x}, {obj.rectangle.y}, {obj.rectangle.w}, {obj.rectangle.h}]") # ------------------------------------------------- # 4. Custom Vision の予測(サブスクリプションキー使用) # ------------------------------------------------- prediction_client = CustomVisionPredictionClient( endpoint=VISION_ENDPOINT, credentials=CUSTOM_PREDICTION_KEY # SDK では文字列だけで OK ) project_id = "YOUR_CUSTOM_VISION_PROJECT_ID" iteration_name = "Iteration1" # Publish 時に指定した名前 # ローカルファイルを直接送信する例(実運用では Blob の URL でも可) with open("sample.jpg", "rb") as img_file: prediction_result = prediction_client.classify_image( project_id, iteration_name, img_file.read() ) print("\n=== Custom Vision Predictions ===") for pred in prediction_result.predictions: print(f"- {pred.tag_name}: {pred.probability:.2%}") |
ポイント解説
- DefaultAzureCredential は開発環境(VS Code、Azure CLI)でも本番(App Service のマネージド ID)でも同一コードで動作します。
- Computer Vision 側は キー認証でも可能 ですが、サンプルでは Azure AD を示すことでベストプラクティスを提示しています。
- Custom Vision の予測エンドポイントは現時点(2024 年)ではサブスクリプションキーが唯一の認証手段です。
4‑3. サーバーレス統合例:Azure Functions (Python)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import logging, os, json, azure.functions as func from azure.identity import DefaultAzureCredential from azure.ai.vision import VisionClient VISION_ENDPOINT = os.getenv("VISION_ENDPOINT") credential = DefaultAzureCredential() vision_client = VisionClient(endpoint=VISION_ENDPOINT, credential=credential) def main(req: func.HttpRequest) -> func.HttpResponse: try: body = req.get_json() image_url = body["url"] result = vision_client.analyze_image( url=image_url, visual_features=["Tags", "Objects"] ) response = { "tags": [{t.name: t.confidence} for t in result.tags], "objects": [{ "name": o.object_property, "confidence": o.confidence, "bbox": [o.rectangle.x, o.rectangle.y, o.rectangle.w, o.rectangle.h] } for o in result.objects] } return func.HttpResponse(json.dumps(response), mimetype="application/json") except Exception as e: logging.error(e) return func.HttpResponse(str(e), status_code=500) |
- HTTP トリガーで画像 URL を受け取り、VisionClient だけで完結。
- 必要に応じて同関数内で Custom Vision の予測呼び出しを組み込めば、一つのエンドポイントで汎用解析とカスタム分類を提供可能です。
5. 運用・コスト管理と CI/CD ベストプラクティス
5‑1. コスト見積もり(2024 年料金表に基づく概算)
| サービス | 無料枠 | 従量課金例 |
|---|---|---|
| Computer Vision (Analyze) | 月 5,000 件まで $0 | 1,000 件あたり約 $1(S0 SKU) |
| Custom Vision 訓練 | なし | 1,000 回のトレーニングにつき約 $2 |
| Custom Vision 予測 | なし | 1,000 リクエスト ≈ $0.5 |
例)PoC の月間利用想定
- Computer Vision:3,000 件 → 無料枠内
- Custom Vision 訓練:150 回 → $0.30
- 予測リクエスト:8,000 件 → $4.00
合計 ≈ $4.30(無料枠分を差し引くとさらに削減可能)
5‑2. コスト削減テクニック
- 使用時間外のスケールダウン
- Azure Functions は Consumption プラン に切り替えるだけで課金は実行回数に比例。
- 結果キャッシュ
- 同一画像が頻繁に解析される場合、
Azure Cache for Redisにタグ・オブジェクト情報を保存し、API 呼び出し回数を削減。
5‑3. CI/CD パイプライン(GitHub Actions + Azure CLI)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
name: Custom Vision CI/CD on: schedule: - cron: '0 2 * * *' # 毎日午前2時に自動実行 workflow_dispatch: jobs: train-and-deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 # Azure CLI にログイン(Service Principal のシークレットを GitHub Secrets に保存) - name: Azure login uses: azure/login@v1 with: creds: ${{ secrets.AZURE_CREDENTIALS }} # 新規画像の Blob へのアップロード - name: Upload new images to Blob run: | az storage blob upload-batch \ -d training-data -s ./new_images \ --account-name imgstorage2024 # Custom Vision 訓練開始(REST API 呼び出し) - name: Trigger training env: CV_TRAINING_KEY: ${{ secrets.CV_TRAINING_KEY }} PROJECT_ID: ${{ secrets.CV_PROJECT_ID }} run: | curl -X POST \ "https://japaneast.api.cognitive.microsoft.com/customvision/v3.0/Training/projects/${PROJECT_ID}/train" \ -H "Training-key:${CV_TRAINING_KEY}" \ -H "Content-Type: application/json" # 学習完了後にイテレーションを公開 - name: Publish iteration env: CV_TRAINING_KEY: ${{ secrets.CV_TRAINING_KEY }} PROJECT_ID: ${{ secrets.CV_PROJECT_ID }} ITERATION_NAME: production run: | curl -X POST \ "https://japaneast.api.cognitive.microsoft.com/customvision/v3.0/Prediction/projects/${PROJECT_ID}/iterations/${ITERATION_NAME}/publish" \ -H "Training-key:${CV_TRAINING_KEY}" \ -d '{"name":"production","predictionId":"${{ secrets.CV_PREDICTION_RESOURCE_ID }}"}' |
- シークレット管理は必ず GitHub の
Secretsに格納し、コード上に平文を書かない。 - 定期的な再訓練と自動デプロイでモデルの鮮度を保ちます。
5‑4. 監視・可観測性
| 項目 | 実装例 |
|---|---|
| Application Insights | Azure Functions の「Enable Application Insights」オプションで有効化し、requests, exceptions, customMetrics が自動収集されます。 |
| カスタムメトリクス | 予測レイテンシやモデルバージョンを trackMetric API で送信 → ダッシュボードで SLA を可視化。 |
| アラート | 月間利用量が無料枠の 80 % を超えたらメール通知(Azure Monitor の予算アラート) |
まとめ
- 環境は Azure 無料アカウント → リソースグループ → 必要リソース(Computer Vision、Custom Vision、Blob Storage)の順に作成
- 汎用解析は Computer Vision、独自クラスは Custom Vision を選択し、目的に応じて組み合わせる
- データは Blob に保管し、Custom Vision UI でラベリング → 訓練 → パブリッシュ のフローを繰り返すことで高品質モデルが得られる
- 認証は Azure AD(本番)+サブスクリプションキー(Custom Vision)のハイブリッド が安全かつシンプル
- CI/CD とモニタリングを導入すれば、コスト管理・運用の自動化が実現 し、スケーラブルな画像認識サービスを継続的に提供できる
本稿で示した手順とベストプラクティスは 2024 年 4 月時点 の公式情報に基づいています。Azure のサービスは頻繁にアップデートされますので、導入前には必ず最新ドキュメントをご確認ください。