C# 30分钟完成百度人脸识别——进阶篇(文末附源码)(下)

简介: C# 30分钟完成百度人脸识别——进阶篇(文末附源码)(下)

人脸识别:


 

注册完后就是识别,识别主要做一个简单的活体检测。识别后将人脸相关信息显示出来。

注意,人脸识别效果可以做出特效,本人才疏学浅,谁会canvas动画的可以私我,有个人脸识别的动画特效需要实现,我做了一个简单的上下扫描动画。

下面就将代码贴出来:

//人脸识别
        public JsonResult Face_Distinguish()
        {
            // 设置APPID/AK/SK
            var API_KEY = "XFPA49myCG7S37XP1DxjLbXF";                   //你的 Api Key
            var SECRET_KEY = "ZvZKigrixMLXNZOLmkrG6iDx9QprlGuT";        //你的 Secret Key
            var client = new Baidu.Aip.Face.Face(API_KEY, SECRET_KEY);
            client.Timeout = 60000;  // 修改超时时间
            var imageType = "BASE64";  //BASE64   URL
            string imgData64 = Request["imgData64"];
            imgData64 = imgData64.Substring(imgData64.IndexOf(",") + 1);      //将‘,’以前的多余字符串删除
            ResultInfo result = new ResultInfo();
            try
            {
                var groupId = "group1";
                var userId = "user1";
                var result323 = client.Detect(imgData64, imageType);
                //活体检测阈值是多少
                //0.05 活体误拒率:万分之一;拒绝率:63.9%
                //0.3 活体误拒率:千分之一;拒绝率:90.3%
                //0.9 活体误拒率:百分之一;拒绝率:97.6%
                //1误拒率: 把真人识别为假人的概率. 阈值越高,安全性越高, 要求也就越高, 对应的误识率就越高
                //2、通过率=1-误拒率
                //所以你thresholds参数返回 和 face_liveness 比较大于推荐值就是活体
                ////活体判断
                var faces = new JArray
                        {
                            new JObject
                            {
                                {"image", imgData64},
                                {"image_type", "BASE64"}
                            }
                        };
                var Living = client.Faceverify(faces);  //活体检测交互返回
                var LivingJson = Newtonsoft.Json.JsonConvert.SerializeObject(Living);
                var LivingObj = Newtonsoft.Json.JsonConvert.DeserializeObject(LivingJson) as JObject;
                if (LivingObj["error_code"].ToString() == "0" && LivingObj["error_msg"].ToString() == "SUCCESS")
                {
                    var Living_result = Newtonsoft.Json.JsonConvert.DeserializeObject(LivingObj["result"].ToString()) as JObject;
                    var Living_list = Living_result["thresholds"];
                    double face_liveness = Convert.ToDouble(Living_result["face_liveness"]);
                    var frr = Newtonsoft.Json.JsonConvert.SerializeObject(Living_list.ToString());
                    var frr_1eObj = Newtonsoft.Json.JsonConvert.DeserializeObject(Living_list.ToString()) as JObject;
                    double frr_1e4= Convert.ToDouble(frr_1eObj["frr_1e-4"]);
                    if (face_liveness < frr_1e4)
                    {
                        result.info = "识别失败:不是活体!";
                        return Json(result, JsonRequestBehavior.AllowGet);
                    }
                }
                //首先查询是否存在人脸
                var result2 = client.Search(imgData64, imageType, groupId);  
                var strJson = Newtonsoft.Json.JsonConvert.SerializeObject(result2);
                var o2 = Newtonsoft.Json.JsonConvert.DeserializeObject(strJson) as JObject;
                //判断是否存在当前人脸,相识度是否大于80
                if (o2["error_code"].ToString() == "0" && o2["error_msg"].ToString() == "SUCCESS")
                {
                    var result_list = Newtonsoft.Json.JsonConvert.DeserializeObject(o2["result"].ToString()) as JObject;
                    var user_list = result_list["user_list"];
                    var Obj = JArray.Parse(user_list.ToString());
                    foreach (var item in Obj)
                    {
                        //80分以上可以判断为同一人,此分值对应万分之一误识率
                        var score = Convert.ToInt32(item["score"]);
                        if (score > 80)
                        {
                            result.info = result2.ToString();
                            result.res = true;
                            result.startcode = 221;
                            return Json(result, JsonRequestBehavior.AllowGet);
                        }
                    }
                }
                else
                {
                    result.info = strJson.ToString();
                    result.res = false;
                    return Json(result, JsonRequestBehavior.AllowGet);
                }
            }
            catch (Exception e)
            {
                result.info = e.Message;
            }
            return Json(result, JsonRequestBehavior.AllowGet);
        }
        //识别成功,查询数据库
        public JsonResult Face_UserInfoList()
        {
            ResultInfo result = new ResultInfo();
            //这里就不进行非空判断了,后期根据实际情况进行优化
            var Guid_Id = Request["Guid_Id"];
            //根据人脸唯一标识判断是否存在数据
            List<Face_UserInfo> strlist = new Face_UserInfoBLL().GetfaceinfoByToken(Guid_Id);
            var strJson = Newtonsoft.Json.JsonConvert.SerializeObject(strlist);
            result.info = strJson;
            result.res = true;
            return Json(result, JsonRequestBehavior.AllowGet);
        }

