Cognitive Services: Face APIの限界に挑戦してみた

今回は、Microsoft Cognitive ServicesのFace APIで顔認識の限界を検証してみました。

Face APIの仕様

Face APIのリファレンスによると、入力する画像には下記のような制限があるようです。

項目 仕様
画像形式 BMP, JPEG, PNG, GIF (最初のフレームのみ)
ファイルサイズ 1KB ~ 4MB未満
認識可能な顔のサイズ(※画像サイズではありません) 36×36 ~ 4096×4096 px
同時認識数 最大64

上記の仕様を基に、検証用画像として11806×3924 px (4630万画素)の風景写真にわずか36×36 pxの顔の一部を合成した3.94MBのJPEG画像を作成してみました。1ヶ所だけ合成した顔が隠れているのですが・・・まずはどのくらいの時間で探すことができるか、試してみてください。

検証の内容

Face APIでは顔認識の結果として、顔の認識範囲を示す「faceRectangle」と顔の特徴点を示す「faceLandmarks」を取得することができます。画像認識サービスによっては、顔の特徴点と輪郭が顔認識の要素となっていることもありますが、Face APIではどうなのか下記の4項目について検証をしていきます。

① 顔のサイズ、範囲を変えた場合
② 一部を隠した場合
③ 角度、向きを変えた場合
④ 色相、明るさ・コントラストを変えた場合

顔認識の限界の検証

それではFace APIの限界を検証していきます。
まずは、faceRectangleの範囲を「顔」の基準として、110% ~ 60%の範囲の顔を切り抜いて顔の認識をさせてみました。さすがに顔の60%の範囲では、顔の特徴点が切り取られてしまうため、特徴点の認識誤差が発生しますが、目、鼻、口が写っていれば顔として認識させることができていました。また、顔の輪郭がなくても顔として認識されていることから、顔の輪郭は顔認識の要素でないことがわかりました。

faceRectangleがどのように決定されているか調べるため、顔の80%の範囲を切り抜いた画像の四方に白枠を付け、顔範囲110%と同じ画像サイズにしたものを認識させてみました。顔の白枠を付けたものと、顔範囲110%の画像を比較すると、ほぼ同じ位置にfaceLandmarksとfaceRectangleが表示されており、faceLandmarksを基にfaceRectangleが決定されていると推察されます。このことからも、Face APIは顔の特徴点から顔を認識していることがわかます。

また、顔の特徴点を一部隠して、どこまで顔が見えていれば認識できるか試してみました。
目、口、鼻と隠す箇所を変えてFace APIで認識してみましたが、複数の箇所を隠すと認識はできないものの、目、口のいずれかを完全に隠してしまっても、隠した部分を補完して顔を認識させることができていました。また、鼻の頂点は顔認識の上で重要なようで、鼻の頂点をほんの一部隠すだけでも顔を認識することができなくなってしまいました。
検証の結果、左右の瞳、口の左右端が作る四角形のうち隣り合う2点と鼻の頂点の計3点が見えていれば顔として認識できることがわかりました。

続いて、検出可能な顔のサイズを検証してみました。faceRectangleのサイズを基に、画像サイズを調整しながら顔の認識をさせてみましたが、Face APIのリファレンス通り、faceRectangleが36×36pxより小さくなると顔を認識させることができなくなりました。

原寸サイズでは認識ができなかった顔サイズ30pxの画像を、顔サイズ80pxの画像と同サイズに拡大したものも認識させてみました。ぼかし状になるバイキュービック法とモザイク状になるニアレストネイバー法の二種類の方法で拡大しましたが、いずれも概ね同じ位置に顔を認識させることができました。原寸では認識できない画像でも拡大することで認識可能になることがわかりました。

Face APIのリファレンスに載っていない項目として、認識可能な顔の角度を検証してみました。
正面向きの画像を15°ずつ回転させて顔の認識させたところ、30°までは顔認識できていますが、45°以上では顔を認識することができなくなり、細かく角度を変えても概ね35 ~ 40°が顔認識の限界のようでした。


また、同じく顔の角度でも空間的な顔の向きを変えた場合も試してみました。さすがに真横を向いた画像は認識できませんでしたが、目、鼻、口が識別できる画像であれば、どの方向を向いていても顔として認識できるようです。

