zoukankan      html  css  js  c++  java
  • 日常API之C#百度人脸识别

    最近看到一只我家徒儿发来的链接,原来是一堆百度AI的SDK,于是一时兴起就做了一只人脸识别,喵喵喵(●'◡'●)

    一、准备工作

    首先,当然是下载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/list
    2 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

    喵,这次的教程到这里就结束啦,期待下一期吧!

  • 相关阅读:
    How to install VXDIAG Honda, Toyota and JLR SDD software
    16% off MPPS V16 ECU tuning tool for EDC15 EDC16 EDC17
    Cummins INSITE locked and ask for verification code
    How to use BMW Multi Tool 7.3 to replace lost key for BMW X1
    Bleed Brake Master Cylinder with Intelligent Tester IT2
    Porsche Piwis Tester II “No VCI has been detected”,how to do?
    Creader VIII VS. Creader VII+
    How to solve GM MDI cannot complete the installation
    汽车OBD2诊断程序开发 (原文转载,思路很清晰!)
    汽车节温器单片机开发思路
  • 原文地址:https://www.cnblogs.com/TwilightLemon/p/7345243.html
Copyright © 2011-2022 走看看