Azure Cognitive Servicesを使って画像認識させてみた:Windowsサーバー編

前回の記事で、Azure Cognitive Servicesの概要や、Azure上に構築したLinuxサーバーでの画像認識におけるプロセスを紹介しました。

今回は、Windowsサーバーを使用して、Azure Cognitive Servicesでの画像認識を行ってみました。

※Azure Cognitive Servicesの作成手順やキーとエンドポイント取得は前回の記事で紹介しておりますので、今回は省略します。

blog.jbs.co.jp

構成情報

今回は、Windows Server 2019を利用してAzure Cognitive Servicesの連携を行います。

※ 仮想マシンの作成方法は割愛します。

必要なソフトウェアのインストール

Pythonのインストール

Windows Server 2019の仮想マシンに、利用するプログラミング言語のランタイムをインストールします。

※ 本記事ではPythonを利用します

1. 下記のリンクから最新のPythonをダウンロードし、インストールします。

www.python.org

2. [Windows インストーラー (64-bit)]をクリックし、ダウンロードします。

3. [Python 3.13.0]をインストールします。

※[Add Python to PATH]のチェックボックスにチェックを入れます。

4. インストールが開始されます。

5. インストールが完了したら[close]をクリックします。

Pythonのインストール確認

1. インストールが完了したら、コマンドプロンプトを開いて以下のコマンドを実行し、Pythonが正しくインストールされていることを確認します。

python --version

2. Pythonがインストールされていれば、バージョンが表示されます。

Python 3.13.0

pipのインストールを確認

1. Pythonがインストールされている場合、通常はpipも自動的にインストールされます。確認のため、以下のコマンドを実行します。

pip --version

2. pipが正常にインストールされている場合、pipのバージョンが表示されます。

pip 24.2 from C:\Users\<ユーザ名>\AppData\Local\Programs\Python\Python313\Lib\site-packages\pip (python 3.13)

必要なライブラリのインストール

requestsパッケージのインストールを行います。以下のコマンドを実行します。

pip install requests

Pythonスクリプトの作成と配置

Pythonスクリプトの作成

Pythonを使った基本的な画像認識のサンプルコードに[api_key = ]、[endpoint = ]、[image_path =]を入れ、ファイル名を[image_recognition.py]として保存します。

import requests
# APIキーとエンドポイントを設定
api_key = 'YOUR_API_KEY'
endpoint = 'YOUR_ENDPOINT_URL'

# 画像ファイルのパスを設定
image_path = 'path_to_your_image.jpg'

# リクエストヘッダーと画像データを準備
headers = {
    'Ocp-Apim-Subscription-Key': api_key,
    'Content-Type': 'application/octet-stream'
}
with open(image_path, 'rb') as image:
    response = requests.post(endpoint + '/vision/v3.2/analyze?visualFeatures=Categories,Description,Color', 
                             headers=headers, data=image)

# 結果の表示
if response.status_code == 200:
    analysis = response.json()
    print(analysis)
else:
    print(f"Error: {response.status_code}, {response.text}")

Pythonスクリプトの配置

作成したPythonスクリプトを、画像認識をする画像が保存されているフォルダと同じ場所に保存します。

image1/image2の画像認識結果

コマンドプロンプトでimage_recognition.pyを実行します。

今回は、画像認識結果の中からdescriptionの内容を確認します。descriptionは画像分析の結果として識別された具体的な要素やイメージのコンテキストを提供し、TagsとCaptionsの2つの要素で構成されています。

image1の画像認識結果

image_recognition.pyの結果を確認します。今回は、こちらの画像に対して画像認識を行いました。

{
    "categories": [
        {
            "name": "others_",
            "score": 0.00390625
        },
        {
            "name": "text_sign",
            "score": 0.1171875
        }
    ],
    "color": {
        "dominantColorForeground": "White",
        "dominantColorBackground": "White",
        "dominantColors": [
            "White"
        ],
        "accentColor": "CC0000",
        "isBwImg": false,
        "isBWImg": false
    },
    "description": {
        "tags": [
            "company name"
        ],
        "captions": [
            {
                "text": "company name",
                "confidence": 0.44931715726852417
            }
        ]
    },
    "requestId": "8946c41e-a3be-41bf-bef0-7473d01b7890",
    "metadata": {
        "height": 232,
        "width": 665,
        "format": "Png"
    },
    "modelVersion": "2021-05-01"
}

この結果をChatGPTで解析し、整理してみました。

タグ(Tags)

タグ(Tags)には画像に関連するキーワードやテーマを示し、簡潔に表現するために使用されます。

  • "tags": [ 
    • 画像に「会社名」というタグが付けられています。これは画像に表示されている要素を示しています。
キャプション (Captions)

画像の内容に関する詳しい説明や、認識されたテーマやテキストに基づいたフレーズを示します。確信度は0から1の範囲で、1近いほど確信度が高いとされています。

  • "text": "company name"
  • "confidence": 0.44931715726852417 
    • キャプションとして「会社名」が提案されていますが、信頼度は約44.9%と中程度です。このため、確信を持って「会社名」と言い切れない状況です。
image1のまとめ

画像が企業やビジネスに関連していることを示しています。このため、ロゴやブランドアイデンティティの一部かもしれないという結果となりました。

image2の画像認識結果

同様に、image_recognition.pyの結果を確認します。image1に続きこちらの画像に対して画像認識を行いました。

{
    "categories": [
        {
            "name": "others_",
            "score": 0.00390625
        },
        {
            "name": "text_sign",
            "score": 0.609375
        }
    ],
    "color": {
        "dominantColorForeground": "White",
        "dominantColorBackground": "White",
        "dominantColors": [
            "White",
            "Red"
        ],
        "accentColor": "CC0000",
        "isBwImg": false,
        "isBWImg": false
    },
    "description": {
        "tags": [
            "logo"
        ],
        "captions": [
            {
                "text": "logo",
                "confidence": 0.9413888454437256
            }
        ]
    },
    "requestId": "5889e9b2-0e3c-4f03-92ed-65f3ca08ca80",
    "metadata": {
        "height": 241,
        "width": 666,
        "format": "Png"
    },
    "modelVersion": "2021-05-01"
}

image1同様、この結果をChatGPTで解析し、整理してみました。

タグ(Tags)
  • "tags": [
    • 画像に「ロゴ」というタグが付けられています。これは画像がロゴに関連していることを示しています。
キャプション (Captions)
  • text": "logo
  • confidence": 0.9413888454437256
    • 画像に「ロゴ」というタグが付けられています。これは画像がロゴに関連していることを示しています。
image2のまとめ

この分析結果は、画像が「ロゴ」であり、「テキストサイン」というカテゴリに属する可能性があることを示しています。

色の主要なトーンは白で、赤色がアクセントとして使われており、全体的にカラー画像であることが確認できます。

キャプションの信頼度も高く、画像の内容を理解するのに役立つ情報が豊富です。

おわりに

Azure Cognitive Servicesを使って画像認識させてみた:Windowsサーバー編についてご紹介しました。

Linux編とはまた違った結果となりました。やはりその精度にはまだ改善の余地があることも感じました。

執筆担当者プロフィール
石黒 允規

石黒 允規(日本ビジネスシステムズ株式会社)

ネットワークインテグレーション部に所属しており、主にAzureに関する業務を行っています。 JBS野球部にも所属しており、週末を楽しく過ごしております

担当記事一覧