画像の色相や明るさ、コントラストを変えて認識できるかも試してみました。
西郷隆盛像が認識できていることからもわかるように、色相に関しては特に関係なく認識できました。明るさ、コントラストも、よほど画像の濃淡が潰れない限り、認識させることは可能なようでした。

・色相

・明るさ、コントラスト

さて、初めに紹介した11806×3924 px (4630万画素)の検証用画像ですが、Face APIで認識させてみると顔を見つけ出すことができました。見つけにくいように顔の色相を変えて、背景の色と同化するように合成したのですが、リクエストからレスポンスまで7秒と、短時間で見つけ出してしまいました。同様に、この画像からフルHDサイズ(1920×1080px)の画像を切り出してPNG形式(3.6MB)ので保存したものを認識させると約4秒でレスポンスが返ってくるため、画像サイズが大きいほど認識に時間がかかるようです。


今回はFace APIの限界に挑戦してみましたが、入力する顔の大きさ、角度に気を付ければ概ね顔認識ができるため、広い範囲の画像に顔認識を適応させることができそうです。
64までの顔を同時に認識できるため、多人数の写る画像に一斉にモザイクをかけたり、集合写真から特定の人物を見つけ出したりといった応用ができるのではないでしょうか。
次回は、Face APIを使った顔の比較についての検証をしていきます。
お楽しみに!


Cognitive Services: Face APIのPython SDKを試してみる

今回はCognitive ServicesのFace APIをPythonからより簡単に利用できるSDKをご紹介します。

Face APIのリクエスト

「Cognitive Services: Face APIの顔検出をPythonで試してみた」でもご紹介しましたが、Face APIはPOSTリクエストで使用するため、リファレンスに則して下記のようにheader、body、parameterをそれぞれ設定し、リクエストを行う必要があります。

[crayon-60988d44e46ee288893731/]

もちろん、同じ機能を使う限りリクエストの形式は変わらないため、上記コードを関数として定義し、変更部分を変数にしておけばいちいち書き直す必要はないのですが、Face APIには6つの機能に計28の操作が存在するため、すべてを関数として定義するのは困難です。
Python SDKを使用すると、Face APIへのリクエストがより簡単になる関数が利用できるようになるため、Face APIをより簡潔なコードで利用できるようになります。

Python SDKのインストール

Face APIのPython SDKはpipでインストールできます。
下記のコードによりインストールを行います。

[crayon-60988d44e46f7494691076/]

Python SDKは内部的にRequestsライブラリを使用しており、古いバージョンがインストールされている状態でSDKを実行した場合、エラーが発生してしまいます。
そのため、予めRequestsのアップデートも行っておきます。

[crayon-60988d44e46fa663933847/]

※ Requestsのバージョンが古い場合、下記のようなエラーが発生します。
[crayon-60988d44e46fc089388689/]

Python SDKの利用

Python SDKを使った場合の最も簡単なコードは下記のようなものになります。
必要になる情報は、APIキーと画像のURLのみで、このコードを実行すると最初に示したコードと全く同じレスポンスをえることができ、最初に示したコードに比べすっきりと簡潔に記述することができました。内部的にはSDKがheader、body、parameter を自動生成、補完し、FaceAPIにリクエストしているようです。

[crayon-60988d44e46fe784031969/]
上記のコードを実行すると以下のようなレスポンスが返ってきます。
レスポンスはJSON文字列ではなくリストとして出力されるため、JSONライブラリでデコードするなどの操作なしにデータを使用することができます。
[crayon-60988d44e4700258764562/]
faceLandmarksなど他の情報を取得する場合には、画像のURLに続けて以下のようにパラメータを設定します。設定に関してはリファレンスに準じており、face_id、landmarksにブーリアン、attributesに取得項目を設定することで、必要なレスポンスを得ることができます。

[crayon-60988d44e4702845455691/]
・レスポンス
[crayon-60988d44e4704630804569/]

いかがでしたか?
Face APIのPython SDKは面倒なPOSTリクエストを記述する必要がなく、シンプルにFace APIを利用することができるため、ぜひ使ってみてください。
次回もお楽しみに!


Cognitive Services: Face APIについて

今回から数回に分けて、Microsoft Cognitive ServicesのFace APIについてご紹介をしていきます。
昨今では、ディープラーニングを使った画像認識技術が注目されており、昨年2016年12月にAWSが画像認識サービスを開始するなどホットな話題になっています。
Face APIは、かつてCognitive Servicesが「Project Oxford」として展開されていた2015年5月から提供されているMicrosoft の顔認識APIで、以前にもデモを使った簡単な機能のご紹介をしました。今回からは、より詳細にFace APIの利用方法や機能についてご紹介していきます。
初回は、Face APIの概要と価格についてご紹介します。

