需要注意的是,以下内容仅限基础调用
人脸比对1:1
功能说明
该功能是两张照片对比,比对两张照片是不是同一个人,至于应用到什么场景,可以参考阿里云的官方文档,我这边以大学生项目来说的话,比如员工打卡,是可以首次先录入一张照片到库里面的,然后打卡的时候,可以拍一张最好的照片,然后跟库里面去比对的,需要注意的是,这个接口不一定有活体检测,所以照片有可能是可以过的,所以,最好用作大学项目来做,实际的企业项目的话,活体检测这些接口肯定是要加的,只有那个接口过了才会到这个接口
1.第一步是需要去阿里云开通人体人脸的,前提是你有阿里云
开通人体人脸
2.开通之后就可以点在线调试,或者去看看官方文档
3.选择c#,通过在线调试,我们可以拿到右边这样一个demo,几乎是你自己稍微改一改就能用的,基本上就只需要改参数,对于小白来说还是非常友好的,这时候,可以在左边这块输入参数,先用可视化的方式去调用一次接口,注意是收费的,需要确保账号内有余额,调通了后,我们copy右侧的demo到我们的项目中
4.在此之前,我们需要准备一个key,如果不知道自己的key,或者没有设置过key,去这里设置一个,需要注意保存好自己的账号,密码,别泄露
5.接下来copy代码,我这个地方key是直接明文了,也是为了方便测试,这种写法有一定可能会泄露key,也可以按照官方文档保存在电脑的系统环境中,这样会更安全一点
csharp
public static AlibabaCloud.SDK.Facebody20191230.Client CreateClient()
{
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
// 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378671.html。
string accessKeyId = "你的accessKeyId";
string accessKeySecret = "你的accessKeySecret ";
AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
{
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
AccessKeyId = accessKeyId,
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
AccessKeySecret = accessKeySecret,
};
// Endpoint 请参考 https://api.aliyun.com/product/facebody
config.Endpoint = "facebody.cn-shanghai.aliyuncs.com";
return new AlibabaCloud.SDK.Facebody20191230.Client(config);
}
csharp
/// <summary>
/// 图片转base64
/// </summary>
/// <param name="imagePath"></param>
/// <returns></returns>
public string ImageOfBase64(string imagePath)
{
try
{
byte[] imageBytes = System.IO.File.ReadAllBytes(imagePath);
string baseA = Convert.ToBase64String(imageBytes);
return baseA;
}
catch (Exception)
{
return "";
}
}
//调用
public static void Main(string[] args)
{
AlibabaCloud.SDK.Facebody20191230.Client client = CreateClient();
//AlibabaCloud.SDK.Facebody20191230.Models.CompareFaceRequest compareFaceRequest = new AlibabaCloud.SDK.Facebody20191230.Models.CompareFaceRequest();
AlibabaCloud.SDK.Facebody20191230.Models.CompareFaceRequest compareFaceRequest = new AlibabaCloud.SDK.Facebody20191230.Models.CompareFaceRequest
{
//颗粒度
QualityScoreThreshold = 98.5f,
//如果有oss或者url可以使用
//ImageURLA = "http://workbench-file-transfer.oss-cn-shanghai.aliyuncs.com/user-files/5af067bc-cf93-4cbc-bc4e-d927904d0ec4-17aa8c15fba36c9aa56a85b7e97e27e7.jpg?OSSAccessKeyId=LTAI5tRvL6vYdjKSfTFZ156m&Expires=1716365052&Signature=8QUlWyhhmrMIb3n6TU20QrSWUAs%3D&response-content-disposition=attachment",
//ImageURLB = "http://workbench-file-transfer.oss-cn-shanghai.aliyuncs.com/user-files/faacaee0-1c9a-46cc-86f3-2d78ec7b1acd-20b74ce7511af03ec3055b9a2bc8aa9c.jpeg?OSSAccessKeyId=LTAI5tRvL6vYdjKSfTFZ156m&Expires=1716365058&Signature=X4Rk04fNS1SXmBPnRU8564JoMos%3D&response-content-disposition=attachment",
//本地图片转base64
ImageDataA = new Program().ImageOfBase64("C:\\Users\\admin\\Desktop\\4.jpg"),
ImageDataB = new Program().ImageOfBase64("C:\\Users\\admin\\Desktop\\2.jpg"),
//ImageDataB = new Program().ImageOfBase64("C:\\Users\\admin\\Desktop\\3.jpg"),
};
AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
try
{
var re = client.CompareFaceWithOptions(compareFaceRequest, runtime);
if (re != null)
{
if (re.Body.Data.Confidence > 61)
{
Console.WriteLine("是同一个人");
}
}
}
catch (TeaException error)
{
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
// 错误 message
Console.WriteLine(error.Message);
// 诊断地址
//Console.WriteLine(error.Data["Recommend"]);
//AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
}
catch (Exception error)
{
//TeaException error = new TeaException(new Dictionary<string, object>
//{
// { "message", _error.Message }
//});
此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
错误 message
//Console.WriteLine(error.Message);
诊断地址
//Console.WriteLine(error.Data["Recommend"]);
//AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
Console.WriteLine(error.Message);
}
}
6.这时候代码会报错,所以需要安装并添加引用
阿里云相关SDK传送门
为了防止官网更新,所以建议还是去官网下载最新的
csharp
NuGet\Install-Package AlibabaCloud.SDK.Facebody20191230 -Version 4.1.2
7.安装引用之后,key也写好后,我们就可以跑代码了,在此之前,你需要准备2张图片,如果你的照片是url格式的,就使用ImageURLA和ImageURLB字段,如果你的照片是本地的,就可以使用ImageDataA和ImageDataB他们对应的就是本地图片转base64的图片
8.根据返回来的Confidence,我们就可以判断当前图片是不是同一个人,但是这个值会跟你传参的颗粒度也有关系,所以可以根据你的项目对人脸辨识度的程度来决定给个多少的值比较合适,至于返回参数,可以详见参考文档