[翻譯] 觀察how-old.net即時脈動

這兩天 How-Old.Net 爆紅,人人都把照片上傳分享,再分享趣味的同時,我們也來瞭解後面怎麼運作。

這篇文章說明了 How-Old.Net 背後運用了什麼技術,以及如何將使用者資料即時統計呈現。

全文開始

我們在 Microsoft’s Build 2015 開發者大會上呈現了一個簡單的範例。欲讓開發者瞭解怎麼使用 Azure 服務能夠簡易且快速的完成智慧型應用。藉由最近釋出的 Face detection API 我們建立了 how-old.net 。這網頁讓使用者上傳照片,預測照片中出現的人臉年齡以及性別。雖然人臉判別以及性別判斷有一定成效,年齡預測較為不準,使用者仍然喜愛這樣的服務。我們將網頁寄到了微軟群組的幾百人,讓他們試用且給我們一些回饋,樂觀的希望能夠有幾十個使用者願意使用幫助我們產生一些有用資料。

幾小時內,超過21萬張圖片已經上傳,而且全世界已經有三萬五千人使用過這服務(大約29k來自土耳其,看起來那邊有許多 Tweets 在討論這項服務)

這個 demo 即時反映了人們怎麼使用這項工具。舉例來說,我們假設人們大多會上傳預先準備的圖檔或是來自 Bing Search 的照片。然而,一半的照片卻來自使用者自己的上傳照片。這樣的分析推動我們去改進使用者經驗,且針對移動裝置多做圖片上傳的測試。
背後的魔法是什麼?

聽起來可能令人難以置信,這個專案只花了一些開發人員一天把元件組裝起來,含網頁以及背後的機器學習 API ,即時串流分析還有商業智慧呈現。是一個非常好的範例去呈現 Azure 開發人員的敏捷創造能力。關鍵元件主要有三:

  • 抽取性別及年齡

  • 得到即時的分析

  • 建立即時的儀表板呈現結果
    抽取性別及年齡

我們想創造一個有趣且帶有智慧的使用者體驗,所以瞭解了 Azure Machine Learning Gallery 提供的API。有 Face, Speech, Vision 等API,是由 Project Oxford 所提供。Face API demo page 使用 API 去做人臉判斷,我們發現這個API能夠估計年齡跟性別,應該會非常有趣,於是選了這個API。為了讓體驗更有趣,我們從 Azure marketplace 加入 Bing Search API 建立 how-old.net。

不僅年齡跟性別,也加入從 web browser 來的額外資訊,如標準 HTTP User Agent,照片上傳經緯度等。這些資料可以計算使用量統計,像是 iPhones/Windows/Android 點擊率,或是熱門區域等等。表示成JSON文件為:

{
  "event_datetime": "2015-04-27T01:48:41.5852923Z",
  "user_id": "91539922310b4f468c3f76de08b15416",
  "session_id": "fbb8b522-6a2b-457b-bc86-62e286045452",
  "submission_method": "Search",
  "face": { "age": 23.0, "gender": "Female" },
  "location_city": { "latitude": 47.6, "longitude": -122.3 },
  "is_mobile_device": true,
  "browser_type": "Safari",
  "platform": "iOS",
  "mobile_device_model": "iPhone"
}

即時的分析

為了瞭解即時的資料模式,我們採用新的 Azure 串流服務。

我們採用 Azure Event Hubs,一個可高度延展的發布註冊器,能夠每秒處理數百萬事件。使用這個 API 去串流先前的 JSON 文件。註:照片並沒有儲存,且沒有額外資料判別出來,也沒記錄使用者資料,只有 JSON 文件會串流到此 API。

下一步我們需要將此數千使用者的串流即時整理。為此需求,我們採用了 Azure Stream Analytics ,低延遲高輸出量的串流處理解決方案,讓我們用 SQL-like 的語言去處理串流的邏輯。

每秒取得10秒內的性別數量,可以使用以下的範例:

SELECT
    System.Timestamp AS OutTime,
    Face.gender AS Gender,
    Count(*) AS Count
FROM
    StreamInput
GROUP BY HoppingWindow(second,10,1),
         Face.gender

在上述例子,我們選了結果寫入的時間(OutTime),性別,還有性別數量。StreamInput 是 Event Hub送過來的資料。最後整理在10秒的區間,每秒位移。這個範例整理了男性跟女性的數量,便於顯示在儀表板。可以有多個串流分析查詢語法來自於同樣的 Event Hub。
即時的儀表板

我們使用了PowerBI去顯示結果,使用Azure,然後選取資料集,資料表來自 Stream Analytics。並不需要額外的程式碼撰寫就能夠創造即時的儀表板。

在此範例,我們用許多串流分析查詢語法。一個整理了年齡範圍與地點資訊,另外是上述的性別查詢。PowerBI 讓我們簡易的創造地圖,折線圖,樹狀圖等等,且即時更新。另外你還可以問自然語言的問題(例如,iOS性別年齡分佈有多少人),結果將顯示在儀表板上。

來試試http://how-old.net (#HowOldRobot) 希望你得到許多樂趣同時用API創造更多應用。

原文在此 how-old.net