Face APIについて

Face APIはCognitive Servicesの「Vision」に分類される画像認識APIの中でもヒトの顔検出に特化したAPIで、ディープラーニングによる顔認識をAPIで簡単に利用できるサービスです。Face APIでは、目、鼻、口から、画像に写るヒトの顔の特徴や表情を検出して数値情報にしたり、人物特定を行ったりといったことができ、用途に応じて下記の6機能が利用できます。

Face APIの料金

Face APIの料金は、トランザクション数を基にした従量課金型の料金となっており、月30000トランザクションまで使用できる無料の「Face API - Free」と本番環境での利用が想定される「Face API - Standard」が設定されています。「Face API - Standard」ではさらにトランザクション量に応じて3段階の価格が設定されており、使用回数が多くなるほどにトランザクションあたりの料金は安くなっていきます。
Face APIの人物判定等に使用される「Face Storage」はトランザクションとは別に課金され、保存される画像数に応じて料金が発生します。

短いながら今回は、以上になります。
次回からは、実際にFace APIを使って顔認識の検証をしていきます。
まずは4回に分けて、「Face Detection」機能を使ってFace APIの使いかたや精度の確認をしていきます。
お楽しみに!


Cognitive Services: Face APIの顔検出をPythonで試してみた

今回は、Microsoft Cognitive Servicesの顔認識サービスであるFace APIをPythonで利用してみます。

Face APIの概要

Face APIはMicrosoft Cognitive ServicesのAPIの中でも顔の認識に特化したAPIであり、顔の検出のほか、比較や類似の顔の検索、グルーピングなど様々な機能が利用できます。
顔の情報を蓄積して、顔認証に使用することもできるため、例えばロボットが顔を見てその人の名前を答えるなど、サービスのパーソナライズが可能になります。

APIキーの取得

Face APIを利用するには、まずAzureポータルにてAPIキーを取得する必要があります。
Azureポータルにサインインしたら、サービス一覧から「Cognitive Services accounts」を選択します。

リスト左上の「+追加」をクリックすると「Create」のペインが表示されるため、下記の項目を入力、選択して「作成」をクリックします。

項目 入力
Account name 任意の名称
API type 「Face API (preview)」を選択
場所 任意のリージョンを選択(現在は「米国西部」のみ)
Pricing tier 「F0 Free」または「S0 Standard」を選択
Resource group 「新規作成」または「既存のものを使用」を選択し、リソースグループを入力
Legal terms 「I Agree」


しばらくするとFace APIの項目が追加されます。
追加された項目をクリックし、表示されるメニューから「Keys」をクリックするとAPIキーが表示されるので、「KEY1」、「KEY2」のいずれかをコピーして控えておきます。

Face APIの利用

APIキーが取得できたら、実際にPythonを使ってFace APIの顔検出機能を利用してみます。今回は簡単に、
Face APIのリファレンス
のPython 2.7サンプルを使用して、Azure Storage上にある画像ファイルの顔検出を試してみます。
下記コードの'Ocp-Apim-Subscription-Key'に取得したAPIキー、変数「image_url」に対象の画像のURLを入力します。

・Python 2.7

[crayon-60988d44e51c5931050195/]

コードの「Request parameters」ではレスポンスの内容を設定できます。今回はすべての情報を取得するよう設定していますが、必要な情報だけに絞ることでAPIのレスポンスを速くすることもできます。

設定項目 内容
'returnFaceId' 24時間有効な顔のID
'returnFaceLandmarks' 顔の特徴点情報
'returnFaceAttributes' age (年齢)、gender (性別)、headPose (頭の角度)、smile (笑顔)、facialHair (ヒゲ、もみあげの有無)、glasses (メガネの有無)の取得

上記コードを実行するとレスポンスがJSON形式で出力されます。


今回は以下の写真から顔検出を行いましたが、faceLandmarksの情報を画像に当てはめてみると、確かに顔の特徴を捉えて検出できていることが分かりました。


いかがでしたか?
次回は、Face APIで取得した情報をOpenCVで画像に描き込んでみます。
次回もお楽しみに!


