最近项目要用到人脸与身份证对比功能,先拿百度云的人脸识别测试一下,于是先登录百度智能云: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:

但是引用System.Net.Http包时发现错误,找不到对应的包。网上查了一下,System.Net.Http包是从.NET framework 4.5版本才开始包含的,只得下载个.NET framework 4.5安装。然后在项目属性中修改“目标框架”:

可是没有发现刚安装的4.5版本啊,重启电脑试一下,还是木有。原来VS2010最高支持到.NET framework 4.0,想换版本,但是以前程序发布的都是用4.0的,换高版本就比较麻烦。
有个管理.NET包的神器名叫NuGet,下载它进行包管理吧,去到官网https://www.nuget.org/进入Downloads页面:

找了半天只有x86版本的没有x64的啊,真是坑爹。想到新版本的VS是集成NuGet的,那么对于VS2010应该也有插件吧,赶紧搜索下,在工具–>扩展管理器中:

联机搜索NuGet,搜到几个插件,但安装完都不是:

继续往下找,有个“NuGet Package Manager”:

点击下载进行安装:

安装后需要重启VS2010,重启后在引用处右键就会出现“管理NuGet程序包”:

在里面搜索System.Net.Http包:

终于找到对应包了,赶紧点击安装吧:

安装失败,白高兴了。提示NuGet版本太低了,升级NuGet也不现实了,VS2010只支持到2.8.6版本。哎,VS2010看来已经过时了,难道只能安装新的VS了吗?山重水尽尽疑无路,柳暗花明又一村,无意间发现了“Microsoft HTTP Client Libraries”库,这个应该是System.Net.Http的前身,适用于低版本的VS,赶紧用NuGet搜一下它吧:

安装之后会自动为我们添加相应的引用的:

并且在项目的目录下会生成一个packages目录,里面有新安装的库文件:

这样的话,即使再换一个没安装NuGet的电脑,这个项目也正常可以编译的。编译没问题了,赶紧测试一下吧,访问百度接口:
https://aip.baidubce.com/oauth/2.0/token
结果返回:
{"error_description": "unknown client id", "error": "invalid_client"}
未知的client id,再仔细看看官方说明文档,之前也不知哪位大神告诉我的访问参数用安全认证里面的“Access Key”:

实际上人家是创建人脸识别的应用好不:

使用应用里面的API Key和Secret Key:

把程序中clientId和clientSecret参数改成应用里面对应的值,再次请求,这次获得到正确的access_token:

只要把这个access_token保存好了就可以,一般有效期是一个月。下面就能正常使用百度人脸识别的API了,我要用人脸对比接口,按照百度文档使用前进入应用管理里面查看一下API的版本:

看一下我这里的权限版本:

不错,是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字段下面了,这点和官方文档上有点出入。把这些都记录下面,以便大家调用的时候少走弯路。
博主在项目中使用百度云人脸识别API,用C#开发。过程中遇到诸多问题,如引用System.Net.Http包报错,VS2010版本不支持,NuGet版本低等。最终找到替代库,获取到正确的access_token,还说明了使用人脸对比接口的注意事项,如图片参数需Base64编码等。
1488





