使用百度云API进行人脸对比

最近项目要用到人脸与身份证对比功能,先拿百度云的人脸识别测试一下,于是先登录百度智能云:https://login.bce.baidu.com/?account=&redirect=http%3A%2F%2Fconsole.bce.baidu.com%2F%3Ffromai%3D1#/aip/overview
使用百度账号就能登录,下载对应的SDK,因为我用的是C#开发,所以下载C#版SDK。参考官网上示例代码,先获取Access Token:
使用百度云API进行人脸对比_第1张图片
但是引用System.Net.Http包时发现错误,找不到对应的包。网上查了一下,System.Net.Http包是从.NET framework 4.5版本才开始包含的,只得下载个.NET framework 4.5安装。然后在项目属性中修改“目标框架”:
使用百度云API进行人脸对比_第2张图片
可是没有发现刚安装的4.5版本啊,重启电脑试一下,还是木有。原来VS2010最高支持到.NET framework 4.0,想换版本,但是以前程序发布的都是用4.0的,换高版本就比较麻烦。
有个管理.NET包的神器名叫NuGet,下载它进行包管理吧,去到官网https://www.nuget.org/进入Downloads页面:
使用百度云API进行人脸对比_第3张图片
找了半天只有x86版本的没有x64的啊,真是坑爹。想到新版本的VS是集成NuGet的,那么对于VS2010应该也有插件吧,赶紧搜索下,在工具–>扩展管理器中:
使用百度云API进行人脸对比_第4张图片
联机搜索NuGet,搜到几个插件,但安装完都不是:
使用百度云API进行人脸对比_第5张图片
继续往下找,有个“NuGet Package Manager”:
使用百度云API进行人脸对比_第6张图片
点击下载进行安装:
使用百度云API进行人脸对比_第7张图片
安装后需要重启VS2010,重启后在引用处右键就会出现“管理NuGet程序包”:
使用百度云API进行人脸对比_第8张图片
在里面搜索System.Net.Http包:
使用百度云API进行人脸对比_第9张图片
终于找到对应包了,赶紧点击安装吧:
使用百度云API进行人脸对比_第10张图片
安装失败,白高兴了。提示NuGet版本太低了,升级NuGet也不现实了,VS2010只支持到2.8.6版本。哎,VS2010看来已经过时了,难道只能安装新的VS了吗?山重水尽尽疑无路,柳暗花明又一村,无意间发现了“Microsoft HTTP Client Libraries”库,这个应该是System.Net.Http的前身,适用于低版本的VS,赶紧用NuGet搜一下它吧:
使用百度云API进行人脸对比_第11张图片
安装之后会自动为我们添加相应的引用的:
使用百度云API进行人脸对比_第12张图片
并且在项目的目录下会生成一个packages目录,里面有新安装的库文件:
使用百度云API进行人脸对比_第13张图片
这样的话,即使再换一个没安装NuGet的电脑,这个项目也正常可以编译的。编译没问题了,赶紧测试一下吧,访问百度接口:

https://aip.baidubce.com/oauth/2.0/token
结果返回:
{"error_description": "unknown client id", "error": "invalid_client"}

未知的client id,再仔细看看官方说明文档,之前也不知哪位大神告诉我的访问参数用安全认证里面的“Access Key”:
使用百度云API进行人脸对比_第14张图片
实际上人家是创建人脸识别的应用好不:
使用百度云API进行人脸对比_第15张图片
使用应用里面的API Key和Secret Key:
使用百度云API进行人脸对比_第16张图片
把程序中clientId和clientSecret参数改成应用里面对应的值,再次请求,这次获得到正确的access_token:
使用百度云API进行人脸对比_第17张图片
只要把这个access_token保存好了就可以,一般有效期是一个月。下面就能正常使用百度人脸识别的API了,我要用人脸对比接口,按照百度文档使用前进入应用管理里面查看一下API的版本:
使用百度云API进行人脸对比_第18张图片
看一下我这里的权限版本:
使用百度云API进行人脸对比_第19张图片
不错,是v3版本的,访问接口时要注意带上token值(就是上面获取的access_token):

"https://aip.baidubce.com/rest/2.0/face/v3/match?access_token=" + token;

注意百度API要求图片参数是Base64编码的格式,需要把图片文件转换为Base64编码,这里给出我的C#代码:
public static string ImageToBase64(string fileFullName)
{
try
{
Bitmap bmp = new Bitmap(fileFullName);
MemoryStream ms = new MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

	byte[] arr = new byte[ms.Length]; ms.Position = 0;
	ms.Read(arr, 0, (int)ms.Length); ms.Close();
	return Convert.ToBase64String(arr);
}
catch (Exception ex)
{
	return null;
}

}
这样就能正常调用百度API进行人脸对比了,注意成功时返回error为0,而对比结果在result字段下面了,这点和官方文档上有点出入。把这些都记录下面,以便大家调用的时候少走弯路。

你可能感兴趣的:(C#开发)