はつねの日記

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

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とか珍しいですね。

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

顔認証用のPersonGroupの登録

PersonGroupの作成

顔認証用データを保存するグループを作成します。

https://api.projectoxford.ai/face/v0/persongroups/{personGroupId}/?subscription-key=<Your subscription key>

のように指定して、HTTP PUTします。

image

Personの登録

PersonGroupに顔認証用の個人の特徴点を登録します。

https://api.projectoxford.ai/face/v0/persongroups/{personGroupId}/persons?subscription-key=<Your subscription key>

事前に顔画像をFace APIでFaceIDにしておきます。正面か正面に近い画像が良いようです。

image

最大32個の同一人物のFaceIdを配列で指定し、nameで人物名、userDataで備考データをHTTP POSTで指定します。

上手く登録できたらPersonIdが返却されます。

image

トレーニング

PersonGroupが登録できたらトレーニングを行います。これを行わないと顔認証ができません。

https://api.projectoxford.ai/face/v0/persongroups/{personGroupId}/training?subscription-key=<Your subscription key>

トレーニング状況の確認

トレーニングには多少の時間が必要です。ステータス確認で"succeeded"になったかを確認します。

今回のように2つのFaceIdのトレーニング時間は4秒でした。

https://api.projectoxford.ai/face/v0/persongroups/{personGroupId}/training?subscription-key=<Your subscription key>

Forguncy Pro + Azureの記事がCodezineに掲載されました。

codezine.jp

 

Forguncy Proの外部データベース連携を使って、Microsoft Azure SQL Databaseのデータメンテアプリを素早く構築する方法を調べてみました。

CodezineにFEZ Spiderで計測したデータをクラウド経由でストアアプリで表示する記事が掲載されました。


IoTの計測データをWindowsストアアプリで可視化してみよう (1/3):CodeZine

 

.NET Micro Frameworkを使ってセンサー値をAzure Mobile Service経由でストアアプリに表示する内容です。

記事の都合上、データアップロードもAzure Mobile Serviceを使っていますが、Event Hubを使って動作しているバージョンもあります。近々、Code Recipeで紹介したいと思います。

 

AEDオープンデータプラットフォームがLODチャレンジJapan 2014で優秀賞受賞


LODチャレンジJapan2014 受賞作品発表 at LODチャレンジブログ

 

AEDオープンデータプラットフォームがLODチャレンジJapan 2014でアプリケーション部門優秀賞と日本マイクロソフト賞を頂きました!

様々な自治体の担当者様、データを整形して送っていただいたみなさんのご協力あってことその受賞ですし、とりくみが評価されたと同時に期待されての受賞です。

2015年はますますデータ拡充、共通語彙基盤ver2.2準拠エンドポイントの作成などを行っていきます。また、Micorosoft Azure SQL Databaseの列カラムストア化なども実施しますますの高パフォーマンスを実現していきます。

今後ともよろしくお願いします。