Azure Storage編 ~【Re:New】5分でわかるAzure Storage アップロードとダウンロード~

今回は、「Microsoft Azure Storage Explorer」を使ってAzure Storageにデータをアップロード、ダウンロードする方法をご紹介します。

Microsoft Azure Storage Explorerについて

Azure Storageに関するデータをアップロード、ダウンロードする方法としては、
以前「AZURE STORAGE編~5分でわかるAZURE STORAGE BLOB アップロードとダウンロード~」にて「Azure Storage Explorer」というサードパーティ製ツールをご紹介しました。

今回ご紹介する「Microsoft Azure Storage Explorer」は「Azure Storage Explorer」と名称こそ似ていますが、Microsoftが提供する公式のクライアントツールとなります。
Azure Storageのクライアントツールはいくつかありますが、スタンドアロンアプリとして唯一Mac OS、Linuxにも対応している点が特徴として挙げられ、またMicrosoft純正のためMicrosoftアカウントで容易にAzure Storageを管理できるツールとなっています。

ストレージアカウントの登録

ここからは、実際にMicrosoft Azure Storage Explorerを使ってAzure Storageを操作していきます。
Microsoft Azure Storage Explorerについては、こちらのサイト
からダウンロードし、インストールをしておきます。
また、ストレージアカウントについては、このツールでは作成ができないため、あらかじめ作成しておきます。

※ストレージアカウントの作成については「AZURE STORAGE編~【RE:NEW】5分でできるストレージ作成 ~」
を参照ください。

ストレージアカウントを登録する場合には、接続文字列、SAS URI、アカウントキーのいずれかが必要になります。
今回はアカウントキーを用いて接続を試みるため、あらかじめアクセスキーを取得しておきます。
Azureポータルの「ストレージアカウント」から接続したいストレージアカウントを選択し、「アクセスキー」から「ストレージアカウント名」およびアカウントキーをコピーして控えておきます。(アカウントキーは「key1」、「key2」のいずれでも構いません。)

ストレージアカウントの情報が取得できたら、Microsoft Azure Storage Explorer画面左上のプラグ型アイコンをクリックします。


表示されるテキストボックスには、登録するストレージアカウントの接続文字列、SAS URI、アカウントキーのいずれかを入力します。
今回はアカウントキーを用いるため、先ほど取得したアカウントキーを入力して「Next」をクリックします。
※ ここで、接続文字列、またはSAS URIを入力した場合、入力形式に合わせて接続情報が読み取られ、即時接続可能な状態になります。ただし、SAS URIを入力する場合には、「List」のアクセス許可が有効でないと接続できません。


続く画面では、アカウントキーがすでに入力済みとなっているため、「Account name:」にアカウント名を入力し、「Storage endpoints domain:」で「Microsoft Azure Default」を選択して「Next」をクリックします。


最後に入力の誤りがないことを確認したら「Connect」をクリックして接続を行います。

ツリーにストレージアカウントが追加されていることが確認できました。

Azure Storageの操作

ストレージアカウントが登録できたので、Azure Storageを操作してみます。
まずは、BLOBストレージに新しいコンテナーを作成します。ストレージアカウントの「Blob Containers」を選択後、右クリックメニューで「Create Blob Container」を選択します。


ツリー上に新しいコンテナーが追加されるので、任意のコンテナー名(半角英数小文字、およびハイフンのみ)を入力します。

作成されたコンテナーはデフォルトではパブリックアクセスが許可されていないため、必要に応じて、コンテナーの右クリックメニューの「Set Public Access Level...」でアクセス許可を変更します。


今回はテストのため、2番目の「Public read access for container and blobs」に変更します。

ファイルのアップロード、ダウンロード

作成したコンテナーにファイルをアップロードします。
コンテナーを選択した状態で、アップロードしたいファイル、フォルダーを画面にドラッグ&ドロップします。


アップロードプロセスが実行され、ドラッグ&ドロップしたものがそのままコンテナーに反映されます。フォルダーをアップロードした場合にはフォルダー構造ごとアップロードされます。

BLOBのURLにアクセスするとアップロードしたファイルが表示されました。


ダウンロードに関してはドラッグ&ドロップではできないため、ファイルを選択した状態でツールバーの「Download」をクリックします。
保存ダイアログが表示されるためするフォルダーを選択して保存をクリックすると指定したフォルダーにファイルがダウンロードされます。

