百度AI—人脸在线比对

首先访问百度AI网站:https://cloud.baidu.com/,按照下图的指示点开到应用管理的页面。 

 

 

 

 

穿件完成之后到管理中可以查看到对应的

 

添加工具类:

using System;
using System.IO;

namespace FaceCompare_Console
{
    class FileUtils
    {
        /// <summary>
        /// 返回路径所指文件的base64编码
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public static string getFileBase64(string path)
        {
            if (!File.Exists(path))
                return "";

            FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
            byte[] buffer = new byte[fs.Length];
            fs.Read(buffer, 0, buffer.Length);
            fs.Close();
            return Convert.ToBase64String(buffer);
        }
    }
}

添加Token类:(注意:获取的Token30天才会更新一次,因此最好不要每次都获取,而是应该获取一次存储在本地,30天后再更新)

using System;
using System.Collections.Generic;
using System.Net.Http;

namespace FaceCompare_Console
{
    public static class AccessToken
    {
        // 调用getAccessToken()获取的 access_token建议根据expires_in 时间 设置缓存
        // 返回token示例
        public static String TOKEN = "24.4c28a8feedb8a2c71fa552522284641f.2592000.1546578079.282335-15054444";

        // 百度云中开通对应服务应用的 API Key 建议开通应用的时候多选服务
        private static String clientId = "*********************";
        // 百度云中开通对应服务应用的 Secret Key
        private static String clientSecret = "**********************";

        /// <summary>
        /// 获取Token
        /// </summary>
        /// <returns></returns>
        public static String getAccessToken()
        {
            String authHost = "https://aip.baidubce.com/oauth/2.0/token";
            HttpClient client = new HttpClient();
            List<KeyValuePair<String, String>> paraList = new List<KeyValuePair<string, string>>();
            paraList.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));
            paraList.Add(new KeyValuePair<string, string>("client_id", clientId));
            paraList.Add(new KeyValuePair<string, string>("client_secret", clientSecret));

            HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result;
            String result = response.Content.ReadAsStringAsync().Result;
            LitJson.JsonData jd = LitJson.JsonMapper.ToObject(result);
            return jd["access_token"].ToString();
        }
    }
}

接下来是面部比对的代码:

using System;
using System.IO;
using System.Net;
using System.Text;

namespace FaceCompare_Console
{
    class FaceMatch
    {
        /// <summary>
        /// 人脸比对
        /// </summary>
        /// <param name="token">token</param>
        /// <param name="img1">图像1文件路径</param>
        /// <param name="img2">图像2文件路径</param>
        /// <returns>json格式</returns>
        public static string match(string token, string img1, string img2)
        {
            string host = "https://aip.baidubce.com/rest/2.0/face/v3/match?access_token=" + token;
            Encoding encoding = Encoding.Default;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
            request.Method = "post";
            request.KeepAlive = true;
            String str = "[{\"image\":\"" + FileUtils.getFileBase64(img1) + "\",\"image_type\":\"BASE64\",\"face_type\":\"LIVE\",\"quality_control\":\"LOW\",\"liveness_control\":\"NONE\"},{\"image\":\"" + FileUtils.getFileBase64(img2) + "\",\"image_type\":\"BASE64\",\"face_type\":\"LIVE\",\"quality_control\":\"LOW\",\"liveness_control\":\"NONE\"}]";
            byte[] buffer = encoding.GetBytes(str);
            request.ContentLength = buffer.Length;
            request.GetRequestStream().Write(buffer, 0, buffer.Length);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);
            string result = reader.ReadToEnd();
            Console.WriteLine("人脸对比:");
            Console.WriteLine(result);
            return result;
        }
    }
}

最后是主程序中调用比对程序进行比对:

using System;

namespace FaceCompare_Console
{
    class Program
    {
        static void Main(string[] args)
        {
            AccessToken.getAccessToken();
            FaceMatch.match(AccessToken.TOKEN, @"D:\Compare\web.jpg", @"D:\Compare\web1.jpg");
            Console.ReadKey();
        }
    }
}

