.NET调用阿里云人脸识别1:1简易流程保姆级教学

需要注意的是,以下内容仅限基础调用

人脸比对1:1
功能说明

该功能是两张照片对比,比对两张照片是不是同一个人,至于应用到什么场景,可以参考阿里云的官方文档,我这边以大学生项目来说的话,比如员工打卡,是可以首次先录入一张照片到库里面的,然后打卡的时候,可以拍一张最好的照片,然后跟库里面去比对的,需要注意的是,这个接口不一定有活体检测,所以照片有可能是可以过的,所以,最好用作大学项目来做,实际的企业项目的话,活体检测这些接口肯定是要加的,只有那个接口过了才会到这个接口

1.第一步是需要去阿里云开通人体人脸的,前提是你有阿里云
开通人体人脸

2.开通之后就可以点在线调试,或者去看看官方文档

人脸识别控制台传送门

阿里云官方文档传送门

人脸识别1:1在线调试

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,我们就可以判断当前图片是不是同一个人,但是这个值会跟你传参的颗粒度也有关系,所以可以根据你的项目对人脸辨识度的程度来决定给个多少的值比较合适,至于返回参数,可以详见参考文档

相关推荐
数据的世界015 小时前
.NET开发人员学习书籍推荐
学习·.net
木子Linux6 小时前
【Linux打怪升级记 | 问题01】安装Linux系统忘记设置时区怎么办?3个方法教你回到东八区
linux·运维·服务器·centos·云计算
paixiaoxin7 小时前
CV-OCR经典论文解读|An Empirical Study of Scaling Law for OCR/OCR 缩放定律的实证研究
人工智能·深度学习·机器学习·生成对抗网络·计算机视觉·ocr·.net
19004315 小时前
.NET重点
.net
m0_6632340115 小时前
在 .NET 5.0 运行 .NET 8.0 教程:使用 ASP.NET Core 创建 Web API
前端·asp.net·.net
CESS_Cloud1 天前
CESS 出席华盛顿区块链政策峰会:参与国家安全与数据隐私保护专题讨论
安全·阿里云·web3·去中心化·区块链
小码编匠1 天前
.NET 下 RabbitMQ 队列、死信队列、延时队列及小应用
后端·c#·.net
HaoHao_0101 天前
云消息队列 Kafka 版
分布式·阿里云·kafka·云计算·云服务器
真想骂*2 天前
vmime.net_4.dll详解:它是什么,有何用途?
.net