はつねの日記

Kinect, Windows 10 UWP, Windows Azure, IoT, 電子工作

Azure DataMarketは2017/3/31に閉鎖されます。

Azure DataMarketは閉鎖され、そこで提供されていたサービス(すべてかは未確認)はAzure Marketplaceにて提供されます。

閉鎖時期は2017/03/31、それに先立つ2016/12/31以降は新規オーダーを受け付けなくなります。

--

DataMarket and Data Services are being retired and will stop accepting new orders after 12/31/2016. Existing subscriptions will be retired and cancelled starting 3/31/2017. Please reach out to your service provider for options if you want to continue service.

--

 

例えば、Microsoft Translator APIの場合、実際の翻訳URLなどは変わりませんが、そこで使われる認証トークンの取得が変更なります。

 

Azure DataMarketでの認証

サンプルコード

https://gist.github.com/b01abb3ddc0414157ba8d12bda9311e0:embed#Azure

 

Azure MarketPlaceでの認証

サンプルコード

https://github.com/MicrosoftTranslator/GetAzureToken/blob/master/AzureAuthToken.cs

Meets IT and PUSH 2016 大阪を開催します

去年、札幌そして東京で開催した「Meets IT and PUSH」を3/26(土曜日)に大阪で開催します。

atnd.org

みなさんは胸骨圧迫やAED使用の経験はありますか?

 

AEDメーカーさんが講習会を開いていたり、防災訓練で体験するというチャンスはありますが、大多数の方は経験ないと思います。

 

Meets IT and PUSHでは、「PUSH」経験として胸骨圧迫とAEDを講義と実技で体験できます。

普段興味があってもだとか、体験か行きたいけれど平日はちょっと二の足を踏んでいた方だとか、ぜひ参加していただけたらと思います。

 

一方の「IT」は、AEDの位置を全国一律のAPIで取得できるAEDオープンデータプラットフォームの取り組みをご紹介します。

AEDオープンデータプラットフォームは、Azure Mobile AppsとSQL Databaseを使って実現しております。このあたりの仕組みの話、SQL DatabaseもS1じゃないと賄えないくらいのアクセス量があるのでそのあたりの話もできたらと考えています。

AEDという具体的な問題でITを考えてみるとIT苦手なのでって方もきっと理解が進むと思います。

 

また、JavaScriptを使って簡単にマップ上にAEDの位置を表示する方法についてもハンズオンで体験できます。PCをお持ちの方はぜひご持参頂き体験してみてください(タブレットでもたぶんできます)。

やっぱりパブリッククラウドってすごい!

Azureすげー

ちょっと聞いてください!
このまえ、Azrue Mobile AppsがGAになってAzure Mobile Servicesからの移行もできるようになったので、さっそくやってみたんですよ。でもなんか失敗しちゃって。
英語ドキュメントみながら手動でやらないといけないのかなーって思っていたら「Your failed migration from Azure Mobile Services to App Service」ってタイトルのメールが見て、失敗したみたいだけれど「We identified the problem that was causing the difficulty and corrected it. 」だよって書かれていたんですよ。
ちゃんとエラーとか監視していて何も頼まなくても調査して原因特定して直してくれるとかクラウドってやっぱりすごい!
なんか夢のインフラなんじゃないかって思う訳ですよ。

師走の朝のちょっといいできごとでした!
それでは良い年末を!

Mobile AppsのQuickStartにあるソースコードは2種類

image

Azure Mobile Servicesをやった経験があると戸惑うのが、どうやってMobile Appsのアプリを作成するかです。

 

Azure Mobile Servicesであれば、管理ポータルからそのままnode.jsでアプリが作れるというか、ほとんど意識せずにTodoItemsなサンプルアプリができていると思います。

Mobile Appsでは、Webアプリとして何らかの方法でコードを書かないとなりません。

 

そんな時便利なのが、Quick Startの「手順2」にあるCreate a table APIです。

 