いかがでしたか?
次回は、Microsoftアカウントを使ったMicrosoft Azure Storage ExplorerでのAzure Storageの管理をご紹介します。

次回もお楽しみに。


Cognitive Services: Text Analytics APIで印刷物の写真から正確な言語判定をしてみた

前回、「OCR機能で印刷物の写真からテキストのデータ化と言語判定をしてみる」というタイトルで
Microsoft Cognitive ServicesのComputer Vision APIで印刷物のテキストデータ化と言語判定を行いました。
Computer Vision APIでは26の言語の自動判定が可能でしたが、対応しない言語の判定は類似性の高い言語として判定されてしまいます。
そこで今回は、Text Analytics APIを併用してより正確な印刷物の言語判定を行ってみます。

Text Analytics APIの言語判定

Text Analytics APIは120の言語に対応した言語判定APIで、入力したテキストが何語かを判定することができます。
26の言語に対応するComputer Vision APIのOCRよりも幅広く判定ができるため、OCRで未対応の言語に対しても正確化な言語判定が期待できます。

Text Analytic APIのリクエストは、Request bodyに判定対象の識別IDとテキスト、Request parametersに判定する言語数の設定をします。
Request bodyでは、「id」および「text」を配列として複数設定することができ、それぞれのidごとに言語判定をすることができます。しています。

・Python 2.7サンプルコード

[crayon-60988d44e5abf956761398/]

上記のサンプルコードに3つの言語のテキストを設定して分析をすると、idごとに判定された言語とその確度のスコアがJSON形式で返されました。
入力したテキストは「トイレはどこですか?」とドイツ語、バスク語、インドネシア語で質問する短い文章ですが、それぞれ"German"、"Basque"、"Indonesian"と該当する言語で判定することができていました。
バスク語、インドネシア語に関しては、アルファベットで書かれているものの、OCRの言語判定には対応していないため、Computer Vision APIを補完する目的にText Analytics APIを利用することが出来そうです。

・入力テキスト

id text
WC-1 Wo ist die Toilette?
WC-2 Non dago komuna?
WC-3 Di mana kamar kecil?

・レスポンス
[crayon-60988d44e5ac6265821209/]

印刷物の言語判定

前回の「OCR機能で印刷物の写真からテキストのデータ化と言語判定をしてみる」では、OCRで未対応のラテン語が「英語」と判定されてしまいました。
上述のようにText Analytics APIがOCRの未対応言語にも対応できることが分かったため、Compueter Vision APIとText Analytics APIを連携させて、改めてラテン語の歌詞の印刷物の言語判定を試してみます。

言語判定に関しては下記のコードを使用しました。前回使用したコードにText Analytics APIによる分析を追加したもので、OCRでテキストデータ化した文字列を、そのままText Analytics APIに渡して言語判定を行っています。

[crayon-60988d44e5acb921271711/]

上記コードにてラテン語の歌詞を認識させると、「Language: Latin」と正しく言語判定させることができました。
他、日本語、ドイツ語でも試しましたが、いずれもText Analytics APIで正しく言語判定ができており、APIを連携させることで正確に言語判定を行えることがわかりました。

今回はText Analytics APIとComputer Vision APIを使って印刷物の言語判定を行いましたが、Computer Vision APIでは対応しきれない言語判定も、言語判定に特化したText Analytics APIで補うことで精度を高められることがわかりました。
このケースはニッチな用途にしか適応できませんが、Cognitive ServicesではBing Speech APIなど20以上のAPIが用意されているため、APIの連携により汎用的、実用的な機能の開発ができるのではないでしょうか。

次回は、Bing Speech APIのText to Speech機能を併用して印刷物の読み上げ機能を検証していきます。

お楽しみに!


Cognitive Services: OCR機能で印刷物の写真からテキストのデータ化をしてみる

今回は、Microsoft Cognitive ServicesのComputer Vision APIで利用できるOCR機能を使って印刷物に描かれた文字の読み取りをさせてみました。

Computer Vision APIについて

Computer Vision APIは画像からオブジェクトを認識し、内容を抽出できるサービスで、画像分析、タグ付け、著名人の認識、テキスト抽出、およびサムネイル生成など様々な機能が利用できます。
利用料金は月5000トランザクションまで利用出来る無料の「Free」と、従量課金型の「Standard」が設定されており、「Free」で利用検証をして、実運用時に「Standard」に変更するといったような運用ができます。