输出的结果如下:

score 是比对的结果分值,满分100,根据比对的要求判断分值多少属于比对程序即可。

 

更加详细的参数说明可以访问官网查看:https://ai.baidu.com/docs#/Face-Match-V3/top

 

 补充:代码中用到Http.Net这些类可以去Nuget管理中在线查找并下载:

对返回结果的json格式需要解析的话也可以在Nuget中搜索Newtonsoft或者Litjson进行解析!

 

转载于:https://www.cnblogs.com/mr-yoatl/p/10075706.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MICROSOFT 基础类库: 人脸相似度检测MFC 项目概述 =============================================================================== 应用程序向导已为您创建了这个 人脸相似度检测MFC 应用程序。此应用程序不仅演示 Microsoft 基础类的基本使用方法,还可作为您编写应用程序的起点。 本文件概要介绍组成 人脸相似度检测MFC 应用程序的每个文件的内容。 人脸相似度检测MFC.vcproj 这是使用应用程序向导生成的 VC++ 项目的主项目文件。 它包含生成该文件的 Visual C++ 的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。 人脸相似度检测MFC.h 这是应用程序的主要头文件。它包括其他项目特定的头文件(包括 Resource.h),并声明 C人脸相似度检测MFCApp 应用程序类。 人脸相似度检测MFC.cpp 这是包含应用程序类 C人脸相似度检测MFCApp 的主要应用程序源文件。 人脸相似度检测MFC.rc 这是程序使用的所有 Microsoft Windows 资源的列表。它包括 RES 子目录中存储的图标、位图和光标。此文件可以直接在 Microsoft Visual C++ 中进行编辑。项目资源位于 2052 中。 res\人脸相似度检测MFC.ico 这是用作应用程序图标的图标文件。此图标包括在主要资源文件 人脸相似度检测MFC.rc 中。 res\MFC.rc2 此文件包含不在 Microsoft Visual C++ 中进行编辑的资源。您应该将不可由资源编辑器编辑的所有资源放在此文件中。 ///////////////////////////////////////////////////////////////////////////// 应用程序向导创建一个对话框类: 人脸相似度检测MFCDlg.h,人脸相似度检测MFCDlg.cpp - 对话框 这些文件包含 C人脸相似度检测MFCDlg 类。该类定义应用程序主对话框的行为。该对话框的模板位于 人脸相似度检测MFC.rc 中,该文件可以在 Microsoft Visual C++ 中进行编辑。 ///////////////////////////////////////////////////////////////////////////// 其他功能: ActiveX 控件 应用程序包括对使用 ActiveX 控件的支持。 ///////////////////////////////////////////////////////////////////////////// 其他标准文件: StdAfx.h,StdAfx.cpp 这些文件用于生成名为 人脸相似度检测MFC.pch 的预编译头 (PCH) 文件和名为 StdAfx.obj 的预编译类型文件。 Resource.h 这是标准头文件,它定义新的资源 ID。 Microsoft Visual C++ 读取并更新此文件。 人脸相似度检测MFC.manifest 应用程序清单文件供 Windows XP 用来描述应用程序 对特定版本并行程序集的依赖性。加载程序使用此 信息从程序集缓存加载适当的程序集或 从应用程序加载私有信息。应用程序清单可能为了重新分发而作为 与应用程序可执行文件安装在相同文件夹中的外部 .manifest 文件包括, 也可能以资源的形式包括在该可执行文件中。 ///////////////////////////////////////////////////////////////////////////// 其他注释: 应用程序向导使用“TODO:”指示应添加或自定义的源代码部分。 如果应用程序在共享的 DLL 中使用 MFC,则需要重新发布这些 MFC DLL;如果应用程序所用的语言与操作系统的当前区域设置不同,则还需要重新发布对应的本地化资源 MFC90XXX.DLL。有关这两个主题的更多信息,请参见 MSDN 文档中有关 Redistributing Visual C++ applications (重新发布 Visual C++ 应用程序)的章节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值