手順1でテーブルを作成しておいて、手順2でそれに合わせたWebアプリのプロジェクトを生成し、それをダウンロード。

Visual Studioで開いて手直してという流れです。

Azure Mobile Servicesではnode.jsでしたがMobile AppsではC#でもサーバ側が書けます。気楽さはnode.jsですがC#でバリバリカスタマイズというのもカスタマイズ量が増えれば増えるほど楽です。

 

なお、手順3はAzure Mobile Servicesでもあったクライアント側のサンプルアプリです。

ただ、残念ながら落ちてくるのは、Windows 8.1ストアアプリのユニバーサルテンプレートです。

とはいえ、このサンプルをみると、Mobile Appsでも接続にはMobile Service SDKでつなげるってことが理解できます。

つまり従来のMobile Servicesを使ったアプリであれば、URLを切り替えればMobile Appsにもつながるってことですね。

プロトコルはRESTですから当たり前といえば当たり前ですがちょっと安心ですね。

Mobile Appsを作成する

新しいポータルだと新規からMobile Appsを作成できます。

image

image

 

うまく作れたら作成されてURLにアクセスするとページが表示できます。

image

プロトコルをhttpじゃなくてhttpsにしてもつながります。

試しに鍵マークをクリックしてみるとこんな感じ。

image

 

従来のポータルだと「Webアプリ」のところに表示されていますね。

image

 

今までのMobile Servicesと比較するとhttpsじゃなくてhttpだったり

空気を読んで年齢を答えてくれる例のあれの裏側にあるAPIがAzure Marketplaceに登場してきました。

 Face APIっていうらしいですよ。

 

 

Marketplaceからの購入

でも、お高いんでしょう?

ふ、フリーっ!
無料ですか!

 

米国西部にしか展開できませんがさくっと作成できます。

管理用キーの取得

作成が完了するとAzureダッシュボードに「Microsoft Webサイト」にアクセスが必要だとリンクが張られているのでリンク先に移動します。

https://dev.projectoxford.ai/Developer

API仕様

Face APIには次のようなエンドポイントが公開されています。

  • Detection
  • Find Similar Faces
  • Grouping
  • Identification
  • Verification

Face APIのページ(というかProject  Oxfordのページ) には各エントリポイントを試せる「Open API Testing Console」が用意されています。

Detection

URLパラメタに指定する値は次の通り。

パラメタ名 説明
subscription-key トップページにあったPrimary Keyを指定します。
analyzesFaceLandmark 目とか口とかの画像上の位置判定の実施有無
これは年齢当てサイトでは使われていませんが、こんな判定までできるんですね。
analyzesAge 年齢推定の実施有無
analyzesGender 性別推定の実施有無
analyzesHeadPose 頭の向き判定の実施有無
pitch,roll,yawで返ってきます。
正面向いている写真だけ抽出とかにつかえそうですね。
なお、画像の中の顔の位置自体は、このパラメタがfalseでも関係なく常に返却されてきますので、それ使って顔の周りに四角い枠が描けます。

リクエストBodyにはJSON形式で画像のURLを指定します。ちゃんと自分でJSON形式で書いてくださいw

[HTTP POST]をクリックすると実行結果が返ってきます。

analyzesAgeとanalyzesGenderだけtrueにして実行してみると791msで戻ってきてますね。

16才の女性の画像であるって返ってきてますね。雨取千佳ちゃんと年齢近い!ww

ところでこのFaceIdですが他のエントリポイントで使うのでどれくらい維持されるのかと思ったら「The face ID will expire 24 hours after detection.」とのこと。24時間は保持されているみたいですね。これ利用率上がってくると時間短くなったりセッション内とかに変更されそうな予感。