レベル 機能 単位 料金
Computer Vision API - Free   トランザクション 5,000 無料トランザクション / 月
Computer Vision API - Standard 最大 10 トランザクション/秒 トランザクション ¥153/1,000 トランザクション

※ 現在はプレビューのため価格には割引が適用されています。

OCR機能について

OCRはOptical Character Recognition (光学文字認識)の略で、画像データ内のテキストを認識し、文字列データとして読み取る機能です。
OCR自体は新しい技術ではなく、1950年代には商用システムとして利用されるほど歴史が深いもので、スキャナーなどのオプション機能としても一般的に提供されているものになります。
Cognitive Servicesでは、Computer Vision APIの1機能としてOCR用APIが提供されており、写真に撮った文書から文章の傾きや言語情報などを検知して文字列データに変換することができるようになっています。

Computer Vision APIのOCR機能

Computer Vision APIのリクエストはFace APIとほぼ同じで、Request headerにAPIキー、Request bodyに画像を取得するURLを設定し、Request parametersに判別する言語の設定をします。Computer Vision APIのOCR機能は現在21の言語に対応しており、言語設定を「'unk'」とすると、言語を自動判別して文字列に変換することができます。

・Python 2.7 サンプルコード
[crayon-60988d44e63d6382979724/]
上記コードで、文字列を画像として保存したものをComputer Vision APIのOCRで分析すると、以下のようなJSONが返されます。分析結果は、文章のブロック、行、単語のレベルごとに、「region」、「lines」、「words」の階層を持った配列として出力されるため、ルールに沿って展開することで容易に文字列に変換することができます。

・入力画像

・レスポンス
[crayon-60988d44e63df804962648/]
各階層の「boundingBox」は行や単語の検出範囲(座標)を示しています。「boundingBox」の座標は、元画像の座標ではなく、「orientation」と「textAngle」を基に行が水平になるように回転させた後の座標を示しており、OpenCVで検出位置を可視化する場合などの処理を行う場合は、元画像の回転処理を行う必要があります。


OCR機能は日本語にも対応しており、試しに日本語の画像データを入力してみると書かれている、かな、漢字をテキストデータに変換することができました。

ただし、西欧言語とは異なり、1文字を単語として認識するため、欧米言語とは異なる方法でテキストデータ化する必要があるようです。

OCRによる自動言語判定

Computer Vision APIのOCR機能がどの程度まで正確にデータ化と言語判定できるか試してみます。
今回は、滝廉太郎の「荒城の月」(日本語)、ベートーヴェンの「交響曲第9番」(ドイツ語)および「Ave Maria」(ラテン語)の歌詞を印刷した紙を写真に撮ってOCRでテキストデータへの変換と言語判定をしてみました。


テキストデータへの変換には下記のコードを使用しました。上述のように欧米言語と日本語では単語の認識が異なるため、日本語の判定の場合には単語のスペース区切り処理を行わないように処理を分けています。
[crayon-60988d44e63e5625363700/]
まず、日本語の「荒城の月」を認識させてみると、「language:ja」(日本語)と判定され、「荒城の月」の歌詞を表示することができました。比較的難しい漢字の多い歌詞ですが、認識の誤りは「鳴きゆく雁の数見せて」の「ゆ」が小書きになっているのみで、漢字含めほぼ正確に認識できていることがわかりました。


続いて、ドイツ語の「交響曲第9番」を認識させてみました。26行にわたる長い歌詞ですが、ウムラウトやエスツェットなど特殊な文字を含めても誤認識は0で、正確にテキストデータに変換できていました。言語も「language:de」(ドイツ語)と判定されており、言語の自動判定も正確にできていることがわかりました。

最後にラテン語の「Ave Maria」を認識させてみました。歌詞自体はそれほど長くなく、文字もアルファベット26文字のみのため、文字認識はドイツ語同様に誤認識0で、正確にテキストデータ化できていました。しかし、OCRの言語判定機能はラテン語に対応していないため、言語判定に関しては最も近いと思われる「language: en」(英語)と判定されてしまいました。

今回は、Computer Vision APIのOCR機能を使用して印刷物のテキストデータ化と言語判定を試してみましたが、
スマートフォンで撮った文書の写真でも精度良くテキストデータに変換することができており、実用性の高さを感じました。

