はじめに
今回は人工知能(AI)をサービスとして扱うことのできるAzure AI Servicesを使ったアプリケーションの構築方法について紹介します。
Azure AI Servicesとは
Azure AI ServicesはAzureのクラウドプラットフォーム上で提供される人工知能(AI)関連のサービス群です。これまでのアプリケーション開発では扱うことの難しかった自然言語処理を得意としています。 Azure AI Servicesには、さまざまなAI関連サービスが包括されています。以下は代表的なサービスとその説明です。
①認知サービス
Cognitive Servicesとして提供されるサービス群で、主に画像、音声、動画、文章などの非構造化データを取り込んで自然言語処理、画像分析、音声認識などを行うことができます。
・Computer Vision
Computer Visionは、主に映像データの処理に関するサービスを提供しています。例えば画像ファイルからテキストを抽出したり人や物を分類してラベリングしたり、リアルタイムでビデオを分析して人物の移動経路の把握をしたりすることができます。
・Speech Services
Speech Servicesは音声処理に特化したサービスです。音声からの文字起こしや、反対に文章から音声を生成したり音声を翻訳したりすることができます。これらを活用してコールセンターなどの音声アシスタントのサービスを作成することができるようになります。
・Language
テキストを理解して分析することのできるNatural Language Understanding(NLU:自然言語理解)機能を提供するサービスです。自由な形式で記述されたテキストを読み取り、記事の要約やキーフレーズの抽出、感情分析などを行うことができます。
②機械学習(Azure Machine Learning)
機械学習モデルのトレーニングやデプロイ、管理を支援するサービスとしてAzure Machine Learningが提供されています。開発者やデータサイエンティストは自分のデータを用意してカスタムモデルを構築し、オンラインまたはエッジデバイス上にモデルをデプロイすることができます。
③ボットサービス(Bot Service)
ボット開発用のSDK(Bot Framework SDK)やIDE(Bot Framework Composer)などを提供するサービスで、他のAIサービスと連携してチャットボットのような会話形のユーザーインターフェースを構築することができます。
④高度な検索サービス(Azure Cognitive Search)
構造化・非構造化のどちらのデータにも対応した検索エンジンで、高度な検索機能を提供することができます。旧Azure Searchです。
Azure AI Servicesでは、ほとんどのサービスをREST APIやサポートされている言語のSDKを用いて利用することができるようになっており、容易にサービスをアプリケーションに組み込むことができるようになっています。
なお、Azure AI Servicesは以前はAzure Cognitive ServicesやAzure Applied AI Servicesと呼ばれるサービスとして提供されていましたが、Azure AI Servicesという名のもとで各サービスが包括的に提供されるようになりました。
Computer Visionの概要
認知サービスのうち、Computer Visionについてもう少し説明します。Computer Visionでは大きく分けて3つの機能が提供されています。
・テキスト抽出
光学文字認識(OCR)とも呼ばれる機能で、画像内に含まれるテキスト情報を読み取ってデジタルテキストに変換することができるため書類のスキャンや自動データ入力などに利用することができます。画像に含まれるテキストは、手書きや複数の言語が混在されている場合でも適切に抽出することができます。
・画像解釈
画像内に含まれるオブジェクト(動物、食品、標識等)を認識して、特定のカテゴリに分類することができます。また人物の顔を認識して性別、年齢、感情などの情報を取得することもできます。
・空間分析
動画内のオブジェクトを検出して識別することもできます。オブジェクトが移動した場合であっても、動きを追跡して位置や軌道を特定することができます。
これらのComputer Visionの機能を利用することで、カメラやセンサーから取得した大量の画像や動画データをより効果的に活用することができるようになります。
Vision Studioを使ってOCRを体験してみよう
ここからは実際にComputer Visionを使ってOCRができることを確認していきます。
まずは「Vision Studio」と呼ばれるComputer Visionの機能を試すことのできるUIサービスを使ってOCRを体験してみましょう。
Vision Studioを使用するにあたって、「Azure AI services multi-service account」というサービスのリソースを作成します。
Azure AI services multi-service accountの作成
Azureポータルから「Azure AI services multi-service account」のリソースを作成していきます。ポータル上部の検索バーに「ai service」と入力し、表示された「Azure AI services multi-service account」を選択します。
サービスのトップ画面が表示されたら、「作成」または「Azure AI services multi-service accountの作成」を選択します。
リソースの作成画面が表示されたら、必要な内容を入力します。
「サブスクリプション」、「リソースグループ」、「リージョン」は任意のものを選択します。「名前」にはこのリソースの名称を入力します。「価格レベル」は「Standard S0」を選択します。最後に契約条件に同意するためチェックボックスにチェックを入れて「確認と作成」ボタンを選択します。
確認画面が表示されたら内容を確認し、「作成」ボタンを選択してリソースの作成を開始します。しばらく待つとリソースの作成が完了します。
Vision StudioからOCRを試す
前項で「Azure AI services multi-service account」のリソースが作成できたら、Vision Studio上からOCRを試してみましょう。
まずはVision Studioのサイトにアクセスします。アクセスすると、まずアカウントにサインインするように促されるので画面右上の「Sign in」を選択します。ここで現在使用しているAzureと同じアカウント情報を使ってサインインをします。
サインインが完了し、ふたたびトップページが表示されたら画面下部にあるギャラリーの一覧から「Extract text from images」を選択します。
OCRのデモ画面が表示されたらOCRを実行するリソースを選択する必要があるため、先程作成したAzure AI services multi-service accountのリソースを指定します。
「Try it out」という項目にある「Please select a resource.」という部分を選択します。
選択するとダイアログが表示されます。「Subscription」および「Azure Resources」で先程作成したリソースと同じサブスクリプションとリソース名を選択し、「Confirm」を選択します。
OCRのデモ画面に戻ったら「Try it out」下部のチェックボックスにチェックを入れ、その下にあるサンプル画像のうちいずれかを選択します。
選択して少し待つと、選択した画像が左側に表示され、右側に画像から抽出した文字が表示されます。
その他にも、自身で用意した画像ファイルから文字を読み取ることもできます。読み込み対象の画像ファイルとして、本連載のトップページにある概要説明欄を画像としてキャプチャしたものをサンプルファイルとして使用します。
3つのサンプル画像の左側の領域に画像ファイルをドラッグ&ドロップするとOCRが実行されます。
このようにVision Studioを利用すると、OCRをはじめComputer Visionで実現可能な機能について手軽に動作確認を行うことができます。
Computer Visionを使ってOCRを実装してみよう
ここからは実際にComputer Visionを使ったOCRアプリケーションを実装し、画像からテキスト抽出ができることを確認していきます。
Computer Visionの作成
まずはAzureポータルからComputer Visionを作成します。Azureポータル上部の検索バーで「computer vison」と入力し、表示されたComputer Visionのサービスを選択します。画面中央に表示される「Computer Visionの作成」ボタンを選択します。
Computer Visionの新規作成画面の基本タブが表示されるので、必要事項を入力していきます。「サブスクリプション」、「リソースグループ」、「リージョン」は任意のものを選択します。「名前」でこのComputer Visionの名称を入力します。「価格レベル」は無料プランである「Free F0」を選択します。執筆時点で無料プランでは1分間あたりに20件までのトランザクションを実行でき、月間で5,000件までのトランザクションを実行することができます。最後に「責任ある AI 通知」という項目に同意するためチェックボックスにチェックを入れて「次へ」ボタンを選択します。
ネットワークタブではComputer Visionにアクセスできるネットワークの範囲を選択します。今回はインターネット経由での接続となるので、一番上の選択肢を選択します。最後に画面下部にある「確認と作成」ボタンを選択します。
確認画面が表示されたら、内容に誤りがないか確認して「作成」ボタンを選択します。しばらく待つとComputer Visionの作成が完了しますので、そのままAzureポータルで作成したComputer Visionの内容を表示します。
「概要」メニューあるいは「Keys and Endpoint」メニューに表示されているComputer VisionのサブスクリプションキーとエンドポイントURLをコピーして控えておきます。これらは後ほどアプリケーションの実装時に使用します。なお、サブスクリプションキーは2つ用意されていますが、どちらを使用しても構いません。
アプリケーションにComputer Visionを組み込む
Computer Visionが作成できたら、画像に含まれる文字を読み込んで出力するアプリケーションを実装していきます。今回はローカルマシン上に用意した画像ファイルをComputer Visionで読み取ってテキスト出力することとします。読み込み対象の画像ファイルは、先程Vision StudioでのOCRのデモに使用した本連載トップページの概要説明欄の画像を使用します。
アプリケーションはPythonで実装していきます。まずは、必要となるComputer Vision関連のライブラリをコマンドラインからインポートします。
Computer Visionの関連ライブラリのインポート
$ pip install --upgrade azure-cognitiveservices-vision-computervision
$ pip install pillow
「azure-cognitiveservices-vision-computervision」はComputer VisionのSDKで、「Pillow」はPythonの画像処理用のライブラリです。これら2つを事前にインストールした状態で実装を始めます。次に「ocr.py」というファイルを作成して実装を進めます。
ライブラリのインポート・Computer Visionの接続情報の追加(ocr.py)
# 関連ライブラリのインポート・・・①
from azure.cognitiveservices.vision.computervision import ComputerVisionClient
from azure.cognitiveservices.vision.computervision.models import OperationStatusCodes
from azure.cognitiveservices.vision.computervision.models import ComputerVisionOcrErrorException
from msrest.authentication import CognitiveServicesCredentials
import time
# Computer Visionの接続情報・・・②
subscription_key = "Computer Visionのサブスクリプションキー"
endpoint = "Computer VisionのエンドポイントURL"
# Computer Visionの接続情報をもとにクライアントを作成する・・・③
computervision_client = ComputerVisionClient(endpoint, CognitiveServicesCredentials(subscription_key))
ファイルの冒頭は必要となる関連ライブラリのインポートです(①)。主にComputer Vision関連のものモジュールをインポートしています。続いてComputer Visionの接続情報を定義しています(②)。AzureポータルでComputer Visionを作成した後に控えていたサブスクリプションキーとエンドポイントURLをここで設定します。それらの情報をもとに、Computer Visionにアクセスできるクライアントのインスタンスを作成します(③)。
画像ファイルの指定と読み込み(ocr.py)
# 読み取り対象の画像のパスを指定してファイルを開く・・・④
image_path = './zerokara.png'
image_data = open(image_path, "rb")
try:
# 画像ファイルをComputer Visionで読み取る・・・⑤ー1
read_response = computervision_client.read_in_stream(image_data, raw=True)
# (参考)インターネット上にある画像ファイルを読み取る場合・・・⑤ー2
# read_response = computervision_client.read('画像ファイルのURL', raw=True)
except ComputerVisionOcrErrorException as e:
# 画像ファイル読み取りエラー時の処理・・・⑥
print("画像の読み込みでエラーが発生しました。 エラー内容:", e.response)
raise e
次は対象の画像ファイルをComputer Visionで読み取るパートです。まずは対象となる画像のパスを指定して、ファイルを開きます(④)。そのファイルをComputer Visionのクライアントで読み取ると、読み取り結果を取得することができるようになります(⑤ー1)。なお、今回は読み取り対象の画像をローカルマシンから参照する方法で実装していますが、インターネット上にある画像ファイルから読み取ることも可能です(⑤ー2)。
またComputer Visionクライアントでの画像ファイルの読み込みに失敗した場合は「ComputerVisionOcrErrorException」という例外が発生するため、その例外情報を使ってエラーハンドリングすることも可能です(⑥)。
(ocr.py)
# Computer VisionのレスポンスからオペレーションIDを取得する・・・⑦
read_operation_location = read_response.headers["Operation-Location"]
operation_id = read_operation_location.split("/")[-1]
# Computer Visionでの画像解析が終了するまで待機する・・・⑧
while True:
read_result = computervision_client.get_read_result(operation_id)
if read_result.status not in ['notStarted', 'running']:
break
time.sleep(1)
# 解析結果のテキストを一行ずつ出力する・・・⑨
if read_result.status == OperationStatusCodes.succeeded:
for text_result in read_result.analyze_result.read_results:
for line in text_result.lines:
print(line.text)
最後はComputer Visionで解析した内容をテキストとして出力するためのパートになります。前述の⑤−1ではComputer Visionに対して画像ファイルの読み取りをさせてレスポンス情報を取得していますが、この時点では画像の解析は完了していない可能性があるため、このレスポンスには解析結果であるテキスト情報は含まれていません。代わりに、後から解析結果を問い合わせるためのオペレーションIDを含むデータを返却します。オペレーションIDは「Operation-Location」というレスポンスヘッダの値であるURLに含まれており、URLを「/」で区切った際の末尾から取得することができます(⑦)。
取得したオペレーションIDを引数としてComputer Visionに解析処理の進捗状況を問い合わせをします(⑧)。問い合わせ結果に含まれるステータスコードが「not Started」または「running」の場合は1秒スリープした後に再度問い合わせを実施します。それ以外のステータスコードの場合は進捗状況問い合わせのループを抜けます。ループを抜けた際のステータスコードが「succeeded」だった場合は、解析結果がテキスト情報としてレスポンスに含まれているため、一行ずつ内容を取得してコンソールに出力します(⑨)。
これで一連の実装ができたので、コマンドラインからアプリケーションを実行してみます。
コマンドラインからアプリケーションを実行する