2016年8月21日 星期日

Microsoft Cognitive Services (1) - 使用Computer Vision API辨識人臉

Cognitive Services當中,我覺得最簡單好用的就是Computer Vision API。

Computer Vision ,顧名思義,它可以幫你來識別一張照片。識別什麼呢? 例如,他可以幫影像加上Tag來分類,或是描述一張影像中的內容(像是,照片中的人手上拿著一把槍),它也可以幫你辨識照片中的人臉(男性?女性?幾歲?),或是識別照片中的文字。或者,自動判斷這張照片是否為不雅照,用途非常廣泛。

我們先以最簡單的人臉識別來說好了。

雖然,Cognitive Services中有另外一組Face API可以幫你做到更細緻的功能,例如判斷照片中的人是誰,但如果你只是很簡單的想要找出照片中有多少人,那Computer Vision API 可以輕易幫你做到。

首先,請先參考先前這篇文章,使用Computer Vision API 前你必須有一個Key,最簡單的方式,就是用Microsoft Account免費申請。

取得Key之後,我們建立一個Web Application專案來試試看。請在專案中透過Nuget引用 Microsoft.ProjectOxford.Vision:

接著就可以在程式碼當中使用Computer Vision API了。使用該API的第一個動作,建立一個VisionClient:

 
 //使用Computer Vision API
 var visionClient = 
      new Microsoft.ProjectOxford.Vision.VisionServiceClient(VisionAPIKey);

記得建立時,要把你的VisionAPI Key傳進去。

接著,只需要透過呼叫 AnalyzeImageAsync(stream, VisualFeatures) 方法就可以分析圖片。

其中stream是圖像來源,而VisualFeature則是指定要分析圖片的那些特徵,例如,我們透過WebForm的FileUpload控制項上傳圖片,並且要分析圖片的意義與識別圖片中有多少臉,因此,程式碼如下:

//分析圖片(從FileUpload1.PostedFile.InputStream取得影像)
//分析 Faces & Description 
var Results = await visionClient.AnalyzeImageAsync(this.FileUpload1.PostedFile.InputStream,
new VisualFeature[] { VisualFeature.Faces, VisualFeature.Description });

分析後的結果會從Results物件回傳,因此,我們可以透過底下的程式碼來取得圖片中有多少臉,以及圖片的說明Description:

int isM = 0, isF = 0;
//列出每一個找到的臉
foreach (var Face in Results.Faces)
{
    //取得人臉位置
    var faceRect = Face.FaceRectangle;
    //繪製人臉紅框 
    g.DrawRectangle(
                new Pen(Brushes.Red, 10),
                new Rectangle(faceRect.Left, faceRect.Top,
                    faceRect.Width, faceRect.Height));
    //計算幾男幾女
    if (Face.Gender.StartsWith("M"))
        isM += 1;
    else
        isF += 1;
}

你會看到上面的程式碼當中,我們透過g (Graphics物件)幫找到的人臉繪製紅框,執行的結果大致上如下(對,半張臉它認不出來):

請特別留意上面兩張圖,執行結果中『說明:』後面的文字,是Computer Vision API 分析後對圖片的description,這很有趣,你會發現其實目前的辨識效果已經相當不錯,隨著大數據越來越成熟,整個辨識率的提升指日可待。

Computer Vision API 除了識別圖片中的人臉、判斷整個圖片的意義,它還可以幫我們找出圖片中的文字,也就是OCR的功能,下一篇,我們來看這個部分

source code : https://github.com/isdaviddong/MSVisionAPI_Face_Desc/blob/master/testVisionAPI/default.aspx.cs

沒有留言: