1. 程式人生 > >使用C#winforms窗體實現人臉登入

使用C#winforms窗體實現人臉登入

首先我們來解決第一個問題
如何做到對兩張圖片的對比?
這一點問題百度已經給予了我們解決方案使用百度的ai來實現對兩張人臉的對比獲得人臉的相似度
在百度AI的首頁(http://ai.baidu.com/)找到
百度AI官網
點開即可進入人臉識別的一個頁面人臉對比的頁面
點選立即使用即可百度會要求你用百度賬戶登入,登入成功後會彈出一個人臉識別的應用管理 人臉識別的應用管理
點選建立應用就會彈出一個新的頁面
建立應用的頁面
填寫相應的內容完成應用的建立
建立成功回到人臉識別的應用管理
人臉識別的應用管理
點選應用管理
應用管理
這裡需要記住你的API Key和Secret Key我們在使用人臉識別需要用到這兩個引數

C#程式碼環節

在上面我們已經建立了應用,接著我們就可以在C#中直接使用了
1.首先你需要把下載資源包(AForge安裝目錄下的Release下的dll檔案,aip-csharp-dk-3.3.0.zip檔案中的AipSdk.dll和Newtonsoft.Json.dll)的dll檔案引入到專案中

using AForge;
using AForge.Controls;
using AForge.Imaging;
using AForge.Video;
using AForge.Video.DirectShow;
using Newtonsoft.Json.Linq;
using Baidu.Aip.Face;

2.把AForge安裝目錄下的Release下的dll檔案拖到工具框中會發現多出幾個我們所需的控制元件控制元件

準備工作到這裡就差不多了

接下來可以開始準備程式碼了

//例項化一個裝置過濾器
FilterInfoCollection videoDevices;

//例項化一個視訊裝置撲捉器
VideoCaptureDevice videoSource; //設定下標 private int selectedDeviceIndex = 0; /// <summary> /// 在窗體videoSourcePlayer控制元件中繫結展示拍攝裝置的鏡頭 /// </summary> private void ShowCam() { //從電腦中的裝置獲取視訊輸入裝置 videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice); //設定選中下標為0的裝置 selectedDeviceIndex = 0
; //獲得視訊源 videoSource = new VideoCaptureDevice(videoDevices[selectedDeviceIndex].MonikerString); //視訊解析度也設定為下標為0的裝置的解析度 videoSource.VideoResolution = videoSource.VideoCapabilities[selectedDeviceIndex]; //給控制元件繫結視訊源 videoSourcePlayer1.VideoSource = videoSource; //開啟控制元件 videoSourcePlayer1.Start(); }

已經把對應的控制元件連線好了,接下來就是抓拍照片

/// <summary>
/// 抓拍照片
/// </summary>
private void TakePhoto()
{
    //判斷視訊源是否為空
    if (videoSource == null)
    {
        //返回空
        return;
    }

    //撲抓圖片
    Bitmap bitmap = videoSourcePlayer1.GetCurrentVideoFrame();

    //將圖片存入一個臨時資料夾
    bitmap.Save("E:\\temp\\temp.jpg");

    //釋放資源
    bitmap.Dispose();
}

抓拍完之後就可以進行人臉識別開始

/// <summary>
/// 人臉對比
/// </summary>
/// <returns>人臉對比的結果</returns>
public double MatchFace()
{
    //建立一個用於儲存圖片位置的string型別的陣列
    string[] picPath = {"E:\\employeePicPath\\1.jpg","E:\\employeePicPath\\2.jpg","E:\\employeePicPath\\3.jpg"};

    //建立百度人臉識別Face交換類,注意這裡的API Key和Secret Key是你建立人臉識別應用時百度給你提供的
    Face client = new Face("API Key","Secret Key"); 

    //將抓拍到的圖片轉化成二進位制流
    byte[] tempPic = File.ReadAllBytes("E:\\temp\\temp.jpg");

    //利用Foreach迴圈來對圖片進行比對
    foreach(string path in picPath)
    {
        //建立儲存圖片的二維陣列
        byte[][] images = {tempPic,File.ReadAllBytes(path)};

        try
        {

        //進行圖片對比
        Object result = client.Match(images);

        }
        catch
        {
            //提示文字框
            MessageBox.Show("未能連線到網路","系統提示",MessageBoxButtons.OK);

            return;
        }
        //獲得到了值轉化為Joson值
        JObject jResult = JObject.Parse(result.ToString());

        try
        {

        //獲取Jason中獲得的值
        double score = double.Parse(jResult["result"][0]["score"].ToString());

        }
        catch
        {
            //提示文字框
            MessageBox.Show("未能識別到人臉","系統提示",MessageBoxButtons.OK);

        }

        //返回結果
        return score;
    }
}

這裡牽涉到關於Jason資料的讀取
Jason資料型別
通過它的KEY來獲得其中某一項的值

//如上面程式碼中寫到的,就是獲得result下面,下標為0,裡面的score的值
jResult["result"][0]["score"];

檢視更多請訪問http://ai.baidu.com/
聯絡方式:Q:1127393090 WeChat:StevenJohn301
如以上教程有錯誤希望各位大神即使指出,謝謝觀看。