また、言語判定に関しても対応言語であれば正確に判定できるようで、何語かわからない文書もスマートフォンで撮るだけで言語判定できるといった利用ができるのではないでしょうか。

一方、対応していない言語に関しては単語の傾向か類似の言語を判定してしまうようなので、正確な判定を行う場合には別の手段をとる必要があります。

そこで次回は、OCRに加え言語判定に特化したText Analytics APIを併用して、より正確な言語判定を行う検証をしていきます。

お楽しみに!


Azure Machine LearningをPowerShellで操作してみた。② (プレビュー)

今回は、前回ご紹介したAZURE MACHINE LEARNINGをPOWERSHELLで操作するモジュール「AzureMLPS」を使い、新規Workspaceの作成やExperimentのエクスポート、インポートをする方法をご紹介します。

AzureMLPSには新規Workspaceの作成やExperimentをjson形式でエクスポート、インポートする機能が備わっています。
この機能を使って、既存のWorkspaceからExperimentをエクスポートし、新規作成したWorkspaceにインポートをしてみます。

※本記事にはAzureクラシックポータルでの操作が含まれており、今後仕様が変更になる場合があります。

Workspaceの新規作成

まずWorkspaceの新規作成ですが、作成にあたってAzureに「管理証明書」を登録しておく必要があります。
PowerShell で下記のコマンドを実行して自己証明書の作成とcerファイルのエクスポートを行います。

[crayon-60988d44e6cb1194947682/]

作成されたcerファイルをAzureに登録します。
Azureクラシックポータルの「設定」から「管理証明書」タブを選択し、「アップロード」をクリックします。

先ほど作成したcerを選択し、右下のチェックをクリックします。

管理証明書がアップロードできたら、下記コマンドによりサムプリントを確認しておきます。

[crayon-60988d44e6cb7477111842/]

続いて、Workspaceの作成に「ストレージアカウントキー」が必要になるため、下記コマンドによりPowerShellでAzureに
サインインしておきます。

※この操作には「Azure PowerShell」のインストールが必要になります。

[crayon-60988d44e6cba134897476/]

以上の操作が完了したらPowerShell で新規Workspaceを作成していきます。
下記のコマンドを実行することで、既存のWorkspaceと同じストレージアカウントに新規Workspaceが作成されます。

[crayon-60988d44e6cbc572732736/]

Experimentのエクスポートおよびインポート
Workspaceの作成ができたところで、既存のWorkspaceからExperimentをエクスポートし
新規Workspaceへインポートします。

今回は「Run Selected - Sample」というExperimentをエクスポートし、「New - Run Selected」という名称で新規Workspaceにインポートします。

まずは、下記のコマンドによりExperimentをjson形式でエクスポートします。
OutputFileオプションにはファイル名を指定します。実行すると指定したフォルダにjsonファイルが出力されます。

[crayon-60988d44e6cbe075880126/]

続いて、出力したjsonファイルを新規Workspaceにインポートしますが、その前にAzureMLPSの「config.json」をコピーして新規Workspace用の設定ファイルを作成しておきます。

新規Workspace用設定ファイルを作成したら、下記のコマンドにてExperimentをインポートします。
InputFileに出力したExperimentのjsonファイル、NewNameに新しいExperiment名、ConfigFileに新規Workspace用config.jsonの絶対パスを指定します。

[crayon-60988d44e6cc1188662544/]

「New - Run Selected」が追加されていることが確認できました。

いかがでしたか?

エクスポート機能はWorkspaceの整理だけでなくExperimentのバックアップとしても重宝するのではないでしょうか。
次回はPowerShellを使ったバッチ処理についてご紹介します。

次回もお楽しみに!!


【速報】Azure Machine Learning 東日本リージョンでサービス提供開始

遂に、東日本リージョンでAzure Machine Learning (Azure ML)のサービス提供が開始されたようです。
今回は、これまで紹介していなかったAzureポータル上からのAzure MLのWorkspace作成と合わせてご紹介します。

東日本リージョンの概要

これまでAzure MLは、米国中南部、ヨーロッパ西部、東南アジアの3リージョンでしか提供されていませんでしたが、
このたび東日本リージョンが4番目のリージョンとしてサービス提供を開始したようです。

しかし2016年11月8日現在、Microsoft からの公式な発表やドキュメントはなく、料金についても現状では不明となっております。こちらについてはわかり次第、別の記事にてアナウンスをさせて頂きます。

