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

相关推荐
翼龙云_cloud2 小时前
阿里云国际版代理商:OSS自定义域名绑定与HTTPS配置排障教程
数据库·阿里云·https·云计算
sbjdhjd3 小时前
CTF 技术复盘:从参数类型绕过到正则回溯 | Merry Christmas PHP CTF(gift.php & gift_plus.php)
安全·网络安全·云计算·php·ctf·红队·网络攻防
皮皮虾❀3 小时前
阿里云代理商采购+超额返点一体化实战:从“单次采购无优惠“到“年度合作解锁最高35%专属返点“的成本优化方案
阿里云·云计算
宝桥南山14 小时前
Blazor Web Assembly - 体验一下Authentication State从Server共享给Client
microsoft·微软·c#·asp.net·.net·.netcore
SaaS_Product1 天前
企业云盘收费标准主要取决于什么?企业云盘价格到底怎么算?
大数据·云计算·saas·onedrive
rockey6271 天前
C#脚本引擎之AScript与DynamicExpresso对比
c#·.net·script·动态脚本
2401_861678621 天前
阿里云远程连接
阿里云·云计算
迪康coolmu1 天前
企业文件外发防泄漏实践:从通道封堵到三层全链路管控
大数据·运维·网络·人工智能·安全·阿里云
皮皮虾❀2 天前
阿里云上云迁移服务商选型+官方资质核验+ACE认证团队一体化实战:从“买到假代理”到“官网可查认证服务商承接迁移项目
阿里云·云计算
怪奇云呼军2 天前
知识库也会注入指令?闪电智能VoiceAgent 如何防住 Prompt Injection
人工智能·python·算法·云计算·音视频