はじめに
AIの活用は、コスト削減や効率化に伴う売上向上、監視や管理の自動化、人的リソース不足解消といったようなメリットがあると言われてますが、実際にAIを使う事を考えた場合には、データを集めて学習して、コードを書いて、アプリケーションを作成して、運用まで実施といった事が常に必要ということは無く、既に作成及びサービス化されたAIを料金を払う事で利用することもできます。
(例えば、音声をテキストに変換とか、画像から文字の認識といったようなサービス)
この記事では、以前記載した自分で用意した学習データでAIタスクの体験のように自分で学習を含めて一から実施するのでは無く、マイクロソフト社が提供するクラウドサービスであるMicrosoft Azureで用意されているAIサービスを利用して画像分類を行なってみる事にします。
何をしたい?できる?
- Azure Cognitive ServicesのComputer Visionを使ってみる
- サービス化されているAIを使って画像分類の実行
- 用意されているサンプルコードに必要情報だけ書き換えて実行
AI環境と利用について
機械学習のプロジェクトでは、コードを書いて行うモデルの作成・学習(画像の黒い部分)は工数全体から見てほんの一部で、事前に必要なデータの収集や分析、システム基盤構築の役割は大きい割合を占め、時間が必要な項目となります。
引用元: From the paper Hidden Technical Debt in Machine Learning Systems |
この記事では、既に用意されているサービスを利用することで、比較的簡単に短時間で画像分類を試したいと思います。
設定手順
基本的に無料を選ぶようにしてますが、一部クラウドストレージを利用して実施している項目があるので、料金がかかる可能性があります。(Azureのストレージ利用)
Azureに新規アカウント作成をするような場合には、最初の30 日間に使用できる200ドルのクレジットが付与されるので、アカウントを作成する機会に合わせてAIサービスを試してみると良いかと思います。
手順は記事作成時点のものなので、画面例は変更される可能性があります。
例で指定されている以下のパラメータは、環境によって異なる内容なので適宜変更して下さい。Computer Visionインスタンス名はURL名として利用されるので、一意の名前が必要です。
- リソースグループ名:ai_rg100
- Computer Visionインスタンス名:cv-nekoneko100
- リソースを作成するリージョン:Japan East
1. Azureでリソースグループの作成
この記事ではマイクロソフト社のクラウドであるMicrosoft Azureを利用します。
1-1.Azureへのサインインを実施
AzureのWebサイトで画面右側の[サインイン]をクリックします。
1-2.リソースグループの作成を実施
Azureのポータル画面に遷移後、画面上部の検索部分に[リソースグループ]と入力し、[サービス]に表示された[リソースグループ]を選択します。
使用するサブスクリプションの選択、リソースグループ名の入力、リージョンの選択を行い、[確認及び作成]をクリックします。
(新規でAzure利用で無料枠だと、サブスクリプション名は1つしか表示されないはずです)
[検証に成功しました。]が表示されたら、[作成]をクリックします。
2. Computer Visionリソースの作成
Marketplace画面に遷移するので検索部分に、[Computer Vision]と入力し検索を行い、表示されたComputer Visionを選択します。
表示された画面で、リージョンの選択とインスタンス名の入力を実施します。
インスタンス名は外部インターネットに公開して利用する為、一意の名前が必要です。
価格レベルについては、検証レベルで数回程度のサービス利用とするので、[Free F0]を選択し、画面下方にある、同意の承認にチェックを入れて[確認と作成]をクリックします。
[検証に成功しました。]が表示されたら、[作成]をクリックします。
3. Computer Visionのキーとエンドポイント確認
画面左側の[キーとエンドポイント]を選択し、表示された画面でキーとエンドポイントをコピーしてメモ帳等に張り付けておきます。
4. Computer Visionを使って画像分類
画面左側の[概要]を選択し、[APIコンソール]をクリックします。
別のタブでAPIコンソール画面が立ち上がるので、画面上方に左側から[Analyze Image]を選択します。
画面下方まで移動し、リソースを作成したリージョンの選択を実施します。
(手順例では[Japan East])
[HOST]の項目で[japaneast.api.cognitive…]を選択します。
[Language]をja(日本語)を選択し、
[Ocp-Apim-Subscription-Key]には、リソース作成時に[キーとエンドポイント]からメモ帳等にコピーしておいた[キー1]をコピーします。
[Request body]の項目で、分類したい画像の置いてあるURLを記載します。
ここでは、クイックスタートで利用されているサンプルを指定します。
5. ストレージにアップロードした画像を分類
AzureのBLOBコンテナにアップロードした画像はURLを取得できるので、サンプルと同じように分類を試してみます。([Request body]の項目のURLを変えて繰り返し)
結果は以下のように、コンソールからだと、低確率+その他という扱いとなります。
(車とかについては、高確率で分類できるのは確認できてます。)
Google Colaboratoryからの実施例
Computer Visonサービスを作成後は、外部からPythonを使って画像分類を実施することもできます。ここでは、Google Colaboratoryから実施してみます。
サンプルコードは、クイックスタート: 画像分析のものをコピーし、必要情報を書き換えて利用します。
1. 必要なライブラリの導入
pip install --upgrade azure-cognitiveservices-vision-computervision
pip install pillow
2. コードのコピーと編集
以下の部分の書き換えが必要です。
subscription_keyとendpointはメモ帳にコピーする旨を記載した部分です。
subscription_key = "[キーとエンドポイント]を選択し、表示されたキーのコピー"
endpoint = "[キーとエンドポイント]を選択し、表示されたエンドポイントのコピー"
images_folder = os.path.join部分のコメントアウト
remote_image_url ="分類したい画像の置いてあるURL"
サンプルコード
from azure.cognitiveservices.vision.computervision import ComputerVisionClient
from azure.cognitiveservices.vision.computervision.models import OperationStatusCodes
from azure.cognitiveservices.vision.computervision.models import VisualFeatureTypes
from msrest.authentication import CognitiveServicesCredentials
from array import array
import os
from PIL import Image
import sys
import time
'''
Authenticate
Authenticates your credentials and creates a client.
'''
subscription_key = "キーのコピー"
endpoint = "エンドポイントのコピー"
computervision_client = ComputerVisionClient(endpoint, CognitiveServicesCredentials(subscription_key))
'''
END - Authenticate
'''
'''
Quickstart variables
These variables are shared by several examples
'''
# Images used for the examples: Describe an image, Categorize an image, Tag an image,
# Detect faces, Detect adult or racy content, Detect the color scheme,
# Detect domain-specific content, Detect image types, Detect objects
#images_folder = os.path.join (os.path.dirname(os.path.abspath(__file__)), "images")
remote_image_url = "分類したい画像の置いてあるURL"
'''
END - Quickstart variables
'''
'''
Tag an Image - remote
This example returns a tag (key word) for each thing in the image.
'''
print("===== Tag an image - remote =====")
# Call API with remote image
tags_result_remote = computervision_client.tag_image(remote_image_url )
# Print results with confidence score
print("Tags in the remote image: ")
if (len(tags_result_remote.tags) == 0):
print("No tags detected.")
else:
for tag in tags_result_remote.tags:
print("'{}' with confidence {:.2f}%".format(tag.name, tag.confidence * 100))
print()
'''
END - Tag an Image - remote
'''
print("End of Computer Vision quickstart.")
3. コードの実行結果
pythonで実行すると、コンソールで実施したよりも詳細な分類結果が確認できます。
検証完了後は、リソースグループを削除し、余計なコストが掛からないようにしてます。