Unity之人脸识别调研 基于百度AISDK的人脸识别功能的封装

版权声明:未经同意,请勿转载 https://blog.csdn.net/qq_25542475/article/details/86699123

本文主要介绍Unity3d开发基于百度AISDK的人脸识别功能,主要是对比两张人脸的相似度。

1.准备工作-百度AISDK

(1)首先登陆百度AI,然后在控制台选择人脸识别,如图一图一

(2)进入后,我们创建一个新应用,应用名称和应用描述随意填写,如图二,图三

图二
图三

(3)在应用列表界面,我们可以看到刚刚创建的应用名称,接入过SDK的小伙伴都知道,这里的AppID,APIKey,SecretKey需要我们记住,这些在后续的开发中都需要用到,如图四

图四

(4)返回百度AI首页,在开发资源中下载人脸识别对应的C#版本SDK,如图五

图五
下载文件解压缩后,在net35文件夹内AipSdk.dll以及Newtonsoft.Json.dll需要在接下来导入Unity工程项目中。

2.项目创建

(1)新建Unity3d工程,先将Api Compatibility Level设置为.Net2.0,如图六

图六

(2)在Assets下新建文件夹Plugins文件夹,我们将下载下来的AipSdk.dll以及Newtonsoft.Json.dll复制到该文件夹下,新建场景FaceDetect,新建C#脚本FaceDetect(调用),Baidu_FaceDetect(封装百度API功能)

如图七
图七

(3)打开官方文档,查看教程,教程位置如图八,图九

图八
图九

(4)相关功能的封装

Baidu_FaceDetect.cs包含人脸注册,人脸更新,人脸删除,人脸搜索,人脸检测,用户信息查询,用户人脸列表查询,用户列表查询,复制用户,删除用户,创建用户组,删除用户组,组列表查询,错误反馈功能。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Baidu.Aip.Face;
using Newtonsoft.Json.Linq;

