/// <summary> /// 人脸注册 /// 注册前需要检测人脸图像是否合格 /// 暂时不做分组,整个项目同属一个分组内 /// 使用登录用户的手机号码作为userId /// </summary> public JsonResponse UserAdd(FaceRequest request) { try { var qiniu = EngineContext.Current.Resolve <IQiniuService>(); var result = Client.UserAdd(qiniu.DownLoadPrivateUrl(request.image), ImageType, GroupId, request.userId); var faceList = result.SelectToken("result"); if (!faceList.Any()) { return(new JsonResponse(OperatingState.Failure, "人脸导入失败,原因:" + GetError_msg(result.SelectToken("error_code").ToString()))); } var resultStr = DeserializeToModel <FaceListItem>(faceList.ToString()); //注册成功,修改用户的FaceImg和FaceToken //var userInfo = _enterpriseUserInfo.Table.FirstOrDefault(s => s.UserName == request.userId); //if (userInfo == null) return new JsonResponse(OperatingState.Failure, "人脸导入失败,原因:系统中未找到对应的用户"); //userInfo.FaceImg = request.image; //userInfo.FaceToken = resultStr.face_token; //_enterpriseUserInfo.SaveChanges(); return(new JsonResponse(OperatingState.Success, "人脸导入成功")); } catch (Exception e) { return(new JsonResponse(OperatingState.Success, "人脸导入成功,原因:", e.Message)); } }
/// <summary> /// 人脸对比 /// 优先注册一张照片到人脸库 /// 拍照获取照片生成网络路径调用此接口 /// 对比结果大于50或60表示认证成功 /// </summary> /// <returns>是否对比成功</returns> public bool Contrast(FaceRequest request) { try { //获取当前用户 最近登记的打卡图片的faceToken var userFaceToken = ""; var faceResult = FaceGetlist(request.userId); if (faceResult == null || faceResult.face_list.Count <= 0) { return(false); } var userFace = faceResult.face_list.FirstOrDefault(s => s.face_token == userFaceToken); var faces = new JArray { new JObject { { "image", request.image }, { "image_type", ImageType }, { "face_type", "LIVE" }, //人脸的类型 LIVE 表示生活照:通常为手机、相机拍摄的人像图片、或从网络获取的人像图片等 { "quality_control", "LOW" }, //图片质量控制 LOW 较低的质量要求 }, new JObject { { "image", userFace?.face_token }, { "image_type", "FACE_TOKEN" }, { "face_type", "LIVE" }, { "quality_control", "LOW" }, } }; var result = Client.Match(faces); var faceList = result.SelectToken("result"); var score = DeserializeToModel <FaceList>(faceList.ToString()); if (score == null) { return(false); } return(Convert.ToDouble(score.score) >= 50); } catch (Exception) { return(false); } }