そのほかの制限事項としては次のような感じです。

  • 画像フォーマットは、JPEGPNGGIF(最初のフレームだけ)、BMP
  • 画像サイズは、最大4MB
  • 顔のサイズとしては画像サイズとして36x36~4096x4096の間であれば認識
  • 1つの画像からは最大64人まで、それ以上多い時は顔の画像サイズが大きい人から
  • まだ実験段階なので年齢推定とか性別推定は性格じゃないかも

なお、画像自体を保存している訳ではなく特徴点とかそういったものみたいなので、faceIdから逆引きで画像URLを取得するAPIは用意されていないですね。

 

Detection(複数)

複数の人が写っている画像を指定してDetectionをしてみました。その結果は!

ちゃんと配列で帰ってくるんですね。

 

Find Similar Faces

顔画像の中から同一のものを抽出します。

事前にDetectionを使ってFaceIDを取得しておきます。

URLパラメタに指定する値は次の通り。

パラメタ名 説明
subscription-key トップページにあったPrimary Keyを指定します。

リクエストBodyにはJSON形式でfaceIdとfaceIdsを設定します。第二パラメタは配列なので[]で囲ってFaceIdを羅列します。

どれくらい並べられるかといえば最大100個まで。

処理速度は100ms。処理結果は第二パラメタに指定したのは姉妹で、1つめが該当人物。さて結果は?

きちんと1番目のfaceIdが返ってきましたね。

 

Grouping

最大で100個のfaceIdを指定して、同一人物ごとにグループ化します。

URLパラメタに指定する値は次の通り。

パラメタ名 説明
subscription-key トップページにあったPrimary Keyを指定します。

リクエストBodyにはJSON形式の配列でfaceIdsを設定します。

今回は3つのfaceIdを指定しています。このうちの2つが同じ人の別画像です。

応答時間は247ms。

結果は?

ちゃんと同一人物がグループ化されてます。

結果をよく見ると二重の配列になっているので、グループ化できるものが複数あった時にもgroups:[[Aさん1,Aさん2],[Bさん1],[Bさん2]]みたいな感じで返却されてきます。

 

Identification

FaceIdで指定した画像が誰なのか、事前に登録しておいたデータと顔認証を行い、特定を行います。

Identificationを使うためには、同一人物の顔画像をPersonとして登録しておき、さらに複数のPersonをPersonGroupとして登録したものを用意しておきます。

Personの作り方やPersonGroupの作り方は別エントリで説明しています。

 

PersonGroupが準備できたら、最大10人のfaceIdを配列で指定して、PersonGroupの中のPersonと比較します。

 

ヒットした場合は、FaceIdごとにCandidatesが返され、その中にPersonIdがあります。

サンプルではpersonIdに対するnameも返却されるみたいでしたが、現時点での実際の動作ではnameが返ってきません。このあたりはそのうち治っていくでしょう。

 

なお、PersonGroupのトレーニングが行われていないと次のような結果になります。

このときはPersonGroupに対するトレーニングを行ってください。

 

Verification

2つの画像から同一人物かを判定します。

事前にDetectionを使ってFaceIDを取得しておきます。例えば、

の2つの画像を比較していましょう。

事前にDetectionを使って2つの画像のFaceIdとして

d225347d-8a6c-48b6-af28-1bff90797c96

c71a4412-ce12-4015-9605-200c3d580e92

を取得しておきます。

URLパラメタに指定する値は次の通り。

パラメタ名 説明
subscription-key トップページにあったPrimary Keyを指定します。

リクエストBodyにはJSON形式でfaceId1とfaceId2を設定します。

[HTTP POST]をクリックすると実行結果が返ってきます。

応答時間は81ms。はやっ。

結果は同一人物(isIdentical=true)、適合度57.342%でした。

ちなみに同じ写真に別ID付与してやってみると適合度100%になります。

まあ当たり前ですねw

 

まとめ

Open API Testing ConsoleだけじゃなくてCode Samplesなんかもサイトから取得できます。

サポートされている言語は

と充実のラインナップです。Curlとか珍しいですね。

ぜひぜひ画像処理とかに活用してみてください。