namespace YCX_Tool.Baidu_FaceDetect
{
    /// <summary>
    /// 百度人脸识别
    /// </summary>
    public class Baidu_FaceDetect
    {
        /// <summary>
        /// api_key
        /// </summary>
        private string api_key;
        public string Api
        {
            get { return api_key; }
            private set { api_key = value; }
        }
        /// <summary>
        /// secret_key
        /// </summary>
       private  string secret_key;
       public string Secret
       {
            get { return secret_key; }
            private set { secret_key = value; }
        }
        /// <summary>
        /// 错误编号
        /// </summary>
        private int error_code;
        /// <summary>
        /// 错误消息
        /// </summary>
        private string error_msg;
        /// <summary>
        /// 单例
        /// </summary>
        private static Baidu_FaceDetect Instance;
        /// <summary>
        /// face_client
        /// </summary>
        private Face face;
        public static Baidu_FaceDetect Get_Instance
        {
            get {
                if (Instance == null)
                {
                    Instance = new Baidu_FaceDetect();
                }
                return Instance;
            }
        }
        /// <summary>
        /// 初始化
        /// </summary>
        /// <param name="api"></param>
        /// <param name="secret"></param>
        public  void Init(string api, string secret)
        {
            api_key = api;
            secret_key = secret;
            face = new Face(api_key, secret_key);
            face.Timeout=60000; 
        }
      /// <summary>
      /// 人脸注册
      /// </summary>
      /// <param name="image">图片</param>
      /// <param name="imageType">图片类型</param>
      /// <param name="group_Id">用户组id</param>
      /// <param name="user_Id">用户id</param>
      /// <returns>注册结果(face_token 图片的唯一标识)(location 人脸在图片的位置)(left 离左边界距离)(top 离上边界距离)(width 人脸区域宽度)(height 人脸区域高度)(rotation 人脸相对竖直方向的旋转角)</returns>
        public JObject Face_Register(string image,string imageType,string group_Id,string user_Id)
        {
           JObject jObject = new JObject();
            if (face == null)
            {
                Debug.LogError("请初始化api和secret");
                return jObject;
            }
            else
            {
                //user_info       用户资料 
                //quality_control 图片质量控制 NONE: 不进行控制 LOW:较低的质量要求 NORMAL: 一般的质量要求 HIGH: 较高的质量要求 默认 NONE
                //liveness_control活体检测控制 NONE: 不进行控制 LOW:较低的活体要求(高通过率 低攻击拒绝率) NORMAL: 一般的活体要求(平衡的攻击拒绝率, 通过率) HIGH: 较高的活体要求(高攻击拒绝率 低通过率) 默认NONE
                var options = new Dictionary<string, object> { {"user_info", "MeiNv"},{"quality_control", "NORMAL"},{"liveness_control", "LOW"} };
                //避免网络异常造成错误
                try
                {
                  jObject=face.UserAdd(image, imageType, group_Id, user_Id, options);
                  error_code = int.Parse(jObject["error_code"].ToString());
                  error_msg = jObject["error_msg"].ToString();
                    Debug.Log("注册成功" + jObject);
                    return jObject;
                }
                catch (System.Exception e)
                {
                    Debug.LogError("人脸注册失败" + e.Message);
                    return jObject;
                }
                
            }
        }
        /// <summary>
        /// 人脸更新
        /// </summary>
        public JObject Face_Update(string image, string imageType, string group_Id, string user_Id)
        {
            JObject jObject = new JObject();
            if (face == null)
            {
                Debug.LogError("请初始化api和secret");
                return jObject;
            }
            else
            {
                //user_info       用户资料 
                //quality_control 图片质量控制 NONE: 不进行控制 LOW:较低的质量要求 NORMAL: 一般的质量要求 HIGH: 较高的质量要求 默认 NONE
                //liveness_control活体检测控制 NONE: 不进行控制 LOW:较低的活体要求(高通过率 低攻击拒绝率) NORMAL: 一般的活体要求(平衡的攻击拒绝率, 通过率) HIGH: 较高的活体要求(高攻击拒绝率 低通过率) 默认NONE
                var options = new Dictionary<string, object> { { "user_info", "MeiNv" }, { "quality_control", "NORMAL" }, { "liveness_control", "LOW" }};
                //避免网络异常造成错误
                try
                {
                    jObject = face.UserUpdate(image, imageType, group_Id, user_Id, options);
                    error_code = int.Parse(jObject["error_code"].ToString());
                    error_msg = jObject["error_msg"].ToString();
                    Debug.Log("更新成功" + jObject);
                    return jObject;
                }
                catch (System.Exception e)
                {
                    Debug.LogError("人脸更新失败" + e.Message);
                    return jObject;
                }

            }

        }
        /// <summary>
        /// 人脸删除(删除指定)
        /// </summary>
        public JObject Face_Delet(string userid, string groupid, string facetoken)
        {
            JObject jObject = new JObject();
            if (face == null)
            {
                Debug.LogError("请初始化api和secret");
                return jObject;
            }
            else
            {
                //避免网络异常造成错误
                try
                {
                    jObject = face.FaceDelete(userid,groupid, facetoken);
                    error_code = int.Parse(jObject["error_code"].ToString());
                    error_msg = jObject["error_msg"].ToString();
                    Debug.Log("删除成功" + jObject);
                    return jObject;
                }
                catch (System.Exception e)
                {
                    Debug.LogError("人脸更新失败" + e.Message);
                    return jObject;
                }

            }
        }
       /// <summary>
       /// 人脸搜索
       /// </summary>
       /// <param name="image">图片</param>
       /// <param name="imageType">图片类型</param>
       /// <param name="groupIdList">用户组id</param>
       /// <returns></returns>
        public JObject Face_Search(string image,string imageType,string groupIdList)
        {
            JObject jObject = new JObject();
            if (face == null)
            {
                Debug.LogError("请初始化api和secret");
                return jObject;
            }
            else
            {
                try
                {
                    jObject= face.Search(image, imageType, groupIdList);
                    error_code = int.Parse(jObject["error_code"].ToString());
                    error_msg = jObject["error_msg"].ToString();
                    Debug.Log("搜索成功" + jObject);
                    return jObject;
                }
                catch (System.Exception e)
                {
                    Debug.Log("人脸检索失败" + e.Message);
                    return jObject;
                }
            }
        }
        /// <summary>
        /// 人脸检测
        /// </summary>
        public void Face_Check()
        {
           
        }
        /// <summary>
        /// 用户查询
        /// </summary>
        /// <param name="userid"></param>
        /// <param name="groupid"></param>
        /// <returns></returns>
        public JObject User_Search(string userid, string groupid)
        {
            JObject jObject = new JObject();
            if (face == null)
            {
                Debug.LogError("请初始化api和secret");
                return jObject;
            }
            else
            {
                try
                {
                    jObject = face.UserGet(userid,groupid);
                    error_code = int.Parse(jObject["error_code"].ToString());
                    error_msg = jObject["error_msg"].ToString();
                    Debug.Log("查询成功" + jObject);
                    return jObject;
                }
                catch (System.Exception e)
                {
                    Debug.Log("用户查询失败" + e.Message);
                    return jObject;
                }
            }
        }
        /// <summary>
        /// 用户人脸列表查询
        /// </summary>
        /// <param name="userid"></param>
        /// <param name="groupid"></param>
        /// <returns></returns>
        public JObject User_Faces_Search(string userid, string groupid)
        {
            JObject jObject = new JObject();
            if (face == null)
            {
                Debug.LogError("请初始化api和secret");
                return jObject;
            }
            else
            {
                try
                {
                    jObject = face.FaceGetlist(userid, groupid);
                    error_code = int.Parse(jObject["error_code"].ToString());
                    error_msg = jObject["error_msg"].ToString();
                    Debug.Log("用户人脸查询成功" + jObject);
                    return jObject;
                }
                catch (System.Exception e)
                {
                    Debug.Log("用户查询失败" + e.Message);
                    return jObject;
                }
            }
        }

        //获取错误代号
        public int Error_Code()
        {
            return error_code;
        }
        /// <summary>
        /// 获取错误描述
        /// </summary>
        /// <returns></returns>
        public string Error_Msg()
        {
            return error_msg;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_25542475/article/details/86699123