C#Face Service

來源:互聯網
上載者:User

標籤:save   pos   tps   9.png   使用者   布局   資料   實現   png   

C#百度Face Service

 

最近看到一隻我家徒兒發來的連結,原來是一堆百度AI的SDK,於是一時興起就做了一隻Face Service,喵喵喵(●‘?‘●)

一、準備工作

首先,當然是下載SDK啦:http://ai.baidu.com/sdk#sdk-category-bfr,可以根據自己的語言選擇,在這裡使用C# WPF 做樣本

SDK裡的檔案大概是醬紫:

FaceDemo.cs : 官方樣本檔案

AipSdk.dll : 需要調用的SDK

AipSdk.XML : SDK注釋

Newtonsoft.Json.dll : 用於解析JSON 必須是版本10.0.0.0

Newtonsoft.Json.xml : 注釋

有了SDK,接下來還需要用於拍照的dll,這裡我們使用WPFMediaKit.dll來實現

二、編碼工作

在我們使用SDK之前還需要錄入面部資訊,即使用WPFMediaKit.dll進行拍照並儲存。

布局:需要一隻Button,並添加引用xmlns:Controls="clr-namespace:WPFMediaKit.DirectShow.Controls;assembly=WPFMediaKit",和添加控制項:<Controls:VideoCaptureElement  x:Name="vce"/>

WPFMediaKit的使用,即在button的單擊事件寫入:

 1 vce.Stop(); 2 RenderTargetBitmap bmp = new RenderTargetBitmap( 3 (int)vce.ActualWidth, 4 (int)vce.ActualHeight, 5 96, 96, PixelFormats.Default); 6 bmp.Render(vce); 7 BitmapEncoder encoder = new JpegBitmapEncoder();//預設使用JPG格式儲存,可以切換成其他格式,因為JPG格式的檔案更小,所以這裡推薦使用 8 encoder.Frames.Add(BitmapFrame.Create(bmp)); 9 using (MemoryStream ms = new MemoryStream())10 {11 encoder.Save(ms);12 byte[] data = ms.ToArray();13 File.WriteAllBytes("b.jpg", data);//寫入檔案b.jpg可以替換成其他14 }

這樣我們儲存了面部資料,接下來就可以調用SDK了(為了使用者資料安全可以為儲存的檔案啟用加密設定)

由於我們需要2次使用者的面部資料來判斷是否為同一個人,所以還需要進行第二次採集資料(在使用者點擊"識別"按鈕時)

 1 vce.Stop(); 2 RenderTargetBitmap bmp = new RenderTargetBitmap( 3 (int)vce.ActualWidth, 4 (int)vce.ActualHeight, 5 96, 96, PixelFormats.Default); 6 bmp.Render(vce); 7 BitmapEncoder encoder = new JpegBitmapEncoder();//預設使用JPG格式儲存,可以切換成其他格式,因為JPG格式的檔案更小,所以這裡推薦使用 8 encoder.Frames.Add(BitmapFrame.Create(bmp)); 9 using (MemoryStream ms = new MemoryStream())10 {11 encoder.Save(ms);12 byte[] data = ms.ToArray();//此處不必儲存,因為之後將直接用到byte[]13 ...//未完

接下來要在讀取到byte[]之後,再次讀取之前使用者的面部資料

byte[] bata2 = File.ReadAllBytes("b.jpg");

最後,調用SDK並判斷是否為同一人

1 var client = new Baidu.Aip.Face.Face("API KEY", "Secret Key");//這的KEY可以到百度申請,連結:https://console.bce.baidu.com/ai/?fromai=1#/ai/face/app/list2 var images = new byte[][] { data, data };//之前我們擷取的資料3 var result = double.Parse(client.FaceMatch(images).First.First.Last.Last.First.ToString());//發送並解析返回的資料,擷取兩個資料的相似性4 if (result >= 90)//判斷相似性,一般在大於90時是同一人,可以自己調節5 {6    //此處為識別成功(同一人)7 }else{8   //此處為識別識別(不同的兩人)9 }

這樣我們就完成了整個SDK的調用

三、運行測試

首先錄入我的資料,嘟嘟嘟

錄入完成,接下來就要識別了

蛤!成功,接下來換一個人

嘟嘟,失敗惹

 

本教程完整源碼:https://github.com/TwilightLemon/Face (●‘?‘●)求STAR和Follow

C#Face Service

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.