总结:


 

匆匆忙忙就结束了,其实学起来也简单,大家下载demo对比学习一下,有什么疑问大家讨论讨论。

删除、更新还是一样的操作,去直接拷贝官网的几行代码即可,都是需要face_token作为添加更新删除,这个字段注册的时候已经存到数据库了。

我的百度人脸库一直开启,需要使用的小伙伴们自行在下面代码里面提取api_key和secret_key

又要去开启新项目,大家后面再见。

关注小编不迷路!

 

demo源码下载:

git下载链接:https://gitee.com/xiongze/FaceRecognition.git

 

百度网盘源码下载链接:https://pan.baidu.com/s/1IzJCeF8uTKjZ882BTxI4bw

提取码:p92w

相关文章
|
开发框架 前端开发 JavaScript
C# 6.0+JavaScript云LIS系统源码  云LIS实验室信息管理新型解决方案
云LIS是为区域医疗提供临床实验室信息服务的计算机应用程序,可协助区域内所有临床实验室相互协调并完成日常检验工作,对区域内的检验数据进行集中管理和共享,通过对质量控制的管理,最终实现区域内检验结果互认。其目标是以医疗服务机构为主体,以医疗资源和检验信息共享为目标,集成共性技术及医疗服务关键技术,建立区域协同检验,最大化利用有限的医疗卫生资源。
381 1
|
前端开发 Java C#
java/C#语言开发的医疗信息系统11套源码
java/C#语言开发的医疗信息系统11套源码
449 2
|
Java 数据库 C#
C#winforms实现windows窗体人脸识别
C#winforms实现windows窗体人脸识别
|
存储 SQL 开发框架
c# erp源码(简单进销存)
c# erp源码(简单进销存)
678 1
|
Java Maven 计算机视觉
开发指南045-挂接百度人脸识别
平台集成了很多第三方功能,通过统一的封装模式进行封装,屏蔽了其技术细节
|
存储 Oracle 关系型数据库
PACS源码,C#语言数字医学影像系统成品源码
**数字医学影像系统(RIS/PACS)**采用C#开发,基于C/S架构,配Oracle数据库,具备自主版权,适用于项目实施。系统包含分诊、超声、放射、内镜、病理等工作站,支持基本信息维护、报表查询和系统维护。功能亮点有:WorkList管理、影像采集传输、存储检索、图像处理、多序列浏览、流程控制、报告录入与审核、支持多种影像设备及高级影像处理。RIS与PACS数据库同步,并集成HIS、电子病历等系统接口。全面遵循DICOM3.0标准。
387 1
PACS源码,C#语言数字医学影像系统成品源码
|
开发框架 前端开发 .NET
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
集成于VS 2019,EXT.NET前端和ASP.NET后端,搭配MSSQL 2018数据库。系统覆盖样品管理、数据分析、报表和项目管理等实验室全流程。应用广泛,包括生产质检(如石化、制药)、环保监测、试验研究等领域。随着技术发展,现代LIMS还融合了临床、电子实验室笔记本和SaaS等功能,以满足复杂多样的实验室管理需求。
357 3
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
|
传感器 人工智能 前端开发
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
智慧校园电子班牌,坐落于班级的门口,适合于各类型学校的场景应用,班级学校日常内容更新可由班级自行管理,也可由学校统一管理。让我们一起看看,电子班牌有哪些功能呢?
1183 4
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
|
存储 运维 BI
基于C#-VC-MSSQL开发的全套PACS系统源码 3D PACS系统源码:可实现医学影像获取、存档、观片、处理、打印多项应用
PACS的功能价值在于通过连接不同的影像设备,存储与管理图像,图像的调用与后处理,实现资源共享,降低成本,达到提高工作效率、提升医疗水平的目地;
415 1
基于C#-VC-MSSQL开发的全套PACS系统源码  3D PACS系统源码:可实现医学影像获取、存档、观片、处理、打印多项应用
|
BI 数据处理
一体化的医学实验室信息系统源码,C#LIS系统源码
面向医学实验室的一体化平台提供标本流程管理、报告发布及科室管理支持。它与HIS无缝对接,简化患者信息录入,实现检验结果实时同步。系统自动处理数据、分类样本、计算参考范围,并对异常结果预警。条码管理简化样本追踪,质控管理提升检测准确性。平台还支持数据审核发布、历史结果查询对比、灵活报表打印及统计分析等功能,辅助科室管理和试剂库存控制,加强科室间沟通协作。
410 0
一体化的医学实验室信息系统源码,C#LIS系统源码