Workspaceの作成

東日本リージョンのWorkspaceはAzureポータル、クラシックポータルのいずれからでも作成ができますが、
今回はAzureポータルから作成をしていきます。
Azureポータルにログインしたら、サービスメニューから「Machine Learning ワークスペース」を選択します。

「Machine Learning ワークスペース」の一覧の左上にある「+追加」をクリックします。

ワークスペースの新規作成ペインが表示されるので、ワークスペース名など必要事項を入力していきます。
ここで、「場所」の項目で「東日本」が選択可能であることが確認できます。

Azureポータルでワークスペースを作成する場合、同時に「Machine Learning Webサービス」の料金プランの設定が必要に
なります。
設定後のプラン変更も可能であるため、今回は「DEVTEST 標準」のプランを選択します。
入力が終わったら、「作成」をクリックしてデプロイを開始します。

デプロイが完了すると、作成したワークスペースが一覧に追加されます。Azureポータルで作成したワークスペースの場合、一覧の「ワークスペースID」の項目が表示されませんが、
プロパティやMachine Learning Studioで確認することができます。

Machine Learning Studioに移動する場合は、ワークスペースを選択して、「概要」の「Machine Learning Studioの起動」をクリックします。

別ウィンドウでMachine Learning Studioのサイトトップページに移動するため、そのまま画面右上または中央の「Sigh In」をクリックします。
(Microsoft アカウントのログインが必要になる場合があります。)

Machine Learning Studioにログインできました。
Machine Learning Studioの画面でもワークスペースが東日本リージョンに作成されていることが確認できました。

いかがでしたか?
これまで、「Azure MLを使いたいけど国外リージョンはセキュリティやプライバシーが心配」とあきらめていた方も、
東日本リージョンでのサービス開始でそういった障壁がグッと下がるのではないでしょうか?
今回は速報のため、Azure MLの東日本リージョンについての詳細までは触れられていませんが、今後も詳細やアップデート情報は順次アナウンスをしてまいります。

次回もお楽しみに!!


Azure Machine Learningの新機能「Run selected」を試してみた

今回は、Azure Machine Learning (Azure ML)に新たに実装された機能「Run selected」をご紹介します。

「Run selected」の概要

「Run selected」は2016年5月21日に実装された、選択したモジュールの結果のみを出力するためのExperiment実行方法
です。

Azure MLは簡単なモデルであれば数個のモジュールをつなげることで多項分類などの分析ができるシンプルなサービス
になっています。

しかし、実業務で使用する場合、最適なモデルを探求するために複数の分析方法を組み込んだり、
データ加工の条件分岐を組み込んだりしているうちに、以下のように膨大かつ多並列的なモデルになってしまうことが
多々あります。

最初に示した基本的なモデルであれば1~2分程度で分析が終わるのですが、
ここまでモジュールが増えると全モジュールを実行する「Run」では無駄なモジュール実行が発生してしまい、
一回の実行に15~20分と分析にも時間がかかってしまいます。

また、一部だけ結果がほしい場合でも、すべて実行しなければならないため、分析が非効率的になってしまいます。

今回実装された「Run selected」は、選択したモジュールが結果を出力するのに必要なモジュールだけを選択的に実行する
ことができるため、無駄なモジュールの実行を省くことができ、分析時間の短縮、分析コストの削減が期待できます。

「Run selected」の使い方

「Run selected」の使用方法は非常に簡単です。
結果がほしいモジュールを予め選択しておき、画面下部の「RUN」→「Run selected」を選択することで実行できます

「Run selected」にマウスオーバーすると選択したモジュールを実行するのに必要なモジュールが青くピックアップ
されます。

多くのモジュールを使っていますが、実際の分析には半分程度のモジュールしか必要ないことがわかります。

実行時間はというと、従来の「Run」で実行した場合には18分59秒かかっているのに対し、
「Run selected」で実行した場合には、8分33秒と半分以下の時間で実行が完了していることが分かりました。

「Run selected」は多数の分析から一部だけ結果を出力したい場合や、モジュール構成を一部変更して再実行するなど多くの場面で分析時間短縮が期待できます。

また、Azure MLはExperimentの実行時間で課金されるため、「Run selected」を利用して、業務時間、分析コストの両面でメリットを得られるのではないでしょうか。

次回もお楽しみに!!