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

本文主要介绍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
{/// /// 百度人脸识别/// public class Baidu_FaceDetect{/// /// api_key/// private string api_key;public string Api{get { return api_key; }private set { api_key = value; }}/// /// secret_key/// private  string secret_key;public string Secret{get { return secret_key; }private set { secret_key = value; }}/// /// 错误编号/// private int error_code;/// /// 错误消息/// private string error_msg;/// /// 单例/// private static Baidu_FaceDetect Instance;/// /// face_client/// private Face face;public static Baidu_FaceDetect Get_Instance{get {if (Instance == null){Instance = new Baidu_FaceDetect();}return Instance;}}/// /// 初始化/// /// /// public  void Init(string api, string secret){api_key = api;secret_key = secret;face = new Face(api_key, secret_key);face.Timeout=60000; }/// /// 人脸注册/// /// 图片/// 图片类型/// 用户组id/// 用户id/// 注册结果(face_token 图片的唯一标识)(location 人脸在图片的位置)(left 离左边界距离)(top 离上边界距离)(width 人脸区域宽度)(height 人脸区域高度)(rotation 人脸相对竖直方向的旋转角)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: 较高的活体要求(高攻击拒绝率 低通过率) 默认NONEvar options = new Dictionary { {"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;}}}/// /// 人脸更新/// 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: 较高的活体要求(高攻击拒绝率 低通过率) 默认NONEvar options = new Dictionary { { "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;}}}/// /// 人脸删除(删除指定)/// 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;}}}/// /// 人脸搜索/// /// 图片/// 图片类型/// 用户组id/// 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;}}}/// /// 人脸检测/// public void Face_Check(){}/// /// 用户查询/// /// /// /// 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;}}}/// /// 用户人脸列表查询/// /// /// /// 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;}/// /// 获取错误描述/// /// public string Error_Msg(){return error_msg;}}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部