Exemplo n.º 1
0
        ///<summary>
        ///修改:
        ///</summary>
        /// <param name="model">要修改的model</param>
        /// <returns>受影响的行数</returns>
        public Result <int> UpdateFaceOperateLog(EPM_FaceOperateLog model)
        {
            Result <int> result = new Result <int>();

            try
            {
                model = SetCurrentUser(model);
                var rows = DataOperateBusiness <EPM_FaceOperateLog> .Get().Update(model);

                result.Data = rows;
                result.Flag = EResultFlag.Success;
                WriteLog(AdminModule.AIUserFace.GetText(), SystemRight.Modify.GetText(), "修改: " + model.Id);
            }
            catch (Exception ex)
            {
                result.Data      = -1;
                result.Flag      = EResultFlag.Failure;
                result.Exception = new ExceptionEx(ex, "UpdateFaceOperateLog");
            }
            return(result);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 人脸注册
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="image"></param>
        /// <param name="source"></param>
        /// <returns></returns>
        public Result <int> AddAIUserFaceInfo(long userId, string image, string source)
        {
            Result <int> resultObj = new Result <int>();

            resultObj.Data = -1;
            BasicDataContext    basedb = new BasicDataContext();
            BusinessDataContext busdb  = new BusinessDataContext();

            try
            {
                var    imageType = "BASE64";
                var    groupId   = "group1";
                string control   = "LOW";
                image = image.Substring(image.IndexOf(",") + 1);      //将‘,’以前的多余字符串删除
                // 如果有可选参数
                var options = new Dictionary <string, object> {
                    { "quality_control", control },
                    { "liveness_control", control }
                };
                Face    client = GetFacaClient();
                JObject result = new JObject();

                //人脸管理
                EPM_AIUserFace userFaceAI = new EPM_AIUserFace();
                //人脸日志表
                EPM_FaceOperateLog faceLog = new EPM_FaceOperateLog();
                //查询用户详情
                var userResult = DataOperateBasic <Base_User> .Get(basedb).GetModel(userId);

                //查询该用户是否已经注册的人脸信息
                userFaceAI = DataOperateBusiness <EPM_AIUserFace> .Get(busdb).GetList(t => t.UserId == userId).FirstOrDefault();

                //已存在人脸更新现有数据
                //是否已经存在人脸
                bool isExitsUserFace = false;
                //是否添加人脸
                bool isAddFace = false;
                if (userFaceAI != null && userFaceAI.IsSuccess)
                {
                    faceLog.APIType = FaceOperate.Update.ToString();
                    isExitsUserFace = true;
                }
                else  //不存在添加新数据
                {
                    isAddFace       = true;
                    faceLog.APIType = FaceOperate.Add.ToString();
                    if (userFaceAI == null)
                    {
                        userFaceAI      = new EPM_AIUserFace();
                        isExitsUserFace = false;
                    }
                    else
                    {
                        isExitsUserFace = true;
                    }
                    userFaceAI.IsSuccess       = true;
                    userFaceAI.UserId          = userId;
                    userFaceAI.UserName        = userResult.UserName;
                    userFaceAI.UserPhone       = userResult.Phone;
                    userFaceAI.ImageBase64     = "data:image/jpeg;base64," + image;
                    userFaceAI.ImageType       = imageType;
                    userFaceAI.GroupId         = groupId;
                    userFaceAI.LivenessControl = control;
                    userFaceAI.QualityControl  = control;
                    userFaceAI.Source          = source;
                }
                //日志
                var requestJson = new
                {
                    imageType = imageType,
                    groupId   = groupId,
                    control   = control,
                    userId    = userId,
                    options   = new
                    {
                        quality_control  = control,
                        liveness_control = control
                    }
                };
                faceLog.ModelId     = userFaceAI.Id;
                faceLog.RequestJson = requestJson.ToString();
                faceLog             = SetCurrentUser(faceLog);
                try
                {
                    if (isAddFace)
                    {
                        result = client.UserAdd(image, imageType, groupId, userId.ToString(), options);
                    }
                    else
                    {
                        result = client.UserUpdate(image, imageType, groupId, userId.ToString(), options);
                    }

                    userFaceAI.LogId = result["log_id"].ToString();

                    if (result["error_code"].ToString() == "0" && result["error_msg"].ToString() == "SUCCESS")
                    {
                        var result_list = Newtonsoft.Json.JsonConvert.DeserializeObject(result["result"].ToString()) as JObject;

                        var result_location = Newtonsoft.Json.JsonConvert.DeserializeObject(result_list["location"].ToString()) as JObject;

                        userFaceAI.FaceToken = result_list["face_token"].ToString();
                        userFaceAI.Left      = Convert.ToDecimal(result_location["left"]);
                        userFaceAI.Top       = Convert.ToDecimal(result_location["top"]);
                        userFaceAI.Width     = Convert.ToDecimal(result_location["width"]);
                        userFaceAI.Height    = Convert.ToDecimal(result_location["height"]);
                        userFaceAI.Rotation  = result_location["rotation"].ToString();
                        userFaceAI.Location  = result_list["location"].ToString();
                        userFaceAI.IsSuccess = true;
                        userFaceAI           = SetCurrentUser(userFaceAI);

                        faceLog.IsSuccess = true;

                        resultObj.Data = 1;
                    }
                    else
                    {
                        faceLog.IsSuccess = false;

                        userFaceAI.IsSuccess = false;
                    }
                }
                catch (Exception)
                {
                    faceLog.IsSuccess    = false;
                    userFaceAI.IsSuccess = false;
                }
                faceLog.ResponseJson = result.ToString();
                if (isExitsUserFace)
                {
                    DataOperateBusiness <EPM_AIUserFace> .Get(busdb).Update(userFaceAI);
                }
                else
                {
                    DataOperateBusiness <EPM_AIUserFace> .Get(busdb).Add(userFaceAI);
                }
                DataOperateBusiness <EPM_FaceOperateLog> .Get(busdb).Add(faceLog);

                resultObj.Flag = EResultFlag.Success;
            }
            catch (Exception ex)
            {
                resultObj.Data      = -1;
                resultObj.Flag      = EResultFlag.Failure;
                resultObj.Exception = new ExceptionEx(ex, "AddAIUserFaceInfo");
            }
            finally
            {
                if (basedb.Database.Connection.State != ConnectionState.Closed)
                {
                    basedb.Database.Connection.Close();
                    basedb.Database.Connection.Dispose();
                }
                if (busdb.Database.Connection.State != ConnectionState.Closed)
                {
                    busdb.Database.Connection.Close();
                    busdb.Database.Connection.Dispose();
                }
            }

            return(resultObj);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 人脸搜索
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public Result <int> SearchUserFace(SignFaceAI model)
        {
            BasicDataContext    basedb    = new BasicDataContext();
            BusinessDataContext busdb     = new BusinessDataContext();
            Result <int>        resultObj = new Result <int>();

            resultObj.Data = -1;
            try
            {
                //查询用户是否注册人脸信息
                var userFaceList = DataOperateBusiness <EPM_AIUserFace> .Get(busdb).GetList(t => t.UserId == model.UserId);

                if (!userFaceList.Any())
                {
                    throw new Exception("您还没有注册人脸识别信息!");
                }
                else
                {
                    var    imageType   = "BASE64";
                    var    groupIdList = "group1";
                    string control     = "LOW";
                    model.Image = model.Image.Substring(model.Image.IndexOf(",") + 1);      //将‘,’以前的多余字符串删除
                    var options = new Dictionary <string, object> {
                        { "quality_control", control },
                        { "liveness_control", control },
                        { "user_id", model.UserId.ToString() }
                    };
                    //签到表
                    Epm_SignInformation modelSign = new Epm_SignInformation();
                    //人脸日志表
                    EPM_FaceOperateLog faceLog   = new EPM_FaceOperateLog();
                    Base_User          userModel = DataOperateBasic <Base_User> .Get(basedb).GetModel(model.UserId.Value);

                    List <Epm_ProjectCompany> proComList = DataOperateBusiness <Epm_ProjectCompany> .Get(busdb).GetList(t => t.ProjectId == model.ProjectId && (t.PMId == model.UserId || t.LinkManId == model.UserId || t.SafeManId == model.UserId)).ToList();

                    string type = "";
                    if (proComList.Any())
                    {
                        type = string.Join(",", proComList.Select(t => t.Type));
                    }

                    modelSign.userId         = model.UserId;
                    modelSign.userName       = userModel.UserName;
                    modelSign.projectId      = model.ProjectId;
                    modelSign.projectName    = model.ProjectName;
                    modelSign.Latitude       = model.Latitude;
                    modelSign.Longitude      = model.Longitude;
                    modelSign.gasstationName = model.OilStationName;
                    modelSign.jobInfo        = userModel.Post ?? "";
                    modelSign.type           = type;
                    modelSign.picStrength    = model.Image;
                    modelSign.SignTime       = DateTime.Now;

                    //日志
                    var requestJson = new
                    {
                        imageType = imageType,
                        groupId   = groupIdList,
                        options   = new
                        {
                            quality_control  = control,
                            liveness_control = control,
                            user_id          = model.UserId
                        }
                    };
                    faceLog.ModelId     = modelSign.Id;
                    faceLog.APIType     = FaceOperate.Search.ToString();
                    faceLog.RequestJson = requestJson.ToString();

                    JObject result = new JObject();
                    Face    client = GetFacaClient();
                    try
                    {
                        // 带参数调用人脸识别
                        result = client.Search(model.Image, imageType, groupIdList, options);
                    }
                    catch (Exception)
                    {
                        modelSign.SignResult = SignRes.Other.ToString();
                    }
                    if (result["error_code"].ToString() == "0" && result["error_msg"].ToString() == "SUCCESS")
                    {
                        var result_list = Newtonsoft.Json.JsonConvert.DeserializeObject(result["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)
                            {
                                modelSign.SignResult = SignRes.Success.ToString();
                                faceLog.IsSuccess    = true;
                                resultObj.Data       = 1;
                                resultObj.Flag       = EResultFlag.Success;
                            }
                            else
                            {
                                modelSign.SignResult = SignRes.NoFace.ToString();
                                faceLog.IsSuccess    = false;
                            }
                        }
                    }
                    else
                    {
                        modelSign.SignResult = SignRes.Fail.ToString();
                    }

                    faceLog.ResponseJson = result.ToString();
                    faceLog = SetCurrentUser(faceLog);

                    DataOperateBusiness <EPM_FaceOperateLog> .Get(busdb).Add(faceLog);

                    var rows = DataOperateBusiness <Epm_SignInformation> .Get(busdb).Add(modelSign);

                    if (rows > 0)
                    {
                        resultObj.Flag = EResultFlag.Success;
                    }
                }
            }
            catch (Exception ex)
            {
                resultObj.Data      = -1;
                resultObj.Flag      = EResultFlag.Failure;
                resultObj.Exception = new ExceptionEx(ex, "SearchUserFace");
            }
            finally
            {
                if (basedb.Database.Connection.State != ConnectionState.Closed)
                {
                    basedb.Database.Connection.Close();
                    basedb.Database.Connection.Dispose();
                }
                if (busdb.Database.Connection.State != ConnectionState.Closed)
                {
                    busdb.Database.Connection.Close();
                    busdb.Database.Connection.Dispose();
                }
            }
            return(resultObj);
        }
Exemplo n.º 4
0
 ///<summary>
 ///修改:
 ///</summary>
 ///<param name="model">要修改的model</param>
 ///<returns>受影响的行数</returns>
 public Result <int> UpdateFaceOperateLog(EPM_FaceOperateLog model)
 {
     return(base.Channel.UpdateFaceOperateLog(model));
 }
Exemplo n.º 5
0
        private Result <int> DelAIUserFaceInfo(long userId, string faceToken)
        {
            Result <int> resultObj = new Result <int>();

            resultObj.Data = -1;
            BusinessDataContext busdb = new BusinessDataContext();

            try
            {
                var     groupId = "group1";
                Face    client  = GetFacaClient();
                JObject result  = new JObject();
                //人脸日志表
                EPM_FaceOperateLog faceLog = new EPM_FaceOperateLog();
                //日志
                var requestJson = new
                {
                    groupId   = groupId,
                    userId    = userId,
                    faceToken = faceToken
                };
                faceLog.ModelId     = 0;
                faceLog.RequestJson = requestJson.ToString();
                faceLog.APIType     = FaceOperate.Delete.ToString();
                faceLog             = SetCurrentUser(faceLog);
                try
                {
                    result = client.FaceDelete(userId.ToString(), groupId, faceToken);

                    if (result["error_code"].ToString() == "0" && result["error_msg"].ToString() == "SUCCESS")
                    {
                        faceLog.IsSuccess = true;

                        resultObj.Data = 1;
                    }
                    else
                    {
                        faceLog.IsSuccess = false;
                    }
                }
                catch (Exception)
                {
                    faceLog.IsSuccess = false;
                }
                faceLog.ResponseJson = result.ToString();
                DataOperateBusiness <EPM_FaceOperateLog> .Get(busdb).Add(faceLog);

                resultObj.Flag = EResultFlag.Success;
            }
            catch (Exception ex)
            {
                resultObj.Data      = -1;
                resultObj.Flag      = EResultFlag.Failure;
                resultObj.Exception = new ExceptionEx(ex, "DelAIUserFaceInfo");
            }
            finally
            {
                if (busdb.Database.Connection.State != ConnectionState.Closed)
                {
                    busdb.Database.Connection.Close();
                    busdb.Database.Connection.Dispose();
                }
            }

            return(resultObj);
        }